blob: 0279d2a983a7b9e0acb12a90490ddf0d51a9eaa4 [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Gopichand Nakkala92f07d82013-01-08 21:16:34 -08002 * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
3 *
4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5 *
6 *
7 * Permission to use, copy, modify, and/or distribute this software for
8 * any purpose with or without fee is hereby granted, provided that the
9 * above copyright notice and this permission notice appear in all
10 * copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
13 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
14 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
15 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 * PERFORMANCE OF THIS SOFTWARE.
20 */
21/*
Jeff Johnson32d95a32012-09-10 13:15:23 -070022 * Copyright (c) 2012, The Linux Foundation. All rights reserved.
Jeff Johnson295189b2012-06-20 16:38:30 -070023 *
24 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
25 *
26 *
27 * Permission to use, copy, modify, and/or distribute this software for
28 * any purpose with or without fee is hereby granted, provided that the
29 * above copyright notice and this permission notice appear in all
30 * copies.
31 *
32 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
33 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
34 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
35 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
36 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
37 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
38 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
39 * PERFORMANCE OF THIS SOFTWARE.
40 */
41
42/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070043 W L A N _ Q C T _ WDA . C
Jeff Johnson295189b2012-06-20 16:38:30 -070044 OVERVIEW:
Jeff Johnson295189b2012-06-20 16:38:30 -070045 This software unit holds the implementation of the WLAN Transport Layer.
Jeff Johnson295189b2012-06-20 16:38:30 -070046 The functions externalized by this module are to be called ONLY by other
47 WLAN modules that properly register with the Transport Layer initially.
Jeff Johnson295189b2012-06-20 16:38:30 -070048 DEPENDENCIES:
Jeff Johnson295189b2012-06-20 16:38:30 -070049 Are listed for each API below.
50
Jeff Johnson295189b2012-06-20 16:38:30 -070051 Copyright (c) 2010-2011 QUALCOMM Incorporated.
52 All Rights Reserved.
53 Qualcomm Confidential and Proprietary
54===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070055/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070056 EDIT HISTORY FOR FILE
57
Jeff Johnson295189b2012-06-20 16:38:30 -070058 This section contains comments describing changes made to the module.
59 Notice that changes are listed in reverse chronological order.
60
Jeff Johnson295189b2012-06-20 16:38:30 -070061 $Header$$DateTime$$Author$
62
Jeff Johnson295189b2012-06-20 16:38:30 -070063 when who what, where, why
64---------- --- -------------------------------------------------
6510/05/2011 haparna Adding support for Keep Alive Feature
662010-12-30 smiryala UMAC convergence changes
672010-08-19 adwivedi WLAN DAL AL(WDA) layer for Prima
68===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070069#include "vos_mq.h"
70#include "vos_api.h"
71#include "vos_packet.h"
72#include "vos_nvitem.h"
73#include "sirApi.h"
74#include "wlan_qct_pal_packet.h"
75#include "wlan_qct_wda.h"
76#include "wlan_qct_wda_msg.h"
77#include "wlan_qct_wdi_cfg.h"
78#include "wlan_qct_wdi.h"
79#include "wlan_qct_wdi_ds.h"
80#include "wlan_hal_cfg.h"
81/**********************/
82#include "wniApi.h"
83#include "cfgApi.h"
84#include "limApi.h"
85#include "wlan_qct_tl.h"
86#include "wlan_qct_tli_ba.h"
87#include "limUtils.h"
88#include "btcApi.h"
89#include "vos_sched.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070090#include "pttMsgApi.h"
91#include "wlan_qct_sys.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070092/* Used MACRO's */
93/* Get WDA context from vOSS module */
94#define VOS_GET_WDA_CTXT(a) vos_get_context(VOS_MODULE_ID_WDA, a)
95#define VOS_GET_MAC_CTXT(a) vos_get_context(VOS_MODULE_ID_PE, a)
96#define OFFSET_OF(structType,fldName) (&((structType*)0)->fldName)
97#define WDA_BA_TX_FRM_THRESHOLD (5)
Jeff Johnson295189b2012-06-20 16:38:30 -070098#define CONVERT_WDI2SIR_STATUS(x) \
99 ((WDI_STATUS_SUCCESS != (x)) ? eSIR_FAILURE : eSIR_SUCCESS)
100
101#define IS_WDI_STATUS_FAILURE(status) \
102 ((WDI_STATUS_SUCCESS != (status)) && (WDI_STATUS_PENDING != (status)))
Jeff Johnson295189b2012-06-20 16:38:30 -0700103#define CONVERT_WDI2VOS_STATUS(x) \
104 ((IS_WDI_STATUS_FAILURE(x)) ? VOS_STATUS_E_FAILURE : VOS_STATUS_SUCCESS)
105
106/* macro's for acessing TL API/data structures */
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -0700107#define WDA_TL_GET_STA_STATE(a, b, c) WLANTL_GetSTAState(a, b, c)
Jeff Johnson295189b2012-06-20 16:38:30 -0700108#define WDA_TL_GET_TX_PKTCOUNT(a, b, c, d) WLANTL_GetTxPktCount(a, b, c, d)
Jeff Johnson295189b2012-06-20 16:38:30 -0700109#define WDA_GET_BA_TXFLAG(a, b, c) \
110 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) & (1 << (c)))
111
112#define WDA_SET_BA_TXFLAG(a, b, c) \
113 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) |= (1 << (c)))
114
115#define WDA_CLEAR_BA_TXFLAG(a, b, c) \
116 (((a)->wdaStaInfo[b].ucUseBaBitmap) &= ~(1 << c))
Jeff Johnson295189b2012-06-20 16:38:30 -0700117#define WDA_TL_BA_SESSION_ADD(a, b, c, d, e, f, g) \
118 WLANTL_BaSessionAdd(a, b, c, d, e, f, g)
Jeff Johnson295189b2012-06-20 16:38:30 -0700119/* timer related Macros */
120#define WDA_CREATE_TIMER(a, b, c, d, e, f, g) \
121 tx_timer_create(a, b, c, d, e, f, g)
122#define WDA_START_TIMER(a) tx_timer_activate(a)
123#define WDA_STOP_TIMER(a) tx_timer_deactivate(a)
124#define WDA_DESTROY_TIMER(a) tx_timer_delete(a)
Jeff Johnson32d95a32012-09-10 13:15:23 -0700125#define WDA_WDI_START_TIMEOUT (WDI_RESPONSE_TIMEOUT + 5000)
Jeff Johnson295189b2012-06-20 16:38:30 -0700126
127#define WDA_LAST_POLLED_THRESHOLD(a, curSta, tid) \
128 ((a)->wdaStaInfo[curSta].framesTxed[tid] + WDA_BA_TX_FRM_THRESHOLD)
Jeff Johnson295189b2012-06-20 16:38:30 -0700129#define WDA_BA_MAX_WINSIZE (64)
Jeff Johnson295189b2012-06-20 16:38:30 -0700130#define WDA_INVALID_KEY_INDEX 0xFF
Jeff Johnson295189b2012-06-20 16:38:30 -0700131#define WDA_NUM_PWR_SAVE_CFG 11
Jeff Johnson295189b2012-06-20 16:38:30 -0700132#define WDA_TX_COMPLETE_TIME_OUT_VALUE 1000
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800133#define WDA_TRAFFIC_STATS_TIME_OUT_VALUE 1000
Jeff Johnson295189b2012-06-20 16:38:30 -0700134
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700135#define WDA_MAX_RETRIES_TILL_RING_EMPTY 1000 /* MAX 10000 msec = 10 seconds wait */
Jeff Johnson295189b2012-06-20 16:38:30 -0700136
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700137#define WDA_WAIT_MSEC_TILL_RING_EMPTY 10 /* 10 msec wait per cycle */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700138#define WDA_IS_NULL_MAC_ADDRESS(mac_addr) \
139 ((mac_addr[0] == 0x00) && (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) &&\
140 (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) && (mac_addr[3] == 0x00))
141
142#define WDA_MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
143#define WDA_MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x"
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -0800144#define WDA_DUMPCMD_WAIT_TIMEOUT 10000
145
Jeff Johnson295189b2012-06-20 16:38:30 -0700146/* extern declarations */
147extern void vos_WDAComplete_cback(v_PVOID_t pVosContext);
Hoonki Lee9af07cf2013-04-24 01:21:58 -0700148extern wpt_uint8 WDI_GetActiveSessionsCount (void *pWDICtx, wpt_macAddr macBSSID, wpt_boolean skipBSSID);
149
Jeff Johnson295189b2012-06-20 16:38:30 -0700150/* forward declarations */
151void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
152 void *pBodyptr, tANI_U32 bodyVal) ;
153VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
154 WDI_StartReqParamsType *wdiStartParams ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700155VOS_STATUS WDA_wdiCompleteCB(v_PVOID_t pVosContext) ;
156VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams);
157
158extern v_BOOL_t sys_validateStaConfig( void *pImage, unsigned long cbFile,
159 void **ppStaConfig, v_SIZE_t *pcbStaConfig ) ;
160void processCfgDownloadReq(tpAniSirGlobal pMac, tANI_U16 length,
161 tANI_U32 *pConfig) ;
162void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
163 WDI_ConfigBSSReqInfoType *wdiBssParams, tAddBssParams *wdaBssParams) ;
164void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
165 WDI_ConfigStaReqInfoType *wdiStaParams, tAddStaParams *wdaStaParams) ;
166void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
167 void* pUserData ) ;
168static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA) ;
169static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA);
170void WDA_BaCheckActivity(tWDA_CbContext *pWDA) ;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800171void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700172void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams, void* pUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -0700173#ifdef WLAN_FEATURE_VOWIFI_11R
174VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA, tAggrAddTsParams *pAggrAddTsReqParams);
175#endif /* WLAN_FEATURE_VOWIFI_11R */
176
Jeff Johnson295189b2012-06-20 16:38:30 -0700177void WDA_TimerHandler(v_VOID_t *pWDA, tANI_U32 timerInfo) ;
178void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pContext) ;
179VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700180#ifdef FEATURE_WLAN_SCAN_PNO
181static VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA, tSirPNOScanReq *pPNOScanReqParams);
182static VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA, tSirSetRSSIFilterReq* pRssiFilterParams);
183static VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA, tSirUpdateScanParams *pUpdateScanParams);
184#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700185#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -0700186VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,tSirRoamOffloadScanReq *pRoamOffloadScanReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700187void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData);
188void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType);
189void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType);
190#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700191#ifdef WLAN_FEATURE_PACKET_FILTERING
192static VOS_STATUS WDA_Process8023MulticastListReq (
193 tWDA_CbContext *pWDA,
194 tSirRcvFltMcAddrList *pRcvFltMcAddrLis
195 );
196static VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (
197 tWDA_CbContext *pWDA,
198 tSirRcvPktFilterCfgType *pRcvPktFilterCfg
199 );
200static VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (
201 tWDA_CbContext *pWDA,
202 tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp
203 );
204static VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (
205 tWDA_CbContext *pWDA,
206 tSirRcvFltPktClearParam *pRcvFltPktClearParam
207 );
208#endif // WLAN_FEATURE_PACKET_FILTERING
Jeff Johnson295189b2012-06-20 16:38:30 -0700209VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA, tSirSetPowerParamsReq *pPowerParams);
Jeff Johnson295189b2012-06-20 16:38:30 -0700210static VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
211 tpTxControlParams pTxCtrlParam);
Jeff Johnson295189b2012-06-20 16:38:30 -0700212VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
213 v_U8_t *pDefaultKeyId,
214 v_U8_t *pNumKeys,
215 WDI_KeysType *pWdiKeys );
216
217#ifdef WLAN_FEATURE_GTK_OFFLOAD
218static VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA, tpSirGtkOffloadParams pGtkOffloadParams);
219static VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA, tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp);
220#endif // WLAN_FEATURE_GTK_OFFLOAD
221
222VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
223 tAniSetTmLevelReq *setTmLevelReq);
Mohit Khanna4a70d262012-09-11 16:30:12 -0700224#ifdef WLAN_FEATURE_11AC
225VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
226 tUpdateVHTOpMode *pData);
227#endif
Leo Chang9056f462013-08-01 19:21:11 -0700228
229#ifdef FEATURE_WLAN_LPHB
230VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
231 tSirLPHBReq *pData);
232#endif /* FEATURE_WLAN_LPHB */
Jeff Johnson295189b2012-06-20 16:38:30 -0700233/*
234 * FUNCTION: WDA_open
235 * Allocate the WDA context
236 */
237VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t pOSContext,
238 tMacOpenParameters *pMacParams )
239{
240 tWDA_CbContext *wdaContext;
241 VOS_STATUS status;
242 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700243 /* Allocate WDA context */
244 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
245 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
246 if(!VOS_IS_STATUS_SUCCESS(status))
247 {
248 return VOS_STATUS_E_NOMEM;
249 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700250 /*__asm int 3;*/
251 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
252
253 /* Initialize data structures */
254 wdaContext->pVosContext = pVosContext;
255 wdaContext->wdaState = WDA_INIT_STATE;
256 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
257
258 /* Initialize WDA-WDI synchronization event */
259 status = vos_event_init(&wdaContext->wdaWdiEvent);
260 if(!VOS_IS_STATUS_SUCCESS(status))
261 {
262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
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
Jeff Johnson295189b2012-06-20 16:38:30 -07001738 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001739#ifdef WLAN_DEBUG
1740 {
1741 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07001742 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1743 "****** Dumping CFG TLV ***** ");
1744 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
1745 {
1746 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1747 "%02x %02x %02x %02x %02x %02x %02x %02x",
1748 tlvStructStart[i],
1749 tlvStructStart[i+1],
1750 tlvStructStart[i+2],
1751 tlvStructStart[i+3],
1752 tlvStructStart[i+4],
1753 tlvStructStart[i+5],
1754 tlvStructStart[i+6],
1755 tlvStructStart[i+7]);
1756 }
1757 /* Dump the bytes in the last line*/
1758 for (; i < wdiStartParams->usConfigBufferLen; i++)
1759 {
1760 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1761 "%02x ",tlvStructStart[i]);
1762 }
1763 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1764 "**************************** ");
1765 }
1766#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001767 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001768handle_failure:
1769 vos_mem_free(configParam);
1770 return VOS_STATUS_E_FAILURE;
1771}
Jeff Johnson295189b2012-06-20 16:38:30 -07001772/*
1773 * FUNCTION: WDA_wdiCompleteCB
1774 * call the voss call back function
1775 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001776void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07001777{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001778 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
1779 tWDA_CbContext *wdaContext;
1780
1781 if(NULL == pWdaParams)
1782 {
1783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001784 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001785 VOS_ASSERT(0) ;
1786 return ;
1787 }
1788
1789 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
1790
Jeff Johnson295189b2012-06-20 16:38:30 -07001791 if (NULL == wdaContext)
1792 {
1793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001794 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001795 return ;
1796 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001797
Jeff Johnson295189b2012-06-20 16:38:30 -07001798 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001799 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07001800 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001801 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07001802 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001803 vos_mem_free(pWdaParams);
1804
Jeff Johnson295189b2012-06-20 16:38:30 -07001805 if(WDI_STATUS_SUCCESS != status)
1806 {
1807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1808 "WDI stop callback returned failure" );
1809 VOS_ASSERT(0) ;
1810 }
1811 else
1812 {
1813 wdaContext->wdaState = WDA_STOP_STATE;
1814 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001815
Leo Chang9d76f622013-08-23 16:34:52 -07001816 /* FTM Driver stop procedure should be synced.
1817 * Stop and Close will happen on same context */
1818 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
1819 {
1820 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
1821 {
1822 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
1823 "%s: FTM Stop Event Set Fail", __func__);
1824 VOS_ASSERT(0);
1825 }
1826 }
1827
Jeff Johnson295189b2012-06-20 16:38:30 -07001828 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001829 vos_WDAComplete_cback(wdaContext->pVosContext);
1830
Jeff Johnson295189b2012-06-20 16:38:30 -07001831 return ;
1832}
Jeff Johnson295189b2012-06-20 16:38:30 -07001833/*
1834 * FUNCTION: WDA_stop
1835 * call WDI_stop
1836 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001837VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
1838{
1839 WDI_Status wdiStatus;
1840 VOS_STATUS status = VOS_STATUS_SUCCESS;
1841 WDI_StopReqParamsType *wdiStopReq;
1842 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001843 tWDA_ReqParams *pWdaParams ;
1844
Jeff Johnson295189b2012-06-20 16:38:30 -07001845 if (NULL == pWDA)
1846 {
1847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001848 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001849 VOS_ASSERT(0);
1850 return VOS_STATUS_E_FAILURE;
1851 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001852 if (pWDA->wdiFailed == true)
1853 {
1854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001855 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001856 return VOS_STATUS_E_ALREADY;
1857 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001858
Jeff Johnson295189b2012-06-20 16:38:30 -07001859 /* FTM mode stay START_STATE */
1860 if( (WDA_READY_STATE != pWDA->wdaState) &&
1861 (WDA_INIT_STATE != pWDA->wdaState) &&
1862 (WDA_START_STATE != pWDA->wdaState) )
1863 {
1864 VOS_ASSERT(0);
1865 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001866 wdiStopReq = (WDI_StopReqParamsType *)
1867 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
1868 if(NULL == wdiStopReq)
1869 {
1870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001871 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001872 VOS_ASSERT(0);
1873 return VOS_STATUS_E_NOMEM;
1874 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001875
Jeff Johnson295189b2012-06-20 16:38:30 -07001876 wdiStopReq->wdiStopReason = reason;
1877 wdiStopReq->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001878
1879 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
1880 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07001881 {
1882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001883 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001884 VOS_ASSERT(0);
1885 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001886 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07001887 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001888
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001889 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
1890 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07001891 {
1892 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001893 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001894 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001895
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001896 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
1897 pWdaParams->wdaMsgParam = NULL;
1898 pWdaParams->pWdaContext = pWDA;
1899
Jeff Johnson295189b2012-06-20 16:38:30 -07001900 /* call WDI stop */
1901 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001902 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
1903
Jeff Johnson295189b2012-06-20 16:38:30 -07001904 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
1905 {
1906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1907 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001908 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
1909 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07001910 status = VOS_STATUS_E_FAILURE;
1911 }
Leo Chang9d76f622013-08-23 16:34:52 -07001912
1913 /* FTM Driver stop procedure should be synced.
1914 * Stop and Close will happen on same context */
1915 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
1916 {
1917 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
1918 WDI_RESPONSE_TIMEOUT);
1919 if (status != VOS_STATUS_SUCCESS)
1920 {
1921 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
1922 "%s: FTM Stop Timepoout", __func__);
1923 VOS_ASSERT(0);
1924 vos_event_reset(&pWDA->ftmStopDoneEvent);
1925 }
1926 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001927 return status;
1928}
Jeff Johnson295189b2012-06-20 16:38:30 -07001929/*
1930 * FUNCTION: WDA_close
1931 * call WDI_close and free the WDA context
1932 */
1933VOS_STATUS WDA_close(v_PVOID_t pVosContext)
1934{
Jeff Johnson43971f52012-07-17 12:26:56 -07001935 VOS_STATUS status = VOS_STATUS_SUCCESS;
1936 WDI_Status wstatus;
1937 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07001938 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001939 if (NULL == wdaContext)
1940 {
1941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001942 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001943 return VOS_STATUS_E_FAILURE;
1944 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001945 if((WDA_INIT_STATE != wdaContext->wdaState) &&
1946 (WDA_STOP_STATE != wdaContext->wdaState))
1947 {
1948 VOS_ASSERT(0);
1949 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001950 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07001951 wstatus = WDI_Close();
1952 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07001953 {
1954 status = VOS_STATUS_E_FAILURE;
1955 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001956 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001957 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07001958 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
1959 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001960 {
1961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08001962 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07001963 status = VOS_STATUS_E_FAILURE;
1964 }
1965
Jeff Johnson43971f52012-07-17 12:26:56 -07001966 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001967 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001968 {
1969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08001970 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07001971 status = VOS_STATUS_E_FAILURE;
1972 }
Jeff Johnson43971f52012-07-17 12:26:56 -07001973 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001974 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001975 {
1976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08001977 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07001978 status = VOS_STATUS_E_FAILURE;
1979 }
Jeff Johnson43971f52012-07-17 12:26:56 -07001980 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07001981 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001982 {
1983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08001984 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07001985 status = VOS_STATUS_E_FAILURE;
1986 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001987 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07001988 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07001989 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07001990 {
1991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1992 "error in WDA close " );
1993 status = VOS_STATUS_E_FAILURE;
1994 }
1995 return status;
1996}
Jeff Johnson295189b2012-06-20 16:38:30 -07001997/*
1998 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
1999 * returns 1 if the compiled version is greater than or equal to the input version
2000 */
2001
2002uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2003{
2004 VOS_STATUS status = VOS_STATUS_SUCCESS;
2005 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2006 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002007 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002008 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
2009 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
2010 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
2011 (compiledVersion.revision >= revision)))
2012 return 1;
2013 else
2014 return 0;
2015}
Jeff Johnson295189b2012-06-20 16:38:30 -07002016/*
2017 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
2018 * returns 1 if the compiled version is greater than or equal to the input version
2019 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002020uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2021{
2022 VOS_STATUS status = VOS_STATUS_SUCCESS;
2023 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2024 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002025 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002026 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
2027 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
2028 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
2029 (reportedVersion.revision >= revision)))
2030 return 1;
2031 else
2032 return 0;
2033}
Jeff Johnson295189b2012-06-20 16:38:30 -07002034/*
2035 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
2036 * Returns the version of the WCNSS WLAN API with which the HOST
2037 * device driver was compiled
2038 */
2039VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
2040 tSirVersionType *pVersion)
2041{
2042 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002043 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002044 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002045 if ((NULL == pvosGCtx) || (NULL == pVersion))
2046 {
2047 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002048 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002049 VOS_ASSERT(0);
2050 return VOS_STATUS_E_FAILURE;
2051 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002052 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2053 if (NULL == pWDA )
2054 {
2055 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002056 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002057 VOS_ASSERT(0);
2058 return VOS_STATUS_E_FAILURE;
2059 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002060 *pVersion = pWDA->wcnssWlanCompiledVersion;
2061 return VOS_STATUS_SUCCESS;
2062}
Jeff Johnson295189b2012-06-20 16:38:30 -07002063/*
2064 * FUNCTION: WDA_GetWcnssWlanReportedVersion
2065 * Returns the version of the WCNSS WLAN API with which the WCNSS
2066 * device driver was compiled
2067 */
2068VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
2069 tSirVersionType *pVersion)
2070{
2071 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002072 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002073 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002074 if ((NULL == pvosGCtx) || (NULL == pVersion))
2075 {
2076 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002077 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002078 VOS_ASSERT(0);
2079 return VOS_STATUS_E_FAILURE;
2080 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002081 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2082 if (NULL == pWDA )
2083 {
2084 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002085 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002086 VOS_ASSERT(0);
2087 return VOS_STATUS_E_FAILURE;
2088 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002089 *pVersion = pWDA->wcnssWlanReportedVersion;
2090 return VOS_STATUS_SUCCESS;
2091}
Jeff Johnson295189b2012-06-20 16:38:30 -07002092/*
2093 * FUNCTION: WDA_GetWcnssSoftwareVersion
2094 * Returns the WCNSS Software version string
2095 */
2096VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
2097 tANI_U8 *pVersion,
2098 tANI_U32 versionBufferSize)
2099{
2100 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002101 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002102 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002103 if ((NULL == pvosGCtx) || (NULL == pVersion))
2104 {
2105 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002106 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002107 VOS_ASSERT(0);
2108 return VOS_STATUS_E_FAILURE;
2109 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002110 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2111 if (NULL == pWDA )
2112 {
2113 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002114 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002115 VOS_ASSERT(0);
2116 return VOS_STATUS_E_FAILURE;
2117 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002118 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
2119 return VOS_STATUS_SUCCESS;
2120}
Jeff Johnson295189b2012-06-20 16:38:30 -07002121/*
2122 * FUNCTION: WDA_GetWcnssHardwareVersion
2123 * Returns the WCNSS Hardware version string
2124 */
2125VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
2126 tANI_U8 *pVersion,
2127 tANI_U32 versionBufferSize)
2128{
2129 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002130 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002131 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002132 if ((NULL == pvosGCtx) || (NULL == pVersion))
2133 {
2134 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002135 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002136 VOS_ASSERT(0);
2137 return VOS_STATUS_E_FAILURE;
2138 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002139 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2140 if (NULL == pWDA )
2141 {
2142 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002143 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002144 VOS_ASSERT(0);
2145 return VOS_STATUS_E_FAILURE;
2146 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002147 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
2148 return VOS_STATUS_SUCCESS;
2149}
Jeff Johnson295189b2012-06-20 16:38:30 -07002150/*
2151 * FUNCTION: WDA_WniCfgDnld
2152 * Trigger CFG Download
2153 */
2154VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
2155{
2156 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002157 VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002158 v_VOID_t *pFileImage = NULL;
2159 v_SIZE_t cbFileImageSize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002160 v_VOID_t *pCfgBinary = NULL;
2161 v_SIZE_t cbCfgBinarySize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002162 v_BOOL_t bStatus = VOS_FALSE;
Jeff Johnsonab81a082013-04-03 16:00:31 -07002163
Jeff Johnson295189b2012-06-20 16:38:30 -07002164 if (NULL == pMac )
2165 {
2166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002167 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002168 VOS_ASSERT(0);
2169 return VOS_STATUS_E_FAILURE;
2170 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002171 /* get the number of bytes in the CFG Binary... */
2172 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, NULL,
2173 &cbFileImageSize );
2174 if ( VOS_STATUS_E_NOMEM != vosStatus )
2175 {
2176 VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR,
2177 "Error obtaining binary size" );
2178 goto fail;
2179 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002180 // malloc a buffer to read in the Configuration binary file.
2181 pFileImage = vos_mem_malloc( cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07002182 if ( NULL == pFileImage )
2183 {
2184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2185 "Unable to allocate memory for the CFG binary [size= %d bytes]",
2186 cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07002187 vosStatus = VOS_STATUS_E_NOMEM;
2188 goto fail;
2189 }
2190
2191 /* Get the entire CFG file image... */
2192 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, pFileImage,
2193 &cbFileImageSize );
2194 if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) )
2195 {
2196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2197 "Error: Cannot retrieve CFG file image from vOSS. [size= %d bytes]",
2198 cbFileImageSize );
2199 goto fail;
2200 }
2201
2202 /*
2203 * Validate the binary image. This function will return a pointer
2204 * and length where the CFG binary is located within the binary image file.
2205 */
2206 bStatus = sys_validateStaConfig( pFileImage, cbFileImageSize,
2207 &pCfgBinary, &cbCfgBinarySize );
2208 if ( VOS_FALSE == bStatus )
2209 {
2210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2211 "Error: Cannot find STA CFG in binary image file" );
2212 vosStatus = VOS_STATUS_E_FAILURE;
2213 goto fail;
2214 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002215 /*
2216 * TODO: call the config download function
2217 * for now calling the existing cfg download API
2218 */
2219 processCfgDownloadReq(pMac,cbCfgBinarySize,pCfgBinary);
Jeff Johnsonab81a082013-04-03 16:00:31 -07002220 vosStatus = VOS_STATUS_SUCCESS;
2221
2222 /* fall through to clean up and return success */
Jeff Johnson295189b2012-06-20 16:38:30 -07002223
2224fail:
Jeff Johnsonab81a082013-04-03 16:00:31 -07002225 vos_mem_free( pFileImage );
Jeff Johnson295189b2012-06-20 16:38:30 -07002226 return vosStatus;
2227}
Jeff Johnson295189b2012-06-20 16:38:30 -07002228/* -----------------------------------------------------------------
2229 * WDI interface
2230 * -----------------------------------------------------------------
2231 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002232/*
2233 * FUNCTION: WDA_suspendDataTxCallback
2234 * call back function called from TL after suspend Transmission
2235 */
2236VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2237 v_U8_t* ucSTAId,
2238 VOS_STATUS vosStatus)
2239{
2240 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002242 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002243 if (NULL == pWDA )
2244 {
2245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002246 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002247 VOS_ASSERT(0);
2248 return VOS_STATUS_E_FAILURE;
2249 }
2250 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2251 {
2252 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2253 }
2254 else
2255 {
2256 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2257 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002258 /* Trigger the event to bring the WDA TL suspend function to come
2259 * out of wait*/
2260 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2261 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2262 {
2263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002264 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002265 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002266 /* If TL suspended had timedout before this callback was called, resume back
2267 * TL.*/
2268 if (pWDA->txSuspendTimedOut)
2269 {
2270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002271 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07002272 WDA_ResumeDataTx(pWDA);
2273 pWDA->txSuspendTimedOut = FALSE;
2274 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002275 return VOS_STATUS_SUCCESS;
2276}
Jeff Johnson295189b2012-06-20 16:38:30 -07002277/*
2278 * FUNCTION: WDA_suspendDataTx
2279 * Update TL to suspend the data Transmission
2280 */
2281VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2282{
2283 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2284 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002285
2286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002287 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002288 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002289 if (pWDA->txSuspendTimedOut)
2290 {
2291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002292 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07002293 return status;
2294 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002295 /* Reset the event to be not signalled */
2296 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2297 if(!VOS_IS_STATUS_SUCCESS(status))
2298 {
2299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002300 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002301 return VOS_STATUS_E_FAILURE;
2302 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002303 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002304 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002305 WDA_SuspendDataTxCallback);
2306 if(status != VOS_STATUS_SUCCESS)
2307 {
2308 return status;
2309 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002310 /* Wait for the event to be set by the TL, to get the response of
2311 * suspending the TX queues, this event should be set by the Callback
2312 * function called by TL*/
2313 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2314 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2315 if(!VOS_IS_STATUS_SUCCESS(status))
2316 {
2317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2318 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002319 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002320 /* Set this flag to true when TL suspend times out, so that when TL
2321 * suspend eventually happens and calls the callback, TL can be resumed
2322 * right away by looking at this flag when true.*/
2323 pWDA->txSuspendTimedOut = TRUE;
2324 }
2325 else
2326 {
2327 pWDA->txSuspendTimedOut = FALSE;
2328 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002329 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2330 {
2331 status = VOS_STATUS_SUCCESS;
2332 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002333 return status;
2334}
Jeff Johnson295189b2012-06-20 16:38:30 -07002335/*
2336 * FUNCTION: WDA_resumeDataTx
2337 * Update TL to resume the data Transmission
2338 */
2339VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2340{
2341 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002342
2343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002344 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002345
2346 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002347 return status;
2348}
Jeff Johnson295189b2012-06-20 16:38:30 -07002349/*
2350 * FUNCTION: WDA_InitScanReqCallback
2351 * Trigger Init SCAN callback
2352 */
2353void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2354{
2355 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2356 tWDA_CbContext *pWDA;
2357 tInitScanParams *pWDA_ScanParam ;
2358 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002360 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002361 if(NULL == pWdaParams)
2362 {
2363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002364 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002365 VOS_ASSERT(0) ;
2366 return ;
2367 }
2368 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2369 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002370 if(NULL == pWDA_ScanParam)
2371 {
2372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002373 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002374 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002375 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2376 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002377 return ;
2378 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002379 if(WDI_STATUS_SUCCESS != wdiStatus)
2380 {
2381 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002382 if(VOS_STATUS_SUCCESS != status)
2383 {
2384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002385 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002386 }
2387 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002388 /* free WDI command buffer */
2389 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002390 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002391
Jeff Johnson295189b2012-06-20 16:38:30 -07002392
2393 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002394 /* without converting the Status to Failure or Success Just
2395 pass the same status to lim */
2396 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002397 /* send SCAN RSP message back to PE */
2398 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002399 return ;
2400}
2401
2402/*
2403 * FUNCTION: WDA_ProcessInitScanReq
2404 * Trigger Init SCAN in DAL
2405 */
2406VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2407 tInitScanParams *initScanParams)
2408{
2409 WDI_Status status = WDI_STATUS_SUCCESS ;
2410 WDI_InitScanReqParamsType *wdiInitScanParam =
2411 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2412 sizeof(WDI_InitScanReqParamsType)) ;
2413 tWDA_ReqParams *pWdaParams;
2414 tANI_U8 i = 0;
2415
2416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002417 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002418 if(NULL == wdiInitScanParam)
2419 {
2420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002421 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002422 VOS_ASSERT(0);
2423 return VOS_STATUS_E_NOMEM;
2424 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002425 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2426 if(NULL == pWdaParams)
2427 {
2428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002429 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002430 VOS_ASSERT(0);
2431 vos_mem_free(wdiInitScanParam);
2432 return VOS_STATUS_E_NOMEM;
2433 }
2434
2435 /* Copy init Scan params to WDI structure */
2436 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2437 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2438 sizeof(tSirMacAddr)) ;
2439 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2440 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2441 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002442 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2443 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07002444 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2445 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002446 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2447 {
2448 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2449 initScanParams->scanEntry.bssIdx[i] ;
2450 }
2451
2452 /* if Frame length, copy macMgmtHdr or WDI structure */
2453 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2454 {
2455 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2456 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2457 }
2458 wdiInitScanParam->wdiReqStatusCB = NULL ;
2459
Jeff Johnson295189b2012-06-20 16:38:30 -07002460 /* Store Init Req pointer, as this will be used for response */
2461 pWdaParams->pWdaContext = pWDA;
2462 pWdaParams->wdaMsgParam = initScanParams;
2463 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002464 /* first try to suspend TX */
2465 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002466 if(WDI_STATUS_SUCCESS != status)
2467 {
2468 goto handleWdiFailure;
2469 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002470 /* call DAL API to pass init scan request to DAL */
2471 status = WDI_InitScanReq(wdiInitScanParam,
2472 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002473 if(IS_WDI_STATUS_FAILURE(status))
2474 {
2475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2476 "error in WDA Init Scan, Resume Tx " );
2477 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002478 VOS_ASSERT(0) ;
2479
2480 goto handleWdiFailure;
2481 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002482 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002483handleWdiFailure:
2484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2485 "Failure in WDI Api, free all the memory " );
2486 /* free WDI command buffer */
2487 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2488 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002489 /* send Failure to PE */
2490 initScanParams->status = eSIR_FAILURE ;
2491 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002492 return CONVERT_WDI2VOS_STATUS(status) ;
2493}
2494
Jeff Johnson295189b2012-06-20 16:38:30 -07002495/*
2496 * FUNCTION: WDA_StartScanReqCallback
2497 * send Start SCAN RSP back to PE
2498 */
2499void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2500 void* pUserData)
2501{
2502 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2503 tWDA_CbContext *pWDA;
2504 tStartScanParams *pWDA_ScanParam;
2505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002506 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002507 if(NULL == pWdaParams)
2508 {
2509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002510 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002511 VOS_ASSERT(0) ;
2512 return ;
2513 }
2514 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2515 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002516 if(NULL == pWDA_ScanParam)
2517 {
2518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002519 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002520 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002521 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002522 return ;
2523 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002524 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2525 {
2526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002527 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002528 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002529 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002530 return ;
2531 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002532 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2533 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002534
Jeff Johnson295189b2012-06-20 16:38:30 -07002535
2536 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002537 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002538 /* send SCAN RSP message back to PE */
2539 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002540 return ;
2541}
2542
Jeff Johnson295189b2012-06-20 16:38:30 -07002543/*
2544 * FUNCTION: WDA_ProcessStartScanReq
2545 * Trigger start SCAN in WDI
2546 */
2547VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2548 tStartScanParams *startScanParams)
2549{
2550 WDI_Status status = WDI_STATUS_SUCCESS;
2551 WDI_StartScanReqParamsType *wdiStartScanParams =
2552 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2553 sizeof(WDI_StartScanReqParamsType)) ;
2554 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002556 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002557 if(NULL == wdiStartScanParams)
2558 {
2559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002560 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002561 VOS_ASSERT(0);
2562 return VOS_STATUS_E_NOMEM;
2563 }
2564 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2565 if(NULL == pWdaParams)
2566 {
2567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002568 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002569 VOS_ASSERT(0);
2570 vos_mem_free(wdiStartScanParams);
2571 return VOS_STATUS_E_NOMEM;
2572 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002573 /* Copy init Scan params to WDI structure */
2574 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2575 wdiStartScanParams->wdiReqStatusCB = NULL ;
2576
Jeff Johnson295189b2012-06-20 16:38:30 -07002577 /* Store Init Req pointer, as this will be used for response */
2578 /* store Params pass it to WDI */
2579 pWdaParams->pWdaContext = pWDA;
2580 pWdaParams->wdaMsgParam = startScanParams;
2581 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002582 /* call DAL API to pass init scan request to DAL */
2583 status = WDI_StartScanReq(wdiStartScanParams,
2584 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002585 /* failure returned by WDI API */
2586 if(IS_WDI_STATUS_FAILURE(status))
2587 {
2588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2589 "Failure in Start Scan WDI API, free all the memory "
2590 "It should be due to previous abort scan." );
2591 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2592 vos_mem_free(pWdaParams) ;
2593 startScanParams->status = eSIR_FAILURE ;
2594 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2595 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002596 return CONVERT_WDI2VOS_STATUS(status) ;
2597}
Jeff Johnson295189b2012-06-20 16:38:30 -07002598/*
2599 * FUNCTION: WDA_EndScanReqCallback
2600 * END SCAN callback
2601 */
2602void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2603{
2604 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2605 tWDA_CbContext *pWDA;
2606 tEndScanParams *endScanParam;
2607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002608 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002609 if(NULL == pWdaParams)
2610 {
2611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002612 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002613 VOS_ASSERT(0) ;
2614 return ;
2615 }
2616 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2617 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002618 if(NULL == endScanParam)
2619 {
2620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002621 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002622 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002623 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2624 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002625 return ;
2626 }
2627
2628 /* Free WDI command buffer */
2629 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2630 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002631 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002632 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002633 /* send response back to PE */
2634 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2635 return ;
2636}
2637
Jeff Johnson295189b2012-06-20 16:38:30 -07002638/*
2639 * FUNCTION: WDA_ProcessEndScanReq
2640 * Trigger END SCAN in WDI
2641 */
2642VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2643 tEndScanParams *endScanParams)
2644{
2645 WDI_Status status = WDI_STATUS_SUCCESS;
2646 WDI_EndScanReqParamsType *wdiEndScanParams =
2647 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2648 sizeof(WDI_EndScanReqParamsType)) ;
2649 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002651 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002652 if(NULL == wdiEndScanParams)
2653 {
2654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002655 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002656 VOS_ASSERT(0);
2657 return VOS_STATUS_E_NOMEM;
2658 }
2659 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2660 if(NULL == pWdaParams)
2661 {
2662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002663 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002664 VOS_ASSERT(0);
2665 vos_mem_free(wdiEndScanParams);
2666 return VOS_STATUS_E_NOMEM;
2667 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002668 /* Copy init Scan params to WDI structure */
2669 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2670 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002671 /* Store Init Req pointer, as this will be used for response */
2672 /* store Params pass it to WDI */
2673 pWdaParams->pWdaContext = pWDA;
2674 pWdaParams->wdaMsgParam = endScanParams;
2675 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002676 /* call DAL API to pass init scan request to DAL */
2677 status = WDI_EndScanReq(wdiEndScanParams,
2678 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002679 if(IS_WDI_STATUS_FAILURE(status))
2680 {
2681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2682 "Failure in End Scan WDI API, free all the memory "
2683 "It should be due to previous abort scan." );
2684 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2685 vos_mem_free(pWdaParams) ;
2686 endScanParams->status = eSIR_FAILURE ;
2687 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2688 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002689 return CONVERT_WDI2VOS_STATUS(status) ;
2690}
Jeff Johnson295189b2012-06-20 16:38:30 -07002691/*
2692 * FUNCTION: WDA_FinishScanReqCallback
2693 * Trigger Finish SCAN callback
2694 */
2695void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2696{
2697 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2698 tWDA_CbContext *pWDA;
2699 tFinishScanParams *finishScanParam;
2700 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002702 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002703 if(NULL == pWdaParams)
2704 {
2705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002706 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002707 VOS_ASSERT(0) ;
2708 return ;
2709 }
2710
2711 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2712 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002713 if(NULL == finishScanParam)
2714 {
2715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002716 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002717 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002718 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2719 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002720 return ;
2721 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002722 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2723 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002724 /*
2725 * Now Resume TX, if we reached here means, TX is already suspended, we
2726 * have to resume it unconditionaly
2727 */
2728 status = WDA_ResumeDataTx(pWDA) ;
2729
2730 if(VOS_STATUS_SUCCESS != status)
2731 {
2732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002733 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002734 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002735 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002736 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
2737 return ;
2738}
Jeff Johnson295189b2012-06-20 16:38:30 -07002739/*
2740 * FUNCTION: WDA_ProcessFinshScanReq
2741 * Trigger Finish SCAN in WDI
2742 */
2743VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
2744 tFinishScanParams *finishScanParams)
2745{
2746 WDI_Status status = WDI_STATUS_SUCCESS;
2747 WDI_FinishScanReqParamsType *wdiFinishScanParams =
2748 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
2749 sizeof(WDI_FinishScanReqParamsType)) ;
2750 tWDA_ReqParams *pWdaParams ;
2751 tANI_U8 i = 0;
2752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002753 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002754 if(NULL == wdiFinishScanParams)
2755 {
2756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002757 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002758 VOS_ASSERT(0);
2759 return VOS_STATUS_E_NOMEM;
2760 }
2761 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2762 if(NULL == pWdaParams)
2763 {
2764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002765 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002766 VOS_ASSERT(0);
2767 vos_mem_free(wdiFinishScanParams);
2768 return VOS_STATUS_E_NOMEM;
2769 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002770 /* Copy init Scan params to WDI structure */
2771 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
2772 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
2773 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002774 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
2775 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
2776 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
2777 finishScanParams->frameLength ;
2778 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
2779 finishScanParams->currentOperChannel ;
2780 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
2781 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
2782 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002783 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
2784 {
2785 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2786 finishScanParams->scanEntry.bssIdx[i] ;
2787 }
2788
2789
Jeff Johnson295189b2012-06-20 16:38:30 -07002790 /* if Frame length, copy macMgmtHdr ro WDI structure */
2791 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
2792 {
2793 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
2794 &finishScanParams->macMgmtHdr,
2795 sizeof(WDI_MacMgmtHdr)) ;
2796 }
2797 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002798 /* Store Init Req pointer, as this will be used for response */
2799 /* store Params pass it to WDI */
2800 pWdaParams->pWdaContext = pWDA;
2801 pWdaParams->wdaMsgParam = finishScanParams;
2802 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002803 /* call DAL API to pass init scan request to DAL */
2804 status = WDI_FinishScanReq(wdiFinishScanParams,
2805 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002806
Jeff Johnson295189b2012-06-20 16:38:30 -07002807
2808 /*
2809 * WDI API returns failure..
2810 */
2811 if(IS_WDI_STATUS_FAILURE( status))
2812 {
2813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2814 "Failure in Finish Scan WDI API, free all the memory " );
2815 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2816 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002817 finishScanParams->status = eSIR_FAILURE ;
2818 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
2819 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002820 return CONVERT_WDI2VOS_STATUS(status) ;
2821}
Jeff Johnson295189b2012-06-20 16:38:30 -07002822/*---------------------------------------------------------------------
2823 * ASSOC API's
2824 *---------------------------------------------------------------------
2825 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002826/*
2827 * FUNCTION: WDA_JoinReqCallback
2828 * Trigger Init SCAN callback
2829 */
2830void WDA_JoinReqCallback(WDI_Status status, void* pUserData)
2831{
2832 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2833 tWDA_CbContext *pWDA;
2834 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002836 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002837 if(NULL == pWdaParams)
2838 {
2839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002840 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002841 VOS_ASSERT(0) ;
2842 return ;
2843 }
2844 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2845 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002846 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
2847 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002848 /* reset macBSSID */
2849 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07002850 /* reset macSTASelf */
2851 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002852 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002853 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002854 return ;
2855}
Jeff Johnson295189b2012-06-20 16:38:30 -07002856/*
2857 * FUNCTION: WDA_ProcessJoinReq
2858 * Trigger Join REQ in WDI
2859 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002860VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
2861 tSwitchChannelParams* joinReqParam)
2862{
2863 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002864 WDI_JoinReqParamsType *wdiJoinReqParam =
2865 (WDI_JoinReqParamsType *)vos_mem_malloc(
2866 sizeof(WDI_JoinReqParamsType)) ;
2867 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002869 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002870 if(NULL == wdiJoinReqParam)
2871 {
2872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002873 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002874 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002875 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002876 return VOS_STATUS_E_NOMEM;
2877 }
2878 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2879 if(NULL == pWdaParams)
2880 {
2881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002882 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002883 VOS_ASSERT(0);
2884 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002885 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002886 return VOS_STATUS_E_NOMEM;
2887 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002888
2889 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
2890 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
2891 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
2892 {
2893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
2894 "%s: received join request when BSSID or self-STA is NULL "
2895 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002896 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002897 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
2898 VOS_ASSERT(0);
2899 vos_mem_free(wdiJoinReqParam);
2900 vos_mem_free(pWdaParams);
2901 joinReqParam->status = eSIR_FAILURE ;
2902 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2903 return VOS_STATUS_E_INVAL;
2904 }
2905
Jeff Johnson295189b2012-06-20 16:38:30 -07002906 /* copy the BSSID for pWDA */
2907 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
2908 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002909 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
2910 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002911 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
2912 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07002913#ifdef WLAN_FEATURE_VOWIFI
2914 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
2915 joinReqParam->maxTxPower ;
2916#else
Jeff Johnson295189b2012-06-20 16:38:30 -07002917 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
2918 joinReqParam->localPowerConstraint ;
2919#endif
2920 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
2921 joinReqParam->secondaryChannelOffset ;
2922 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
2923
2924 wdiJoinReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002925 /* Store Init Req pointer, as this will be used for response */
2926 /* store Params pass it to WDI */
2927 pWdaParams->pWdaContext = pWDA;
2928 pWdaParams->wdaMsgParam = joinReqParam;
2929 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002930 status = WDI_JoinReq(wdiJoinReqParam,
2931 (WDI_JoinRspCb )WDA_JoinReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002932 if(IS_WDI_STATUS_FAILURE(status))
2933 {
2934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2935 "Failure in Join WDI API, free all the memory " );
2936 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2937 vos_mem_free(pWdaParams) ;
2938 joinReqParam->status = eSIR_FAILURE ;
2939 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2940 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002941 return CONVERT_WDI2VOS_STATUS(status) ;
2942}
Jeff Johnson295189b2012-06-20 16:38:30 -07002943/*
2944 * FUNCTION: WDA_SwitchChannelReqCallback
2945 * send Switch channel RSP back to PE
2946 */
2947void WDA_SwitchChannelReqCallback(
2948 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
2949{
2950 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
2951 tWDA_CbContext *pWDA;
2952 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002954 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002955 if(NULL == pWdaParams)
2956 {
2957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002958 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002959 VOS_ASSERT(0) ;
2960 return ;
2961 }
2962 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2963 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
2964
2965#ifdef WLAN_FEATURE_VOWIFI
2966 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
2967#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002968 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2969 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002970 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002971 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002972 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002973 return ;
2974}
Jeff Johnson295189b2012-06-20 16:38:30 -07002975/*
2976 * FUNCTION: WDA_ProcessChannelSwitchReq
2977 * Request to WDI to switch channel REQ params.
2978 */
2979VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
2980 tSwitchChannelParams *pSwitchChanParams)
2981{
2982 WDI_Status status = WDI_STATUS_SUCCESS ;
2983 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
2984 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
2985 sizeof(WDI_SwitchChReqParamsType)) ;
2986 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002988 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002989 if(NULL == wdiSwitchChanParam)
2990 {
2991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002992 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002993 VOS_ASSERT(0);
2994 return VOS_STATUS_E_NOMEM;
2995 }
2996 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2997 if(NULL == pWdaParams)
2998 {
2999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003000 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003001 VOS_ASSERT(0);
3002 vos_mem_free(wdiSwitchChanParam);
3003 return VOS_STATUS_E_NOMEM;
3004 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003005 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
3006#ifndef WLAN_FEATURE_VOWIFI
3007 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3008 pSwitchChanParams->localPowerConstraint;
3009#endif
3010 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3011 pSwitchChanParams->secondaryChannelOffset;
3012 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003013 /* Store req pointer, as this will be used for response */
3014 /* store Params pass it to WDI */
3015 pWdaParams->pWdaContext = pWDA;
3016 pWdaParams->wdaMsgParam = pSwitchChanParams;
3017 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003018#ifdef WLAN_FEATURE_VOWIFI
3019 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
3020 = pSwitchChanParams->maxTxPower;
3021 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3022 pSwitchChanParams ->selfStaMacAddr,
3023 sizeof(tSirMacAddr));
3024#endif
3025 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3026 pSwitchChanParams->bssId,
3027 sizeof(tSirMacAddr));
3028
3029 status = WDI_SwitchChReq(wdiSwitchChanParam,
3030 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003031 if(IS_WDI_STATUS_FAILURE(status))
3032 {
3033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3034 "Failure in process channel switch Req WDI API, free all the memory " );
3035 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3036 vos_mem_free(pWdaParams) ;
3037 pSwitchChanParams->status = eSIR_FAILURE ;
3038 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
3039 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003040 return CONVERT_WDI2VOS_STATUS(status) ;
3041}
Jeff Johnson295189b2012-06-20 16:38:30 -07003042/*
3043 * FUNCTION: WDA_ConfigBssReqCallback
3044 * config BSS Req Callback, called by WDI
3045 */
3046void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
3047 ,void* pUserData)
3048{
3049 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3050 tWDA_CbContext *pWDA;
3051 tAddBssParams *configBssReqParam;
3052 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003054 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003055 if(NULL == pWdaParams)
3056 {
3057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003058 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003059 VOS_ASSERT(0) ;
3060 return ;
3061 }
3062 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3063 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
3064 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003065 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003066 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003067 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
3068 {
3069 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
3070 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003071 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
3072 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
3073 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
3074
3075 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
3076 {
3077 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
3078 {
3079 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
3080 staConfigBssParam->staType = STA_ENTRY_BSSID;
3081 }
3082 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
3083 (staConfigBssParam->staType == STA_ENTRY_SELF))
3084 {
3085 /* This is the 1st add BSS Req for the BTAMP STA */
3086 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3087 staConfigBssParam->staType = STA_ENTRY_BSSID;
3088 }
3089 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3090 (staConfigBssParam->staType == STA_ENTRY_PEER))
3091 {
3092 /* This is the 2nd ADD BSS Request that is sent
3093 * on the BTAMP STA side. The Sta type is
3094 * set to STA_ENTRY_PEER here.*/
3095 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3096 }
3097 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3098 (staConfigBssParam->staType == STA_ENTRY_SELF))
3099 {
3100 /* statype is already set by PE.
3101 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
3102 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
3103 staConfigBssParam->staType = STA_ENTRY_BSSID;
3104 }
3105 else
3106 {
3107 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
3108 staConfigBssParam->staType = STA_ENTRY_PEER;
3109 }
3110 }
3111 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
3112 {
3113 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
3114 staConfigBssParam->staType = STA_ENTRY_SELF;
3115 }
3116 else
3117 {
3118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3119 "Invalid operation mode specified");
3120 VOS_ASSERT(0);
3121 }
3122
3123 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003124 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003125 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003126 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003127 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
3128 sizeof(tSirMacAddr));
3129 staConfigBssParam->txChannelWidthSet =
3130 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07003131 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
3132 staConfigBssParam->htCapable)
3133 {
3134 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
3135 wdiConfigBssRsp->ucBSSIdx;
3136 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
3137 WDA_VALID_STA_INDEX ;
3138 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003139 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
3140 wdiConfigBssRsp->ucBSSIdx,
3141 wdiConfigBssRsp->ucSTAIdx))
3142 {
3143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003144 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003145 VOS_ASSERT(0) ;
3146 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003147 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
3148 {
3149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003150 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003151 VOS_ASSERT(0) ;
3152 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003153#ifdef WLAN_FEATURE_VOWIFI
3154 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
3155#endif
3156 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003157 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3158 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003159 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003160 return ;
3161}
Jeff Johnson295189b2012-06-20 16:38:30 -07003162/*
3163 * FUNCTION: WDA_UpdateEdcaParamsForAC
3164 * Update WDI EDCA params with PE edca params
3165 */
3166void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
3167 WDI_EdcaParamRecord *wdiEdcaParam,
3168 tSirMacEdcaParamRecord *macEdcaParam)
3169{
3170 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
3171 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
3172 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
3173 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
3174 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
3175 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
3176}
Jeff Johnson295189b2012-06-20 16:38:30 -07003177/*
3178 * FUNCTION: WDA_ProcessConfigBssReq
3179 * Configure BSS before starting Assoc with AP
3180 */
3181VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
3182 tAddBssParams* configBssReqParam)
3183{
3184 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303185 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003186 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003188 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303189 if (NULL == configBssReqParam)
3190 {
3191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3192 "%s: configBssReqParam is NULL", __func__);
3193 return VOS_STATUS_E_INVAL;
3194 }
3195
3196 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
3197 sizeof(WDI_ConfigBSSReqParamsType)) ;
3198
Jeff Johnson295189b2012-06-20 16:38:30 -07003199 if(NULL == wdiConfigBssReqParam)
3200 {
3201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003202 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003203 VOS_ASSERT(0);
3204 return VOS_STATUS_E_NOMEM;
3205 }
3206 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3207 if(NULL == pWdaParams)
3208 {
3209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003210 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003211 VOS_ASSERT(0);
3212 vos_mem_free(wdiConfigBssReqParam);
3213 return VOS_STATUS_E_NOMEM;
3214 }
Kiran4a17ebe2013-01-31 10:43:43 -08003215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3216 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07003217 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003218 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
3219 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003220 /* Store Init Req pointer, as this will be used for response */
3221 /* store Params pass it to WDI */
3222 pWdaParams->pWdaContext = pWDA;
3223 pWdaParams->wdaMsgParam = configBssReqParam;
3224 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003225 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
3226 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003227 if(IS_WDI_STATUS_FAILURE(status))
3228 {
3229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3230 "Failure in Config BSS WDI API, free all the memory " );
3231 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3232 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003233 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003234 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
3235 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003236 return CONVERT_WDI2VOS_STATUS(status) ;
3237}
Jeff Johnson295189b2012-06-20 16:38:30 -07003238#ifdef ENABLE_HAL_COMBINED_MESSAGES
3239/*
3240 * FUNCTION: WDA_PostAssocReqCallback
3241 * Post ASSOC req callback, send RSP back to PE
3242 */
3243void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
3244 void* pUserData)
3245{
3246 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3247 tPostAssocParams *postAssocReqParam =
3248 (tPostAssocParams *)pWDA->wdaMsgParam ;
3249 /*STA context within the BSS Params*/
3250 tAddStaParams *staPostAssocParam =
3251 &postAssocReqParam->addBssParams.staContext ;
3252 /*STA Params for self STA*/
3253 tAddStaParams *selfStaPostAssocParam =
3254 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003256 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003257 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003258 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003259 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
3260 {
3261 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
3262 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
3263 sizeof(tSirMacAddr)) ;
3264 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
3265 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
3266 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003267 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
3268 }
3269 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3270 pWDA->wdaWdiApiMsgParam = NULL;
3271 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003272 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003273 return ;
3274}
Jeff Johnson295189b2012-06-20 16:38:30 -07003275/*
3276 * FUNCTION: WDA_ProcessPostAssocReq
3277 * Trigger POST ASSOC processing in WDI
3278 */
3279VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
3280 tPostAssocParams *postAssocReqParam)
3281{
Jeff Johnson295189b2012-06-20 16:38:30 -07003282 WDI_Status status = WDI_STATUS_SUCCESS ;
3283
3284 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
3285 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
3286 sizeof(WDI_PostAssocReqParamsType)) ;
3287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003288 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003289
Jeff Johnson295189b2012-06-20 16:38:30 -07003290 if(NULL == wdiPostAssocReqParam)
3291 {
3292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003293 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003294 VOS_ASSERT(0);
3295 return VOS_STATUS_E_NOMEM;
3296 }
3297
3298 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
3299 {
3300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003301 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003302 VOS_ASSERT(0);
3303 return VOS_STATUS_E_FAILURE;
3304 }
3305
Jeff Johnson295189b2012-06-20 16:38:30 -07003306 /* update BSS params into WDI structure */
3307 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3308 &postAssocReqParam->addBssParams) ;
3309 /* update STA params into WDI structure */
3310 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3311 &postAssocReqParam->addStaParams) ;
3312
3313 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3314 postAssocReqParam->addBssParams.highPerformance;
3315 WDA_UpdateEdcaParamsForAC(pWDA,
3316 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3317 &postAssocReqParam->addBssParams.acbe);
3318 WDA_UpdateEdcaParamsForAC(pWDA,
3319 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3320 &postAssocReqParam->addBssParams.acbk);
3321 WDA_UpdateEdcaParamsForAC(pWDA,
3322 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3323 &postAssocReqParam->addBssParams.acvi);
3324 WDA_UpdateEdcaParamsForAC(pWDA,
3325 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3326 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003327 /* Store Init Req pointer, as this will be used for response */
3328 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003329 /* store Params pass it to WDI */
3330 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003331 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3332 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003333 if(IS_WDI_STATUS_FAILURE(status))
3334 {
3335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3336 "Failure in Post Assoc WDI API, free all the memory " );
3337 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3338 pWDA->wdaWdiApiMsgParam = NULL;
3339 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003340 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003341 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3342 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003343 return CONVERT_WDI2VOS_STATUS(status) ;
3344}
3345#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003346/*
3347 * FUNCTION: WDA_AddStaReqCallback
3348 * ADD STA req callback, send RSP back to PE
3349 */
3350void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3351 void* pUserData)
3352{
3353 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3354 tWDA_CbContext *pWDA;
3355 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003357 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003358 if(NULL == pWdaParams)
3359 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003361 VOS_ASSERT(0) ;
3362 return ;
3363 }
3364 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3365 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003366 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003367 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003368 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3369 {
3370 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3371 /*TODO: UMAC structure doesn't have these fields*/
3372 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3373 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3374 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3375 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3376 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3377 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003378#ifdef FEATURE_WLAN_TDLS
3379 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3380 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3381#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003382 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003383#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003384 {
3385 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3386 wdiConfigStaRsp->ucBssIdx;
3387 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3388 WDA_VALID_STA_INDEX ;
3389 }
3390 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3391 {
3392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003393 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003394 VOS_ASSERT(0) ;
3395 return ;
3396 }
3397 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003398 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3399 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003400 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003401 return ;
3402}
Jeff Johnson295189b2012-06-20 16:38:30 -07003403/*
3404 * FUNCTION: WDA_ConfigStaReq
3405 * Trigger Config STA processing in WDI
3406 */
3407VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3408 tAddStaParams *addStaReqParam)
3409{
Jeff Johnson295189b2012-06-20 16:38:30 -07003410 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003411 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3412 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3413 sizeof(WDI_ConfigSTAReqParamsType)) ;
3414 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003416 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003417 if(NULL == wdiConfigStaReqParam)
3418 {
3419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003420 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003421 VOS_ASSERT(0);
3422 return VOS_STATUS_E_NOMEM;
3423 }
3424 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3425 if(NULL == pWdaParams)
3426 {
3427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003428 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003429 VOS_ASSERT(0);
3430 vos_mem_free(wdiConfigStaReqParam);
3431 return VOS_STATUS_E_NOMEM;
3432 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003433 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003434 /* update STA params into WDI structure */
3435 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3436 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003437 /* Store Init Req pointer, as this will be used for response */
3438 /* store Params pass it to WDI */
3439 pWdaParams->pWdaContext = pWDA;
3440 pWdaParams->wdaMsgParam = addStaReqParam;
3441 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003442 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3443 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003444 if(IS_WDI_STATUS_FAILURE(status))
3445 {
3446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3447 "Failure in Config STA WDI API, free all the memory " );
3448 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3449 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003450 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003451 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3452 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003453 return CONVERT_WDI2VOS_STATUS(status) ;
3454}
Jeff Johnson295189b2012-06-20 16:38:30 -07003455/*
3456 * FUNCTION: WDA_DelBSSReqCallback
3457 * Dens DEL BSS RSP back to PE
3458 */
3459void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3460 void* pUserData)
3461{
3462 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3463 tWDA_CbContext *pWDA;
3464 tDeleteBssParams *delBssReqParam;
3465 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003467 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003468 if(NULL == pWdaParams)
3469 {
3470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003471 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003472 VOS_ASSERT(0) ;
3473 return ;
3474 }
3475 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3476 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003477 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003478 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3479 {
3480 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3481 sizeof(tSirMacAddr)) ;
3482 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003483 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3484 {
3485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003486 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003487 VOS_ASSERT(0) ;
3488 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003489 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3490 {
3491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003492 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003493 VOS_ASSERT(0) ;
3494 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003495 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3496 {
3497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003498 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003499 VOS_ASSERT(0) ;
3500 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003501 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3502 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003503 /* reset the the system role*/
3504 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3505
3506 /* Reset the BA related information */
3507 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3508 {
3509 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3510 {
3511 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3512 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
3513 /* Reset framesTxed counters here */
3514 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3515 {
3516 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3517 }
3518 }
3519 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003520 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003521 return ;
3522}
3523
Jeff Johnson295189b2012-06-20 16:38:30 -07003524/*
3525 * FUNCTION: WDA_ProcessDelBssReq
3526 * Init DEL BSS req with WDI
3527 */
3528VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3529 tDeleteBssParams *delBssParam)
3530{
3531 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003532 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3533 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3534 sizeof(WDI_DelBSSReqParamsType)) ;
3535 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003537 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003538 if(NULL == wdiDelBssReqParam)
3539 {
3540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003541 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003542 VOS_ASSERT(0);
3543 return VOS_STATUS_E_NOMEM;
3544 }
3545 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3546 if(NULL == pWdaParams)
3547 {
3548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003549 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003550 VOS_ASSERT(0);
3551 vos_mem_free(wdiDelBssReqParam);
3552 return VOS_STATUS_E_NOMEM;
3553 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003554 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
3555 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
3556
3557 /* Store Init Req pointer, as this will be used for response */
3558 /* store Params pass it to WDI */
3559 pWdaParams->pWdaContext = pWDA;
3560 pWdaParams->wdaMsgParam = delBssParam;
3561 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003562 status = WDI_DelBSSReq(wdiDelBssReqParam,
3563 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003564 if(IS_WDI_STATUS_FAILURE(status))
3565 {
3566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3567 "Failure in Del BSS WDI API, free all the memory " );
3568 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3569 vos_mem_free(pWdaParams) ;
3570 delBssParam->status = eSIR_FAILURE ;
3571 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
3572 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003573 return CONVERT_WDI2VOS_STATUS(status) ;
3574}
Jeff Johnson295189b2012-06-20 16:38:30 -07003575/*
3576 * FUNCTION: WDA_DelSTAReqCallback
3577 * Dens DEL STA RSP back to PE
3578 */
3579void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
3580 void* pUserData)
3581{
3582 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3583 tWDA_CbContext *pWDA;
3584 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003586 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003587 if(NULL == pWdaParams)
3588 {
3589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003590 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003591 VOS_ASSERT(0) ;
3592 return ;
3593 }
3594 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3595 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003596 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003597 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
3598 {
3599 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
3600 {
3601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003602 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003603 VOS_ASSERT(0) ;
3604 }
3605 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
3606 }
3607 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3608 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003609 /*Reset the BA information corresponding to this STAIdx */
3610 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
3611 WDA_INVALID_STA_INDEX;
3612 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
3613
3614 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003615 return ;
3616}
Jeff Johnson295189b2012-06-20 16:38:30 -07003617/*
3618 * FUNCTION: WDA_ProcessDelStaReq
3619 * Init DEL STA req with WDI
3620 */
3621VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
3622 tDeleteStaParams *delStaParam)
3623{
3624 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003625 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
3626 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
3627 sizeof(WDI_DelSTAReqParamsType)) ;
3628 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003630 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003631 if(NULL == wdiDelStaReqParam)
3632 {
3633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003634 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003635 VOS_ASSERT(0);
3636 return VOS_STATUS_E_NOMEM;
3637 }
3638 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3639 if(NULL == pWdaParams)
3640 {
3641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003642 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003643 VOS_ASSERT(0);
3644 vos_mem_free(wdiDelStaReqParam);
3645 return VOS_STATUS_E_NOMEM;
3646 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003647 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
3648 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003649 /* Store Init Req pointer, as this will be used for response */
3650 /* store Params pass it to WDI */
3651 pWdaParams->pWdaContext = pWDA;
3652 pWdaParams->wdaMsgParam = delStaParam;
3653 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003654 status = WDI_DelSTAReq(wdiDelStaReqParam,
3655 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003656 if(IS_WDI_STATUS_FAILURE(status))
3657 {
3658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3659 "Failure in Del STA WDI API, free all the memory status = %d",
3660 status );
3661 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3662 vos_mem_free(pWdaParams) ;
3663 delStaParam->status = eSIR_FAILURE ;
3664 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
3665 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003666 return CONVERT_WDI2VOS_STATUS(status) ;
3667}
Jeff Johnson295189b2012-06-20 16:38:30 -07003668void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
3669{
3670 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3671 tWDA_CbContext *pWDA;
3672 tAddStaSelfParams *pAddStaSelfRsp = NULL;
3673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003674 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003675 if(NULL == pWdaParams)
3676 {
3677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003678 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003679 VOS_ASSERT(0) ;
3680 return ;
3681 }
3682 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3683 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003684 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3685 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003686 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
3687 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
3688 pwdiAddSTASelfRsp->macSelfSta,
3689 sizeof(pAddStaSelfRsp->selfMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003690 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003691 return ;
3692}
Jeff Johnson295189b2012-06-20 16:38:30 -07003693/*
3694 * FUNCTION: WDA_ProcessAddStaSelfReq
3695 *
3696 */
3697VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
3698{
3699 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003700 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003701 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
3702 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
3703 sizeof(WDI_AddSTASelfReqParamsType)) ;
3704 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003706 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003707 if( NULL == wdiAddStaSelfReq )
3708 {
3709 VOS_ASSERT( 0 );
3710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003711 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003712 return( VOS_STATUS_E_NOMEM );
3713 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003714 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003715 if( NULL == pWdaParams )
3716 {
3717 VOS_ASSERT( 0 );
3718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003719 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003720 vos_mem_free(wdiAddStaSelfReq) ;
3721 return( VOS_STATUS_E_NOMEM );
3722 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003723 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003724 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07003725 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07003726 /* Store Init Req pointer, as this will be used for response */
3727 /* store Params pass it to WDI */
3728 pWdaParams->pWdaContext = pWDA;
3729 pWdaParams->wdaMsgParam = pAddStaSelfReq;
3730 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07003731 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003732
Jeff Johnson43971f52012-07-17 12:26:56 -07003733 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003734 {
3735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3736 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07003737 wstatus );
3738 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003739 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3740 vos_mem_free(pWdaParams) ;
3741 pAddStaSelfReq->status = eSIR_FAILURE ;
3742 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
3743 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003744 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003745}
Jeff Johnson295189b2012-06-20 16:38:30 -07003746/*
3747 * FUNCTION: WDA_DelSTASelfRespCallback
3748 *
3749 */
3750void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
3751 wdiDelStaSelfRspParams , void* pUserData)
3752{
3753 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3754 tWDA_CbContext *pWDA;
3755 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003757 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003758 if (NULL == pWdaParams)
3759 {
3760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003761 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003762 VOS_ASSERT(0);
3763 return;
3764 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003765 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3766 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003767 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003768 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003769
3770 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3771 vos_mem_free(pWdaParams) ;
3772
3773 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003774 return ;
3775}
Jeff Johnson295189b2012-06-20 16:38:30 -07003776/*
3777 * FUNCTION: WDA_DelSTASelfReqCallback
3778 *
3779 */
3780void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
3781 void* pUserData)
3782{
3783 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3784 tWDA_CbContext *pWDA;
3785 tDelStaSelfParams *delStaSelfParams;
3786
3787 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05303788 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003789 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003790
3791 if (NULL == pWdaParams)
3792 {
3793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003794 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003795 VOS_ASSERT(0);
3796 return;
3797 }
3798
3799 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3800 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
3801
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003802 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003803
3804 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3805 {
3806 VOS_ASSERT(0);
3807 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3808 vos_mem_free(pWdaParams) ;
3809 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
3810 }
3811
3812 return ;
3813}
3814
3815/*
3816 * FUNCTION: WDA_DelSTASelfReq
3817 * Trigger Config STA processing in WDI
3818 */
3819VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
3820 tDelStaSelfParams* pDelStaSelfReqParam)
3821{
3822 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003823 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003824 tWDA_ReqParams *pWdaParams = NULL;
3825 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
3826 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
3827 sizeof(WDI_DelSTASelfReqParamsType)) ;
3828
Jeff Johnson295189b2012-06-20 16:38:30 -07003829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003830 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003831 if( NULL == wdiDelStaSelfReq )
3832 {
3833 VOS_ASSERT( 0 );
3834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003835 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003836 return( VOS_STATUS_E_NOMEM );
3837 }
3838
3839 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3840 if( NULL == pWdaParams )
3841 {
3842 VOS_ASSERT( 0 );
3843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003844 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003845 vos_mem_free(wdiDelStaSelfReq) ;
3846 return( VOS_STATUS_E_NOMEM );
3847 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003848 pWdaParams->pWdaContext = pWDA;
3849 /* Store param pointer as passed in by caller */
3850 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
3851 /* store Params pass it to WDI */
3852 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07003853 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
3854 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
3855
3856 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
3857 wdiDelStaSelfReq->pUserData = pWdaParams;
3858
Jeff Johnson43971f52012-07-17 12:26:56 -07003859 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07003860 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
3861
Jeff Johnson43971f52012-07-17 12:26:56 -07003862 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003863 {
3864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3865 "Failure in Del Sta Self REQ WDI API, free all the memory " );
3866 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07003867 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003868 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3869 vos_mem_free(pWdaParams) ;
3870 pDelStaSelfReqParam->status = eSIR_FAILURE ;
3871 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
3872 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003873 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003874}
3875
Jeff Johnson295189b2012-06-20 16:38:30 -07003876/*
3877 * FUNCTION: WDA_SendMsg
3878 * Send Message back to PE
3879 */
3880void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
3881 void *pBodyptr, tANI_U32 bodyVal)
3882{
3883 tSirMsgQ msg = {0} ;
3884 tANI_U32 status = VOS_STATUS_SUCCESS ;
3885 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07003886 msg.type = msgType;
3887 msg.bodyval = bodyVal;
3888 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07003889 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07003890 if (VOS_STATUS_SUCCESS != status)
3891 {
3892 if(NULL != pBodyptr)
3893 {
3894 vos_mem_free(pBodyptr);
3895 }
3896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003897 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003898 VOS_ASSERT(0) ;
3899 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003900 return ;
3901}
Jeff Johnson295189b2012-06-20 16:38:30 -07003902/*
3903 * FUNCTION: WDA_UpdateBSSParams
3904 * Translated WDA/PE BSS info into WDI BSS info..
3905 */
3906void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
3907 WDI_ConfigBSSReqInfoType *wdiBssParams,
3908 tAddBssParams *wdaBssParams)
3909{
3910 v_U8_t keyIndex = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003911 /* copy bssReq Params to WDI structure */
3912 vos_mem_copy(wdiBssParams->macBSSID,
3913 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
3914 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
3915 sizeof(tSirMacAddr)) ;
3916 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
3917 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
3918 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003919 wdiBssParams->ucShortSlotTimeSupported =
3920 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003921 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
3922 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
3923 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
3924 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
3925 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
3926
3927 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
3928 wdiBssParams->ucTXOPProtectionFullSupport =
3929 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003930 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
3931 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003932 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003933 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
3934 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
3935 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
3936 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
3937
Chet Lanctot186b5732013-03-18 10:26:30 -07003938 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
3939
Jeff Johnson295189b2012-06-20 16:38:30 -07003940 /* copy SSID into WDI structure */
3941 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
3942 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
3943 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003944 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
3945 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003946 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07003947#ifdef WLAN_FEATURE_VOWIFI
3948 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
3949#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003950 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07003951 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07003952#ifdef WLAN_FEATURE_VOWIFI_11R
3953 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003954 if(wdiBssParams->bExtSetStaKeyParamValid)
3955 {
3956 /* copy set STA key params to WDI structure */
3957 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
3958 wdaBssParams->extSetStaKeyParam.staIdx;
3959 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
3960 wdaBssParams->extSetStaKeyParam.encType;
3961 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
3962 wdaBssParams->extSetStaKeyParam.wepType;
3963 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
3964 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003965 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
3966 {
Jeff Johnson43971f52012-07-17 12:26:56 -07003967 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07003968 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
3969 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
3970 {
3971 WDA_GetWepKeysFromCfg( pWDA,
3972 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
3973 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
3974 wdiBssParams->wdiExtSetKeyParam.wdiKey );
3975 }
3976 else
3977 {
Jeff Johnson295189b2012-06-20 16:38:30 -07003978 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
3979 keyIndex++)
3980 {
3981 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
3982 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
3983 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
3984 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
3985 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
3986 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07003987 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
3988 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
3989 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
3990 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
3991 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
3992 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
3993 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
3994 wdaBssParams->extSetStaKeyParam.key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
3995 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003996 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
3997 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07003998 }
3999 }
4000 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
4001 }
4002 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
4003 {
4004 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
4005 sizeof(wdaBssParams->extSetStaKeyParam) );
4006 }
4007#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07004008#ifdef WLAN_FEATURE_11AC
4009 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
4010 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
4011#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004012
4013 return ;
4014}
Jeff Johnson295189b2012-06-20 16:38:30 -07004015/*
4016 * FUNCTION: WDA_UpdateSTAParams
4017 * Translated WDA/PE BSS info into WDI BSS info..
4018 */
4019void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
4020 WDI_ConfigStaReqInfoType *wdiStaParams,
4021 tAddStaParams *wdaStaParams)
4022{
4023 tANI_U8 i = 0;
4024 /* Update STA params */
4025 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
4026 sizeof(tSirMacAddr)) ;
4027 wdiStaParams->usAssocId = wdaStaParams->assocId;
4028 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07004029 wdiStaParams->staIdx = wdaStaParams->staIdx;
4030
Jeff Johnson295189b2012-06-20 16:38:30 -07004031 wdiStaParams->ucShortPreambleSupported =
4032 wdaStaParams->shortPreambleSupported;
4033 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
4034 sizeof(tSirMacAddr)) ;
4035 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
4036
4037 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
4038
4039 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
4040 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
4041 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
4042 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
4043 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
4044 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
4045 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
4046
4047 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
4048 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07004049 wdiStaParams->wdiSupportedRates.opRateMode =
4050 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004051 for(i = 0;i < WDI_NUM_11B_RATES;i++)
4052 {
4053 wdiStaParams->wdiSupportedRates.llbRates[i] =
4054 wdaStaParams->supportedRates.llbRates[i];
4055 }
4056 for(i = 0;i < WDI_NUM_11A_RATES;i++)
4057 {
4058 wdiStaParams->wdiSupportedRates.llaRates[i] =
4059 wdaStaParams->supportedRates.llaRates[i];
4060 }
4061 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
4062 {
4063 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
4064 wdaStaParams->supportedRates.aniLegacyRates[i];
4065 }
4066 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
4067 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07004068#ifdef WLAN_FEATURE_11AC
4069 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
4070 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
4071 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
4072 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
4073#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004074 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
4075 {
4076 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
4077 wdaStaParams->supportedRates.supportedMCSSet[i];
4078 }
4079 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
4080 wdaStaParams->supportedRates.rxHighestDataRate;
4081
4082 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
4083
4084 wdiStaParams->wdiAction = wdaStaParams->updateSta;
4085
4086 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
4087 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
4088 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
4089
4090 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
4091 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
4092 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
4093 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07004094 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07004095#ifdef WLAN_FEATURE_11AC
4096 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
4097 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08004098 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07004099#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08004100 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
4101 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07004102 return ;
4103}
Jeff Johnson295189b2012-06-20 16:38:30 -07004104/*
4105 * -------------------------------------------------------------------------
4106 * CFG update to WDI
4107 * -------------------------------------------------------------------------
4108 */
4109
4110 /*
4111 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
4112 * Convert the WNI CFG ID to HAL CFG ID
4113 */
Jeff Johnsone7245742012-09-05 17:12:55 -07004114static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07004115{
4116 switch(wniCfgId)
4117 {
4118 case WNI_CFG_STA_ID:
4119 return QWLAN_HAL_CFG_STA_ID;
4120 case WNI_CFG_CURRENT_TX_ANTENNA:
4121 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
4122 case WNI_CFG_CURRENT_RX_ANTENNA:
4123 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
4124 case WNI_CFG_LOW_GAIN_OVERRIDE:
4125 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
4126 case WNI_CFG_POWER_STATE_PER_CHAIN:
4127 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
4128 case WNI_CFG_CAL_PERIOD:
4129 return QWLAN_HAL_CFG_CAL_PERIOD;
4130 case WNI_CFG_CAL_CONTROL:
4131 return QWLAN_HAL_CFG_CAL_CONTROL;
4132 case WNI_CFG_PROXIMITY:
4133 return QWLAN_HAL_CFG_PROXIMITY;
4134 case WNI_CFG_NETWORK_DENSITY:
4135 return QWLAN_HAL_CFG_NETWORK_DENSITY;
4136 case WNI_CFG_MAX_MEDIUM_TIME:
4137 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
4138 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
4139 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
4140 case WNI_CFG_RTS_THRESHOLD:
4141 return QWLAN_HAL_CFG_RTS_THRESHOLD;
4142 case WNI_CFG_SHORT_RETRY_LIMIT:
4143 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
4144 case WNI_CFG_LONG_RETRY_LIMIT:
4145 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
4146 case WNI_CFG_FRAGMENTATION_THRESHOLD:
4147 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
4148 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
4149 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
4150 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
4151 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
4152 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
4153 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
4154 case WNI_CFG_FIXED_RATE:
4155 return QWLAN_HAL_CFG_FIXED_RATE;
4156 case WNI_CFG_RETRYRATE_POLICY:
4157 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
4158 case WNI_CFG_RETRYRATE_SECONDARY:
4159 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
4160 case WNI_CFG_RETRYRATE_TERTIARY:
4161 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
4162 case WNI_CFG_FORCE_POLICY_PROTECTION:
4163 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
4164 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
4165 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
4166 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
4167 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
4168 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
4169 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
4170 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
4171 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
4172 case WNI_CFG_MAX_BA_SESSIONS:
4173 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
4174 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
4175 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
4176 case WNI_CFG_PS_ENABLE_BCN_FILTER:
4177 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
4178 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
4179 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
4180 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
4181 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
4182 case WNI_CFG_STATS_PERIOD:
4183 return QWLAN_HAL_CFG_STATS_PERIOD;
4184 case WNI_CFG_CFP_MAX_DURATION:
4185 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
4186#if 0 /*This is not part of CFG*/
4187 case WNI_CFG_FRAME_TRANS_ENABLED:
4188 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
4189#endif
4190 case WNI_CFG_DTIM_PERIOD:
4191 return QWLAN_HAL_CFG_DTIM_PERIOD;
4192 case WNI_CFG_EDCA_WME_ACBK:
4193 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
4194 case WNI_CFG_EDCA_WME_ACBE:
4195 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
4196 case WNI_CFG_EDCA_WME_ACVI:
4197 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
4198 case WNI_CFG_EDCA_WME_ACVO:
4199 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
4200#if 0
4201 case WNI_CFG_TELE_BCN_WAKEUP_EN:
4202 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
4203 case WNI_CFG_TELE_BCN_TRANS_LI:
4204 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
4205 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
4206 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
4207 case WNI_CFG_TELE_BCN_MAX_LI:
4208 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
4209 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
4210 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
4211#endif
4212 case WNI_CFG_ENABLE_CLOSE_LOOP:
4213 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08004214 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
4215 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
Jeff Johnson295189b2012-06-20 16:38:30 -07004216 default:
4217 {
4218 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004219 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07004220 wniCfgId);
4221 return VOS_STATUS_E_INVAL;
4222 }
4223 }
4224}
Jeff Johnson295189b2012-06-20 16:38:30 -07004225/*
4226 * FUNCTION: WDA_UpdateCfgCallback
4227 *
4228 */
4229void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
4230{
4231 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4232 WDI_UpdateCfgReqParamsType *wdiCfgParam =
4233 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004235 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004236 /*
4237 * currently there is no response message is expected between PE and
4238 * WDA, Failure return from WDI is a ASSERT condition
4239 */
4240 if(WDI_STATUS_SUCCESS != wdiStatus)
4241 {
4242 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004243 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07004244 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
4245 }
4246
4247 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
4248 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4249 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004250 return ;
4251}
Jeff Johnson295189b2012-06-20 16:38:30 -07004252/*
4253 * FUNCTION: WDA_UpdateCfg
4254 *
4255 */
4256VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
4257{
4258
4259 WDI_Status status = WDI_STATUS_SUCCESS ;
4260 tANI_U32 val =0;
4261 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
4262 tHalCfg *configData;
4263 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
4264 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07004265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004266 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004267 if (NULL == pMac )
4268 {
4269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004270 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004271 return VOS_STATUS_E_FAILURE;
4272 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004273 if(WDA_START_STATE != pWDA->wdaState)
4274 {
4275 return VOS_STATUS_E_FAILURE;
4276 }
4277
4278 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
4279 {
4280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004281 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004282 VOS_ASSERT(0);
4283 return VOS_STATUS_E_FAILURE;
4284 }
4285
4286 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
4287 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004288 if(NULL == wdiCfgReqParam)
4289 {
4290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004291 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004292 VOS_ASSERT(0);
4293 return VOS_STATUS_E_NOMEM;
4294 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004295 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
4296 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004297 if(NULL == wdiCfgReqParam->pConfigBuffer)
4298 {
4299 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004300 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004301 vos_mem_free(wdiCfgReqParam);
4302 VOS_ASSERT(0);
4303 return VOS_STATUS_E_NOMEM;
4304 }
4305
4306 /*convert the WNI CFG Id to HAL CFG Id*/
4307 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4308 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4309
4310 /*TODO: revisit this for handling string parameters */
4311 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4312 &val) != eSIR_SUCCESS)
4313 {
4314 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004315 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07004316 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4317 vos_mem_free(wdiCfgReqParam);
4318 return eSIR_FAILURE;
4319 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004320 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4321 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4322 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4323 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4324 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4325
4326 /* store Params pass it to WDI */
4327 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004328#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4329 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4330 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004331 if(IS_WDI_STATUS_FAILURE(status))
4332 {
4333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4334 "Failure in Update CFG WDI API, free all the memory " );
4335 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4336 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4337 pWDA->wdaWdiCfgApiMsgParam = NULL;
4338 /* Failure is not expected */
4339 VOS_ASSERT(0) ;
4340 }
4341#else
4342 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4343 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4344 pWDA->wdaWdiCfgApiMsgParam = NULL;
4345#endif
4346 return CONVERT_WDI2VOS_STATUS(status) ;
4347}
4348
Jeff Johnson295189b2012-06-20 16:38:30 -07004349VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4350 v_U8_t *pDefaultKeyId,
4351 v_U8_t *pNumKeys,
4352 WDI_KeysType *pWdiKeys )
4353{
4354 v_U32_t i, j, defKeyId = 0;
4355 v_U32_t val = SIR_MAC_KEY_LENGTH;
4356 VOS_STATUS status = WDI_STATUS_SUCCESS;
4357 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004358 if (NULL == pMac )
4359 {
4360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004361 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004362 return VOS_STATUS_E_FAILURE;
4363 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004364 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4365 &defKeyId ))
4366 {
4367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4368 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4369 }
4370
4371 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004372 /* Need to extract ALL of the configured WEP Keys */
4373 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4374 {
4375 val = SIR_MAC_KEY_LENGTH;
4376 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4377 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4378 pWdiKeys[j].key,
4379 &val ))
4380 {
4381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004382 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07004383 }
4384 else
4385 {
4386 pWdiKeys[j].keyId = (tANI_U8) i;
4387 /*
4388 * Actually, a DC (Don't Care) because
4389 * this is determined (and set) by PE/MLME
4390 */
4391 pWdiKeys[j].unicast = 0;
4392 /*
4393 * Another DC (Don't Care)
4394 */
4395 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4396 /* Another DC (Don't Care). Unused for WEP */
4397 pWdiKeys[j].paeRole = 0;
4398 /* Determined from wlan_cfgGetStr() above.*/
4399 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004400 j++;
4401 *pNumKeys = (tANI_U8) j;
4402 }
4403 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004404 return status;
4405}
Jeff Johnson295189b2012-06-20 16:38:30 -07004406/*
4407 * FUNCTION: WDA_SetBssKeyReqCallback
4408 * send SET BSS key RSP back to PE
4409 */
4410void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4411{
4412 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4413 tWDA_CbContext *pWDA;
4414 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004416 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004417 if(NULL == pWdaParams)
4418 {
4419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004420 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004421 VOS_ASSERT(0) ;
4422 return ;
4423 }
4424 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4425 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004426 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4427 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004428 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004429 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004430 return ;
4431}
Jeff Johnson295189b2012-06-20 16:38:30 -07004432/*
4433 * FUNCTION: WDA_ProcessSetBssKeyReq
4434 * Request to WDI for programming the BSS key( key for
4435 * broadcast/multicast frames Encryption)
4436 */
4437VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4438 tSetBssKeyParams *setBssKeyParams )
4439{
4440 WDI_Status status = WDI_STATUS_SUCCESS ;
4441 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4442 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4443 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4444 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004445 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004447 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004448 if(NULL == wdiSetBssKeyParam)
4449 {
4450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004451 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004452 VOS_ASSERT(0);
4453 return VOS_STATUS_E_NOMEM;
4454 }
4455 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4456 if(NULL == pWdaParams)
4457 {
4458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004459 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004460 VOS_ASSERT(0);
4461 vos_mem_free(wdiSetBssKeyParam);
4462 return VOS_STATUS_E_NOMEM;
4463 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004464 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004465 /* copy set BSS params to WDI structure */
4466 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4467 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4468 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004469 if(setBssKeyParams->encType != eSIR_ED_NONE)
4470 {
4471 if( setBssKeyParams->numKeys == 0 &&
4472 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4473 setBssKeyParams->encType == eSIR_ED_WEP104))
4474 {
4475 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004476 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4477 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4478 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4479 }
4480 else
4481 {
4482 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4483 {
4484 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4485 setBssKeyParams->key[keyIndex].keyId;
4486 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
4487 setBssKeyParams->key[keyIndex].unicast;
4488 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
4489 setBssKeyParams->key[keyIndex].keyDirection;
4490 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
4491 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4492 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
4493 setBssKeyParams->key[keyIndex].paeRole;
4494 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
4495 setBssKeyParams->key[keyIndex].keyLength;
4496 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
4497 setBssKeyParams->key[keyIndex].key,
4498 SIR_MAC_MAX_KEY_LENGTH);
4499 }
4500 }
4501 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004502 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
4503 setBssKeyParams->singleTidRc;
4504 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004505 /* Store set key pointer, as this will be used for response */
4506 /* store Params pass it to WDI */
4507 pWdaParams->pWdaContext = pWDA;
4508 pWdaParams->wdaMsgParam = setBssKeyParams;
4509 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004510 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
4511 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
4512
4513 if(IS_WDI_STATUS_FAILURE(status))
4514 {
4515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4516 "Failure in Set BSS Key Req WDI API, free all the memory " );
4517 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4518 vos_mem_free(pWdaParams) ;
4519 setBssKeyParams->status = eSIR_FAILURE ;
4520 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
4521 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004522 return CONVERT_WDI2VOS_STATUS(status) ;
4523}
Jeff Johnson295189b2012-06-20 16:38:30 -07004524/*
4525 * FUNCTION: WDA_RemoveBssKeyReqCallback
4526 * send SET BSS key RSP back to PE
4527 */
4528void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
4529{
4530 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4531 tWDA_CbContext *pWDA;
4532 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004534 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004535 if(NULL == pWdaParams)
4536 {
4537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004538 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004539 VOS_ASSERT(0) ;
4540 return ;
4541 }
4542 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4543 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004544 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4545 vos_mem_free(pWdaParams) ;
4546
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004547 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004548 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004549 return ;
4550}
Jeff Johnson295189b2012-06-20 16:38:30 -07004551/*
4552 * FUNCTION: WDA_ProcessRemoveBssKeyReq
4553 * Request to WDI to remove the BSS key( key for broadcast/multicast
4554 * frames Encryption)
4555 */
4556VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
4557 tRemoveBssKeyParams *removeBssKeyParams )
4558{
4559 WDI_Status status = WDI_STATUS_SUCCESS ;
4560 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
4561 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
4562 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
4563 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004565 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004566 if(NULL == wdiRemoveBssKeyParam)
4567 {
4568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004569 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004570 VOS_ASSERT(0);
4571 return VOS_STATUS_E_NOMEM;
4572 }
4573 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4574 if(NULL == pWdaParams)
4575 {
4576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004577 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004578 VOS_ASSERT(0);
4579 vos_mem_free(wdiRemoveBssKeyParam);
4580 return VOS_STATUS_E_NOMEM;
4581 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004582 /* copy Remove BSS key params to WDI structure*/
4583 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
4584 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
4585 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
4586 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
4587 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004588 /* Store remove key pointer, as this will be used for response */
4589 /* store Params pass it to WDI */
4590 pWdaParams->pWdaContext = pWDA;
4591 pWdaParams->wdaMsgParam = removeBssKeyParams;
4592 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004593 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
4594 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004595 if(IS_WDI_STATUS_FAILURE(status))
4596 {
4597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4598 "Failure in Remove BSS Key Req WDI API, free all the memory " );
4599 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4600 vos_mem_free(pWdaParams) ;
4601 removeBssKeyParams->status = eSIR_FAILURE ;
4602 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
4603 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004604 return CONVERT_WDI2VOS_STATUS(status) ;
4605}
Jeff Johnson295189b2012-06-20 16:38:30 -07004606/*
4607 * FUNCTION: WDA_SetBssKeyReqCallback
4608 * send SET BSS key RSP back to PE
4609 */
4610void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
4611{
4612 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4613 tWDA_CbContext *pWDA;
4614 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004616 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004617 if(NULL == pWdaParams)
4618 {
4619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004620 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004621 VOS_ASSERT(0) ;
4622 return ;
4623 }
4624 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4625 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004626 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4627 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004628 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004629 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004630 return ;
4631}
Jeff Johnson295189b2012-06-20 16:38:30 -07004632/*
4633 * FUNCTION: WDA_ProcessSetStaKeyReq
4634 * Request to WDI for programming the STA key( key for Unicast frames
4635 * Encryption)
4636 */
4637VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
4638 tSetStaKeyParams *setStaKeyParams )
4639{
4640 WDI_Status status = WDI_STATUS_SUCCESS ;
4641 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4642 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4643 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4644 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004645 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004647 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004648 if(NULL == wdiSetStaKeyParam)
4649 {
4650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004651 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004652 VOS_ASSERT(0);
4653 return VOS_STATUS_E_NOMEM;
4654 }
4655 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4656 if(NULL == pWdaParams)
4657 {
4658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004659 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004660 VOS_ASSERT(0);
4661 vos_mem_free(wdiSetStaKeyParam);
4662 return VOS_STATUS_E_NOMEM;
4663 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004664 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004665 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004666 /* copy set STA key params to WDI structure */
4667 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4668 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4669 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4670 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004671 if(setStaKeyParams->encType != eSIR_ED_NONE)
4672 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004673 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004674 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
4675 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4676 {
4677 WDA_GetWepKeysFromCfg( pWDA,
4678 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
4679 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
4680 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
4681 }
4682 else
4683 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004684 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4685 keyIndex++)
4686 {
4687 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4688 setStaKeyParams->key[keyIndex].keyId;
4689 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4690 setStaKeyParams->key[keyIndex].unicast;
4691 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4692 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004693 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4694 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4695 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4696 setStaKeyParams->key[keyIndex].paeRole;
4697 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4698 setStaKeyParams->key[keyIndex].keyLength;
4699 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4700 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4701 /* set default index to index which have key direction as WDI_TX_DEFAULT */
4702 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
4703 {
4704 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
4705 }
4706 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004707 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4708 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004709 }
4710 }
4711 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
4712 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004713 /* Store set key pointer, as this will be used for response */
4714 /* store Params pass it to WDI */
4715 pWdaParams->pWdaContext = pWDA;
4716 pWdaParams->wdaMsgParam = setStaKeyParams;
4717 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004718 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
4719 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004720 if(IS_WDI_STATUS_FAILURE(status))
4721 {
4722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4723 "Failure in set STA Key Req WDI API, free all the memory " );
4724 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4725 vos_mem_free(pWdaParams) ;
4726 setStaKeyParams->status = eSIR_FAILURE ;
4727 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
4728 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004729 return CONVERT_WDI2VOS_STATUS(status) ;
4730}
Jeff Johnson295189b2012-06-20 16:38:30 -07004731/*
4732 * FUNCTION: WDA_SetBcastStaKeyReqCallback
4733 * send SET Bcast STA key RSP back to PE
4734 */
4735void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
4736{
4737 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4738 tWDA_CbContext *pWDA;
4739 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004741 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004742 if(NULL == pWdaParams)
4743 {
4744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004745 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004746 VOS_ASSERT(0) ;
4747 return ;
4748 }
4749 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4750 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004751 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4752 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004753 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004754 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004755 return ;
4756}
4757
Jeff Johnson295189b2012-06-20 16:38:30 -07004758/*
4759 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
4760 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
4761 * Encryption)
4762 */
4763VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
4764 tSetStaKeyParams *setStaKeyParams )
4765{
4766 WDI_Status status = WDI_STATUS_SUCCESS ;
4767 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4768 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4769 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4770 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004771 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004773 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004774 if(NULL == wdiSetStaKeyParam)
4775 {
4776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004777 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004778 VOS_ASSERT(0);
4779 return VOS_STATUS_E_NOMEM;
4780 }
4781 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4782 if(NULL == pWdaParams)
4783 {
4784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004785 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004786 VOS_ASSERT(0);
4787 vos_mem_free(wdiSetStaKeyParam);
4788 return VOS_STATUS_E_NOMEM;
4789 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004790 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004791 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004792 /* copy set STA key params to WDI structure */
4793 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4794 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4795 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4796 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004797 if(setStaKeyParams->encType != eSIR_ED_NONE)
4798 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004799 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4800 keyIndex++)
4801 {
4802 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4803 setStaKeyParams->key[keyIndex].keyId;
4804 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4805 setStaKeyParams->key[keyIndex].unicast;
4806 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4807 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004808 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4809 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4810 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4811 setStaKeyParams->key[keyIndex].paeRole;
4812 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4813 setStaKeyParams->key[keyIndex].keyLength;
4814 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4815 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4816 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004817 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4818 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004819 }
4820 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07004821 /* Store set key pointer, as this will be used for response */
4822 /* store Params pass it to WDI */
4823 pWdaParams->pWdaContext = pWDA;
4824 pWdaParams->wdaMsgParam = setStaKeyParams;
4825 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004826 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
4827 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004828 if(IS_WDI_STATUS_FAILURE(status))
4829 {
4830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4831 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
4832 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4833 vos_mem_free(pWdaParams) ;
4834 setStaKeyParams->status = eSIR_FAILURE ;
4835 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
4836 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004837 return CONVERT_WDI2VOS_STATUS(status) ;
4838}
Jeff Johnson295189b2012-06-20 16:38:30 -07004839/*
4840 * FUNCTION: WDA_RemoveStaKeyReqCallback
4841 * send SET BSS key RSP back to PE
4842 */
4843void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
4844{
4845 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4846 tWDA_CbContext *pWDA;
4847 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004849 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004850 if(NULL == pWdaParams)
4851 {
4852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004853 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004854 VOS_ASSERT(0) ;
4855 return ;
4856 }
4857 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4858 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004859 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4860 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004861 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004862 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004863 return ;
4864}
4865
Jeff Johnson295189b2012-06-20 16:38:30 -07004866/*
4867 * FUNCTION: WDA_ProcessRemoveStaKeyReq
4868 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
4869 */
4870VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
4871 tRemoveStaKeyParams *removeStaKeyParams )
4872{
4873 WDI_Status status = WDI_STATUS_SUCCESS ;
4874 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
4875 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
4876 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
4877 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004879 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004880 if(NULL == wdiRemoveStaKeyParam)
4881 {
4882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004883 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004884 VOS_ASSERT(0);
4885 return VOS_STATUS_E_NOMEM;
4886 }
4887 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4888 if(NULL == pWdaParams)
4889 {
4890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004891 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004892 VOS_ASSERT(0);
4893 vos_mem_free(wdiRemoveStaKeyParam);
4894 return VOS_STATUS_E_NOMEM;
4895 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004896 /* copy remove STA key params to WDI structure*/
4897 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
4898 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
4899 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
4900 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
4901 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004902 /* Store remove key pointer, as this will be used for response */
4903 /* store Params pass it to WDI */
4904 pWdaParams->pWdaContext = pWDA;
4905 pWdaParams->wdaMsgParam = removeStaKeyParams;
4906 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004907 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
4908 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004909 if(IS_WDI_STATUS_FAILURE(status))
4910 {
4911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4912 "Failure in remove STA Key Req WDI API, free all the memory " );
4913 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4914 vos_mem_free(pWdaParams) ;
4915 removeStaKeyParams->status = eSIR_FAILURE ;
4916 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
4917 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004918 return CONVERT_WDI2VOS_STATUS(status) ;
4919}
Jeff Johnson295189b2012-06-20 16:38:30 -07004920/*
4921 * FUNCTION: WDA_IsHandleSetLinkStateReq
4922 * Update the WDA state and return the status to handle this message or not
4923 */
Jeff Johnson295189b2012-06-20 16:38:30 -07004924WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
4925 tWDA_CbContext *pWDA,
4926 tLinkStateParams *linkStateParams)
4927{
4928 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07004929 switch(linkStateParams->state)
4930 {
4931 case eSIR_LINK_PREASSOC_STATE:
4932 case eSIR_LINK_BTAMP_PREASSOC_STATE:
4933 /*
4934 * set the WDA state to PRE ASSOC
4935 * copy the BSSID into pWDA to use it in join request and return,
4936 * No need to handle these messages.
4937 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004938 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
4939 {
4940 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07004941 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004942 }
4943 else
4944 {
4945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004946 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004947 VOS_ASSERT(0);
4948 }
4949
4950 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
4951 {
4952 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07004953 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004954 }
4955 else
4956 {
4957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004958 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004959 VOS_ASSERT(0);
4960 }
4961
Jeff Johnson295189b2012-06-20 16:38:30 -07004962 /* UMAC is issuing the setlink state with PREASSOC twice (before set
4963 *channel and after ) so reset the WDA state to ready when the second
4964 * time UMAC issue the link state with PREASSOC
4965 */
4966 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
4967 {
4968 /* RESET WDA state back to WDA_READY_STATE */
4969 pWDA->wdaState = WDA_READY_STATE;
4970 }
4971 else
4972 {
4973 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
4974 }
4975 //populate linkState info in WDACbCtxt
4976 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07004977 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07004978 default:
4979 if(pWDA->wdaState != WDA_READY_STATE)
4980 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004981 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
4982 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
4983 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
4984 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
4985 *the ASSERT in WDA_Stop during module unload.*/
4986 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
4987 {
4988 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004989 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004990 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004991 else
4992 {
4993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004994 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004995 status = WDA_IGNORE_SET_LINK_STATE;
4996 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004997 }
4998 break;
4999 }
5000
5001 return status;
5002}
Jeff Johnson295189b2012-06-20 16:38:30 -07005003/*
5004 * FUNCTION: WDA_SetLinkStateCallback
5005 * call back function for set link state from WDI
5006 */
5007void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
5008{
5009 tWDA_CbContext *pWDA;
5010 tLinkStateParams *linkStateParams;
5011 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005013 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005014 if(NULL == pWdaParams)
5015 {
5016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005017 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005018 VOS_ASSERT(0) ;
5019 return ;
5020 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005021 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -07005022 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005023 /*
5024 * In STA mode start the BA activity check timer after association
5025 * and in AP mode start BA activity check timer after BSS start */
5026 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
5027 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07005028 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
5029 ((status == WDI_STATUS_SUCCESS) &&
5030 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07005031 {
5032 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5033 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005034 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005035 /*
5036 * No respone required for WDA_SET_LINK_STATE so free the request
5037 * param here
5038 */
5039 if( pWdaParams != NULL )
5040 {
5041 if( pWdaParams->wdaWdiApiMsgParam != NULL )
5042 {
5043 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5044 }
5045 vos_mem_free(pWdaParams);
5046 }
5047 return ;
5048}
Jeff Johnson295189b2012-06-20 16:38:30 -07005049/*
5050 * FUNCTION: WDA_ProcessSetLinkState
5051 * Request to WDI to set the link status.
5052 */
5053VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
5054 tLinkStateParams *linkStateParams)
5055{
5056 WDI_Status status = WDI_STATUS_SUCCESS ;
5057 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
5058 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
5059 sizeof(WDI_SetLinkReqParamsType)) ;
5060 tWDA_ReqParams *pWdaParams ;
5061 tpAniSirGlobal pMac;
5062 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
5063
5064 if(NULL == pMac)
5065 {
5066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005067 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005068 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005069 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005070 return VOS_STATUS_E_FAILURE;
5071 }
5072
5073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005074 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005075 if(NULL == wdiSetLinkStateParam)
5076 {
5077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005078 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005079 VOS_ASSERT(0);
5080 return VOS_STATUS_E_NOMEM;
5081 }
5082 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5083 if(NULL == pWdaParams)
5084 {
5085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005086 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005087 VOS_ASSERT(0);
5088 vos_mem_free(wdiSetLinkStateParam);
5089 return VOS_STATUS_E_NOMEM;
5090 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005091 if(WDA_IGNORE_SET_LINK_STATE ==
5092 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
5093 {
5094 status = WDI_STATUS_E_FAILURE;
5095 }
5096 else
5097 {
5098 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
5099 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005100 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
5101 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005102 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
5103 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005104 pWdaParams->pWdaContext = pWDA;
5105 /* Store remove key pointer, as this will be used for response */
5106 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005107 /* store Params pass it to WDI */
5108 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
5109 /* Stop Timer only other than GO role and concurrent session */
5110 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07005111 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005112 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
5113 {
5114 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5115 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005116 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
5117 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005118 if(IS_WDI_STATUS_FAILURE(status))
5119 {
5120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5121 "Failure in set link state Req WDI API, free all the memory " );
5122 }
5123 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005124 if(IS_WDI_STATUS_FAILURE(status))
5125 {
5126 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07005127 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005128 vos_mem_free(pWdaParams);
5129 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005130 return CONVERT_WDI2VOS_STATUS(status) ;
5131}
Jeff Johnson295189b2012-06-20 16:38:30 -07005132/*
5133 * FUNCTION: WDA_GetStatsReqParamsCallback
5134 * send the response to PE with Stats received from WDI
5135 */
5136void WDA_GetStatsReqParamsCallback(
5137 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
5138 void* pUserData)
5139{
5140 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5141 tAniGetPEStatsRsp *pGetPEStatsRspParams;
5142
5143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005144 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005145 pGetPEStatsRspParams =
5146 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
5147 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
5148
5149 if(NULL == pGetPEStatsRspParams)
5150 {
5151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005152 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005153 VOS_ASSERT(0);
5154 return;
5155 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005156 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
5157 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
5158 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
5159 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005160
5161 //Fill the Session Id Properly in PE
5162 pGetPEStatsRspParams->sessionId = 0;
5163 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005164 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005165 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
5166 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005167 vos_mem_copy( pGetPEStatsRspParams + 1,
5168 wdiGetStatsRsp + 1,
5169 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005170 /* send response to UMAC*/
5171 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
5172
5173 return;
5174}
5175
Jeff Johnson295189b2012-06-20 16:38:30 -07005176/*
5177 * FUNCTION: WDA_ProcessGetStatsReq
5178 * Request to WDI to get the statistics
5179 */
5180VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
5181 tAniGetPEStatsReq *pGetStatsParams)
5182{
5183 WDI_Status status = WDI_STATUS_SUCCESS ;
5184 WDI_GetStatsReqParamsType wdiGetStatsParam;
5185 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005187 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005188 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
5189 pGetStatsParams->staId;
5190 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
5191 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005192 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005193 status = WDI_GetStatsReq(&wdiGetStatsParam,
5194 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005195 if(IS_WDI_STATUS_FAILURE(status))
5196 {
5197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5198 "Failure in Get Stats Req WDI API, free all the memory " );
5199 pGetPEStatsRspParams =
5200 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
5201 if(NULL == pGetPEStatsRspParams)
5202 {
5203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005204 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005205 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005206 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005207 return VOS_STATUS_E_NOMEM;
5208 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005209 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
5210 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
5211 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
5212 pGetPEStatsRspParams->rc = eSIR_FAILURE;
5213 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
5214 (void *)pGetPEStatsRspParams, 0) ;
5215 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005216 /* Free the request message */
5217 vos_mem_free(pGetStatsParams);
5218 return CONVERT_WDI2VOS_STATUS(status);
5219}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005220
5221#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
5222/*
5223 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
5224 * send the response to PE with roam Rssi received from WDI
5225 */
5226void WDA_GetRoamRssiReqParamsCallback(
5227 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
5228 void* pUserData)
5229{
5230 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5231 tWDA_CbContext *pWDA = NULL;
5232 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5233 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
5234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5235 "<------ %s " ,__func__);
5236 if(NULL == pWdaParams)
5237 {
5238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5239 "%s: pWdaParams received NULL", __func__);
5240 VOS_ASSERT(0) ;
5241 return ;
5242 }
5243 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5244 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
5245
5246 if(NULL == pGetRoamRssiReqParams)
5247 {
5248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5249 "%s: pGetRoamRssiReqParams received NULL", __func__);
5250 VOS_ASSERT(0);
5251 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5252 vos_mem_free(pWdaParams);
5253 return ;
5254 }
5255 pGetRoamRssiRspParams =
5256 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5257
5258 if(NULL == pGetRoamRssiRspParams)
5259 {
5260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5261 "%s: VOS MEM Alloc Failure", __func__);
5262 VOS_ASSERT(0);
5263 return;
5264 }
5265 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
5266 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005267 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005268 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
5269 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
5270
5271 /* Assign get roam rssi req (backup) in to the response */
5272 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
5273
5274 /* free WDI command buffer */
5275 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5276 vos_mem_free(pWdaParams) ;
5277
5278 /* send response to UMAC*/
5279 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
5280
5281 return;
5282}
5283
5284
5285
5286/*
5287 * FUNCTION: WDA_ProcessGetRoamRssiReq
5288 * Request to WDI to get the statistics
5289 */
5290VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
5291 tAniGetRssiReq *pGetRoamRssiParams)
5292{
5293 WDI_Status status = WDI_STATUS_SUCCESS ;
5294 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
5295 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5296 tWDA_ReqParams *pWdaParams = NULL;
5297
5298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5299 "------> %s " ,__func__);
5300 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
5301 pGetRoamRssiParams->staId;
5302 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
5303
5304 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5305 if(NULL == pWdaParams)
5306 {
5307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5308 "%s: VOS MEM Alloc Failure", __func__);
5309 VOS_ASSERT(0);
5310 return VOS_STATUS_E_NOMEM;
5311 }
5312
5313 /* Store Init Req pointer, as this will be used for response */
5314 pWdaParams->pWdaContext = pWDA;
5315
5316 /* Take Get roam Rssi req backup as it stores the callback to be called after
5317 receiving the response */
5318 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
5319 pWdaParams->wdaWdiApiMsgParam = NULL;
5320
5321 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
5322 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
5323 if(IS_WDI_STATUS_FAILURE(status))
5324 {
5325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5326 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
5327 pGetRoamRssiRspParams =
5328 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5329 if(NULL == pGetRoamRssiRspParams)
5330 {
5331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5332 "%s: VOS MEM Alloc Failure", __func__);
5333 VOS_ASSERT(0);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005334 return VOS_STATUS_E_NOMEM;
5335 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07005336 vos_mem_free(pGetRoamRssiParams);
5337 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005338 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
5339 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
5340 pGetRoamRssiRspParams->rssi = 0;
5341 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
5342 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
5343 (void *)pGetRoamRssiRspParams, 0) ;
5344 }
5345 return CONVERT_WDI2VOS_STATUS(status);
5346}
5347#endif
5348
5349
Jeff Johnson295189b2012-06-20 16:38:30 -07005350/*
5351 * FUNCTION: WDA_UpdateEDCAParamCallback
5352 * call back function for Update EDCA params from WDI
5353 */
5354void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
5355{
5356 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5357 tEdcaParams *pEdcaParams;
5358
5359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005360 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005361 if(NULL == pWdaParams)
5362 {
5363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005364 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005365 VOS_ASSERT(0) ;
5366 return ;
5367 }
5368 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005369 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5370 vos_mem_free(pWdaParams);
5371 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005372 return ;
5373}
Jeff Johnson295189b2012-06-20 16:38:30 -07005374/*
5375 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
5376 * Request to WDI to Update the EDCA params.
5377 */
5378VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
5379 tEdcaParams *pEdcaParams)
5380{
5381 WDI_Status status = WDI_STATUS_SUCCESS ;
5382 WDI_UpdateEDCAParamsType *wdiEdcaParam =
5383 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
5384 sizeof(WDI_UpdateEDCAParamsType)) ;
5385 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005387 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005388 if(NULL == wdiEdcaParam)
5389 {
5390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005391 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005392 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005393 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005394 return VOS_STATUS_E_NOMEM;
5395 }
5396 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5397 if(NULL == pWdaParams)
5398 {
5399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005400 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005401 VOS_ASSERT(0);
5402 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005403 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005404 return VOS_STATUS_E_NOMEM;
5405 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005406 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07005407 /*
5408 Since firmware is not using highperformance flag, we have removed
5409 this flag from wdiEDCAInfo structure to match sizeof the structure
5410 between host and firmware.In future if we are planning to use
5411 highperformance flag then Please define this flag in wdiEDCAInfo
5412 structure, update it here and send it to firmware. i.e.
5413 Following is the original line which we removed as part of the fix
5414 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
5415 pEdcaParams->highPerformance;
5416 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005417 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
5418 &pEdcaParams->acbe);
5419 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
5420 &pEdcaParams->acbk);
5421 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
5422 &pEdcaParams->acvi);
5423 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
5424 &pEdcaParams->acvo);
5425 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005426 pWdaParams->pWdaContext = pWDA;
5427 /* Store remove key pointer, as this will be used for response */
5428 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005429 /* store Params pass it to WDI */
5430 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005431 status = WDI_UpdateEDCAParams(wdiEdcaParam,
5432 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005433 if(IS_WDI_STATUS_FAILURE(status))
5434 {
5435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5436 "Failure in Update EDCA Params WDI API, free all the memory " );
5437 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5438 vos_mem_free(pWdaParams);
5439 vos_mem_free(pEdcaParams);
5440 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005441 return CONVERT_WDI2VOS_STATUS(status) ;
5442}
Jeff Johnson295189b2012-06-20 16:38:30 -07005443/*
5444 * FUNCTION: WDA_AddBAReqCallback
5445 * send ADD BA RSP back to PE
5446 */
5447void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
5448 void* pUserData)
5449{
5450 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5451 tWDA_CbContext *pWDA;
5452 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005454 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005455 if(NULL == pWdaParams)
5456 {
5457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005458 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005459 VOS_ASSERT(0) ;
5460 return ;
5461 }
5462 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5463 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005464 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5465 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005466 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005467 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005468 return ;
5469}
5470
Jeff Johnson295189b2012-06-20 16:38:30 -07005471/*
5472 * FUNCTION: WDA_ProcessAddBAReq
5473 * Request to WDI to Update the ADDBA REQ params.
5474 */
5475VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
5476 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
5477{
Jeff Johnson43971f52012-07-17 12:26:56 -07005478 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005479 WDI_AddBAReqParamsType *wdiAddBAReqParam =
5480 (WDI_AddBAReqParamsType *)vos_mem_malloc(
5481 sizeof(WDI_AddBAReqParamsType)) ;
5482 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005484 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005485 if(NULL == wdiAddBAReqParam)
5486 {
5487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005488 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005489 VOS_ASSERT(0);
5490 return VOS_STATUS_E_NOMEM;
5491 }
5492 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5493 if(NULL == pWdaParams)
5494 {
5495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005496 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005497 VOS_ASSERT(0);
5498 vos_mem_free(wdiAddBAReqParam);
5499 return VOS_STATUS_E_NOMEM;
5500 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005501 do
5502 {
5503 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005504 wdiAddBaInfo->ucSTAIdx = staIdx ;
5505 wdiAddBaInfo->ucBaSessionID = baSessionID ;
5506 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005507 } while(0) ;
5508 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005509 pWdaParams->pWdaContext = pWDA;
5510 /* store Params pass it to WDI */
5511 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
5512 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07005513 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
5514 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005515
Jeff Johnson43971f52012-07-17 12:26:56 -07005516 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005517 {
5518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07005519 "Failure in ADD BA REQ Params WDI API, free all the memory" );
5520 status = CONVERT_WDI2VOS_STATUS(wstatus);
5521 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005522 vos_mem_free(pWdaParams);
5523 pAddBAReqParams->status = eSIR_FAILURE;
5524 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5525 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005526 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005527}
Jeff Johnson295189b2012-06-20 16:38:30 -07005528/*
5529 * FUNCTION: WDA_AddBASessionReqCallback
5530 * send ADD BA SESSION RSP back to PE/(or TL)
5531 */
5532void WDA_AddBASessionReqCallback(
5533 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
5534{
5535 VOS_STATUS status = VOS_STATUS_SUCCESS ;
5536 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5537 tWDA_CbContext *pWDA;
5538 tAddBAParams *pAddBAReqParams ;
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 == pWdaParams)
5542 {
5543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005544 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005545 VOS_ASSERT(0) ;
5546 return ;
5547 }
5548 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5549 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005550 if( NULL == pAddBAReqParams )
5551 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005553 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005554 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005555 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5556 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005557 return ;
5558 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005559 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5560 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005561 /*
5562 * if WDA in update TL state, update TL with BA session parama and send
5563 * another request to HAL(/WDI) (ADD_BA_REQ)
5564 */
5565
5566 if((VOS_STATUS_SUCCESS ==
5567 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
5568 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
5569 {
5570 /* Update TL with BA info received from HAL/WDI */
5571 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
5572 wdiAddBaSession->usBaSessionID,
5573 wdiAddBaSession->ucSTAIdx,
5574 wdiAddBaSession->ucBaTID,
5575 wdiAddBaSession->ucBaBufferSize,
5576 wdiAddBaSession->ucWinSize,
5577 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07005578 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
5579 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
5580 }
5581 else
5582 {
5583 pAddBAReqParams->status =
5584 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
5585
5586 /* Setting Flag to indicate that Set BA is success */
5587 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
5588 {
5589 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
5590 tANI_U8 tid = wdiAddBaSession->ucBaTID;
5591 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
5592 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005593 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5594 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005595 /*Reset the WDA state to READY */
5596 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005597 return ;
5598}
5599
Jeff Johnson295189b2012-06-20 16:38:30 -07005600/*
5601 * FUNCTION: WDA_ProcessAddBASessionReq
5602 * Request to WDI to Update the ADDBA REQ params.
5603 */
5604VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
5605 tAddBAParams *pAddBAReqParams)
5606{
5607 WDI_Status status = WDI_STATUS_SUCCESS ;
5608 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
5609 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
5610 sizeof(WDI_AddBASessionReqParamsType)) ;
5611 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005612 WLANTL_STAStateType tlSTAState = 0;
5613
Jeff Johnson295189b2012-06-20 16:38:30 -07005614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005615 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005616 if(NULL == wdiAddBASessionReqParam)
5617 {
5618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005619 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005620 VOS_ASSERT(0);
5621 return VOS_STATUS_E_NOMEM;
5622 }
5623 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5624 if(NULL == pWdaParams)
5625 {
5626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005627 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005628 VOS_ASSERT(0);
5629 vos_mem_free(wdiAddBASessionReqParam);
5630 return VOS_STATUS_E_NOMEM;
5631 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005632 /*
5633 * Populate ADD BA parameters and pass these paarmeters to WDI.
5634 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
5635 * the state to track if these is BA recipient case or BA initiator
5636 * case.
5637 */
5638 do
5639 {
5640 WDI_AddBASessionReqinfoType *wdiBAInfoType =
5641 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
5642 /* vos_mem_copy(wdiBAInfoType->macBSSID,
5643 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
5644 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
5645 vos_mem_copy(wdiBAInfoType->macPeerAddr,
5646 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005647 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07005648 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
5649 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
5650 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
5651 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
5652 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005653 /* check the BA direction and update state accordingly */
5654 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
5655 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
5656 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
5657
5658 }while(0) ;
5659 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005660 pWdaParams->pWdaContext = pWDA;
5661 /* Store ADD BA pointer, as this will be used for response */
5662 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
5663 /* store Params pass it to WDI */
5664 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005665
5666 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
5667 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
5668 */
5669 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
5670 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
5671 {
5672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005673 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07005674 status = WDI_STATUS_E_NOT_ALLOWED;
5675 pAddBAReqParams->status =
5676 CONVERT_WDI2SIR_STATUS(status) ;
5677 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5678 /*Reset the WDA state to READY */
5679 pWDA->wdaState = WDA_READY_STATE;
5680 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5681 vos_mem_free(pWdaParams);
5682
5683 return CONVERT_WDI2VOS_STATUS(status) ;
5684 }
5685
Jeff Johnson295189b2012-06-20 16:38:30 -07005686 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
5687 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005688 if(IS_WDI_STATUS_FAILURE(status))
5689 {
5690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005691 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07005692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005693 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07005694 pAddBAReqParams->status =
5695 CONVERT_WDI2SIR_STATUS(status) ;
5696 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005697 /*Reset the WDA state to READY */
5698 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005699 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005700 vos_mem_free(pWdaParams);
5701 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005702 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005703}
Jeff Johnson295189b2012-06-20 16:38:30 -07005704/*
5705 * FUNCTION: WDA_DelBANotifyTL
5706 * send DEL BA IND to TL
5707 */
5708void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
5709 tDelBAParams *pDelBAReqParams)
5710{
5711 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
5712 //tSirMsgQ msg;
5713 vos_msg_t vosMsg;
5714 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005715 if(NULL == pDelBAInd)
5716 {
5717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005718 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005719 VOS_ASSERT(0) ;
5720 return;
5721 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005722 pDelBAInd->mesgType = WDA_DELETEBA_IND;
5723 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
5724 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
5725 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07005726
Jeff Johnson295189b2012-06-20 16:38:30 -07005727
5728 vosMsg.type = WDA_DELETEBA_IND;
5729 vosMsg.bodyptr = pDelBAInd;
5730 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
5731 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
5732 {
5733 vosStatus = VOS_STATUS_E_BADMSG;
5734 }
5735}
Jeff Johnson295189b2012-06-20 16:38:30 -07005736/*
5737 * FUNCTION: WDA_DelBAReqCallback
5738 * send DEL BA RSP back to PE
5739 */
5740void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
5741{
5742 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5743 tWDA_CbContext *pWDA;
5744 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005746 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005747 if(NULL == pWdaParams)
5748 {
5749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005750 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005751 VOS_ASSERT(0) ;
5752 return ;
5753 }
5754 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5755 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005756 /* Notify TL about DEL BA in case of recipinet */
5757 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
5758 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
5759 {
5760 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
5761 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005762 /*
5763 * No respone required for WDA_DELBA_IND so just free the request
5764 * param here
5765 */
5766 vos_mem_free(pDelBAReqParams);
5767 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5768 vos_mem_free(pWdaParams);
5769 return ;
5770}
5771
Jeff Johnson295189b2012-06-20 16:38:30 -07005772/*
5773 * FUNCTION: WDA_ProcessDelBAReq
5774 * Request to WDI to Update the DELBA REQ params.
5775 */
5776VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
5777 tDelBAParams *pDelBAReqParams)
5778{
5779 WDI_Status status = WDI_STATUS_SUCCESS ;
5780 WDI_DelBAReqParamsType *wdiDelBAReqParam =
5781 (WDI_DelBAReqParamsType *)vos_mem_malloc(
5782 sizeof(WDI_DelBAReqParamsType)) ;
5783 tWDA_ReqParams *pWdaParams ;
5784 tANI_U16 staIdx = 0;
5785 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005787 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005788 if(NULL == wdiDelBAReqParam)
5789 {
5790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005791 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005792 VOS_ASSERT(0);
5793 return VOS_STATUS_E_NOMEM;
5794 }
5795 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5796 if(NULL == pWdaParams)
5797 {
5798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005799 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005800 VOS_ASSERT(0);
5801 vos_mem_free(wdiDelBAReqParam);
5802 return VOS_STATUS_E_NOMEM;
5803 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005804 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
5805 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
5806 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
5807 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005808 pWdaParams->pWdaContext = pWDA;
5809 /* Store DEL BA pointer, as this will be used for response */
5810 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005811 /* store Params pass it to WDI */
5812 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005813 /* if BA exchange over the air is failed, clear this tid in BaBitmap
5814 * maintained in WDA, so that WDA can retry for another BA session
5815 */
5816 staIdx = pDelBAReqParams->staIdx;
5817 tid = pDelBAReqParams->baTID;
5818 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07005819 status = WDI_DelBAReq(wdiDelBAReqParam,
5820 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005821 if(IS_WDI_STATUS_FAILURE(status))
5822 {
5823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5824 "Failure in DEL BA REQ Params WDI API, free all the memory " );
5825 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5826 vos_mem_free(pWdaParams->wdaMsgParam);
5827 vos_mem_free(pWdaParams);
5828 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005829 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005830}
Jeff Johnson295189b2012-06-20 16:38:30 -07005831/*
5832 * FUNCTION: WDA_AddTSReqCallback
5833 * send ADD TS RSP back to PE
5834 */
5835void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
5836{
5837 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5838 tWDA_CbContext *pWDA;
5839 tAddTsParams *pAddTsReqParams;
5840
5841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005842 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005843 if(NULL == pWdaParams)
5844 {
5845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005846 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005847 VOS_ASSERT(0) ;
5848 return ;
5849 }
5850 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5851 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
5852 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5853 vos_mem_free(pWdaParams);
5854
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005855 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005856 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005857 return ;
5858}
5859
Jeff Johnson295189b2012-06-20 16:38:30 -07005860/*
5861 * FUNCTION: WDA_ProcessAddTSReq
5862 * Request to WDI to Update the ADD TS REQ params.
5863 */
5864VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
5865 tAddTsParams *pAddTsReqParams)
5866{
5867 WDI_Status status = WDI_STATUS_SUCCESS ;
5868 WDI_AddTSReqParamsType *wdiAddTSReqParam =
5869 (WDI_AddTSReqParamsType *)vos_mem_malloc(
5870 sizeof(WDI_AddTSReqParamsType)) ;
5871 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005873 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005874 if(NULL == wdiAddTSReqParam)
5875 {
5876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005877 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005878 VOS_ASSERT(0);
5879 return VOS_STATUS_E_NOMEM;
5880 }
5881 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5882 if(NULL == pWdaParams)
5883 {
5884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005885 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005886 VOS_ASSERT(0);
5887 vos_mem_free(wdiAddTSReqParam);
5888 return VOS_STATUS_E_NOMEM;
5889 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005890 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
5891 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005892 //TS IE
5893 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
5894 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
5895 pAddTsReqParams->tspec.length;
5896
5897 //TS IE : TS INFO : TRAFFIC
5898 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
5899 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
5900 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
5901 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
5902 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
5903 pAddTsReqParams->tspec.tsinfo.traffic.psb;
5904 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
5905 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
5906 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
5907 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
5908 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
5909 pAddTsReqParams->tspec.tsinfo.traffic.direction;
5910 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
5911 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
5912 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
5913 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
5914
5915 //TS IE : TS INFO : SCHEDULE
5916 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
5917 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
5918 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
5919 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07005920 //TS IE
5921 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
5922 pAddTsReqParams->tspec.nomMsduSz;
5923 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
5924 pAddTsReqParams->tspec.maxMsduSz;
5925 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
5926 pAddTsReqParams->tspec.minSvcInterval;
5927 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
5928 pAddTsReqParams->tspec.maxSvcInterval;
5929 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
5930 pAddTsReqParams->tspec.inactInterval;
5931 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
5932 pAddTsReqParams->tspec.suspendInterval;
5933 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
5934 pAddTsReqParams->tspec.svcStartTime;
5935 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
5936 pAddTsReqParams->tspec.minDataRate;
5937 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
5938 pAddTsReqParams->tspec.meanDataRate;
5939 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
5940 pAddTsReqParams->tspec.peakDataRate;
5941 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
5942 pAddTsReqParams->tspec.maxBurstSz;
5943 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
5944 pAddTsReqParams->tspec.delayBound;
5945 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
5946 pAddTsReqParams->tspec.minPhyRate;
5947 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
5948 pAddTsReqParams->tspec.surplusBw;
5949 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
5950 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07005951 /* TODO: tAddTsParams doesn't have the following fields */
5952#if 0
5953 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
5954 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
5955 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
5956 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
5957#endif
5958 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
5959
5960 pWdaParams->pWdaContext = pWDA;
5961 /* Store ADD TS pointer, as this will be used for response */
5962 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005963 /* store Params pass it to WDI */
5964 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005965 status = WDI_AddTSReq(wdiAddTSReqParam,
5966 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005967 if(IS_WDI_STATUS_FAILURE(status))
5968 {
5969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5970 "Failure in ADD TS REQ Params WDI API, free all the memory " );
5971 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5972 vos_mem_free(pWdaParams);
5973 pAddTsReqParams->status = eSIR_FAILURE ;
5974 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
5975 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005976 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005977}
5978
Jeff Johnson295189b2012-06-20 16:38:30 -07005979/*
5980 * FUNCTION: WDA_DelTSReqCallback
5981 * send DEL TS RSP back to PE
5982 */
5983void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
5984{
5985 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005987 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005988 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5989 vos_mem_free(pWdaParams->wdaMsgParam) ;
5990 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005991 /*
5992 * No respone required for WDA_DEL_TS_REQ so just free the request
5993 * param here
5994 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005995 return ;
5996}
5997
Jeff Johnson295189b2012-06-20 16:38:30 -07005998/*
5999 * FUNCTION: WDA_ProcessDelTSReq
6000 * Request to WDI to Update the DELTS REQ params.
6001 */
6002VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
6003 tDelTsParams *pDelTSReqParams)
6004{
6005 WDI_Status status = WDI_STATUS_SUCCESS ;
6006 WDI_DelTSReqParamsType *wdiDelTSReqParam =
6007 (WDI_DelTSReqParamsType *)vos_mem_malloc(
6008 sizeof(WDI_DelTSReqParamsType)) ;
6009 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006011 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006012 if(NULL == wdiDelTSReqParam)
6013 {
6014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006015 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006016 VOS_ASSERT(0);
6017 return VOS_STATUS_E_NOMEM;
6018 }
6019 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6020 if(NULL == pWdaParams)
6021 {
6022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006023 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006024 VOS_ASSERT(0);
6025 vos_mem_free(wdiDelTSReqParam);
6026 return VOS_STATUS_E_NOMEM;
6027 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006028 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
6029 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
6030 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
6031 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
6032 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006033 pWdaParams->pWdaContext = pWDA;
6034 /* Store DEL TS pointer, as this will be used for response */
6035 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006036 /* store Params pass it to WDI */
6037 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006038 status = WDI_DelTSReq(wdiDelTSReqParam,
6039 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006040 if(IS_WDI_STATUS_FAILURE(status))
6041 {
6042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6043 "Failure in DEL TS REQ Params WDI API, free all the memory " );
6044 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6045 vos_mem_free(pWdaParams->wdaMsgParam);
6046 vos_mem_free(pWdaParams);
6047 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006048 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006049}
Jeff Johnson295189b2012-06-20 16:38:30 -07006050/*
6051 * FUNCTION: WDA_UpdateBeaconParamsCallback
6052 * Free the memory. No need to send any response to PE in this case
6053 */
6054void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
6055{
6056 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006058 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006059 if(NULL == pWdaParams)
6060 {
6061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006062 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006063 VOS_ASSERT(0) ;
6064 return ;
6065 }
6066 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6067 vos_mem_free(pWdaParams->wdaMsgParam) ;
6068 vos_mem_free(pWdaParams);
6069 /*
6070 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
6071 * param here
6072 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006073 return ;
6074}
Jeff Johnson295189b2012-06-20 16:38:30 -07006075/*
6076 * FUNCTION: WDA_ProcessUpdateBeaconParams
6077 * Request to WDI to send the beacon parameters to HAL to update the Hardware
6078 */
6079VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
6080 tUpdateBeaconParams *pUpdateBeaconParams)
6081{
6082 WDI_Status status = WDI_STATUS_SUCCESS ;
6083 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
6084 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
6085 sizeof(WDI_UpdateBeaconParamsType)) ;
6086 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006088 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006089 if(NULL == wdiUpdateBeaconParams)
6090 {
6091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006092 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006093 VOS_ASSERT(0);
6094 return VOS_STATUS_E_NOMEM;
6095 }
6096 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6097 if(NULL == pWdaParams)
6098 {
6099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006100 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006101 VOS_ASSERT(0);
6102 vos_mem_free(wdiUpdateBeaconParams);
6103 return VOS_STATUS_E_NOMEM;
6104 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006105 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
6106 pUpdateBeaconParams->bssIdx;
6107 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
6108 pUpdateBeaconParams->fShortPreamble;
6109 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
6110 pUpdateBeaconParams->fShortSlotTime;
6111 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
6112 pUpdateBeaconParams->beaconInterval;
6113 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
6114 pUpdateBeaconParams->llaCoexist;
6115 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
6116 pUpdateBeaconParams->llbCoexist;
6117 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
6118 pUpdateBeaconParams->llgCoexist;
6119 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
6120 pUpdateBeaconParams->ht20MhzCoexist;
6121 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
6122 pUpdateBeaconParams->llnNonGFCoexist;
6123 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
6124 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
6125 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
6126 pUpdateBeaconParams->fRIFSMode;
6127 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
6128 pUpdateBeaconParams->paramChangeBitmap;
6129 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
6130
6131 pWdaParams->pWdaContext = pWDA;
6132 /* Store UpdateBeacon Req pointer, as this will be used for response */
6133 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006134 /* store Params pass it to WDI */
6135 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006136 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
6137 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
6138 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006139 if(IS_WDI_STATUS_FAILURE(status))
6140 {
6141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6142 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
6143 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6144 vos_mem_free(pWdaParams->wdaMsgParam);
6145 vos_mem_free(pWdaParams);
6146 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006147 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006148}
Jeff Johnson295189b2012-06-20 16:38:30 -07006149#ifdef FEATURE_WLAN_CCX
Jeff Johnson295189b2012-06-20 16:38:30 -07006150/*
6151 * FUNCTION: WDA_TSMStatsReqCallback
6152 * send TSM Stats RSP back to PE
6153 */
6154void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
6155{
6156 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6157 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006158 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
6159 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006160
6161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006162 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006163 if(NULL == pWdaParams)
6164 {
6165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006166 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006167 VOS_ASSERT(0) ;
6168 return ;
6169 }
6170 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006171 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
6172
6173 if(NULL == pGetTsmStatsReqParams)
6174 {
6175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6176 "%s: pGetTsmStatsReqParams received NULL", __func__);
6177 VOS_ASSERT(0);
6178 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6179 vos_mem_free(pWdaParams);
6180 return;
6181 }
6182
6183 pTsmRspParams =
6184 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07006185 if( NULL == pTsmRspParams )
6186 {
6187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006188 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006189 VOS_ASSERT( 0 );
6190 return ;
6191 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006192 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
6193 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
6194 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
6195
Jeff Johnson295189b2012-06-20 16:38:30 -07006196 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
6197 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
6198 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
6199 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
6200 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
6201 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
6202 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
6203 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
6204 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
6205 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006206
6207 /* Assign get tsm stats req req (backup) in to the response */
6208 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
6209
6210 /* free WDI command buffer */
6211 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6212 vos_mem_free(pWdaParams);
6213
Jeff Johnson295189b2012-06-20 16:38:30 -07006214 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006215 return ;
6216}
6217
6218
Jeff Johnson295189b2012-06-20 16:38:30 -07006219/*
6220 * FUNCTION: WDA_ProcessTsmStatsReq
6221 * Request to WDI to get the TSM Stats params.
6222 */
6223VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006224 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07006225{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006226 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006227 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006228 tWDA_ReqParams *pWdaParams = NULL;
6229 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
6230
Jeff Johnson295189b2012-06-20 16:38:30 -07006231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006232 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006233 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
6234 sizeof(WDI_TSMStatsReqParamsType));
6235 if(NULL == wdiTSMReqParam)
6236 {
6237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006238 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006239 VOS_ASSERT(0);
6240 return VOS_STATUS_E_NOMEM;
6241 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006242 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6243 if(NULL == pWdaParams)
6244 {
6245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006246 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006247 VOS_ASSERT(0);
6248 vos_mem_free(wdiTSMReqParam);
6249 return VOS_STATUS_E_NOMEM;
6250 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006251 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
6252 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
6253 pTsmStats->bssId,
6254 sizeof(wpt_macAddr));
6255 wdiTSMReqParam->wdiReqStatusCB = NULL ;
6256
6257 pWdaParams->pWdaContext = pWDA;
6258 /* Store TSM Stats pointer, as this will be used for response */
6259 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006260 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006261 status = WDI_TSMStatsReq(wdiTSMReqParam,
6262 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006263 if(IS_WDI_STATUS_FAILURE(status))
6264 {
6265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6266 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006267 vos_mem_free(pWdaParams);
6268
6269 pGetTsmStatsRspParams =
6270 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
6271 if(NULL == pGetTsmStatsRspParams)
6272 {
6273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6274 "%s: VOS MEM Alloc Failure", __func__);
6275 VOS_ASSERT(0);
6276 vos_mem_free(pTsmStats);
6277 return VOS_STATUS_E_NOMEM;
6278 }
6279 pGetTsmStatsRspParams->staId = pTsmStats->staId;
6280 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
6281 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
6282
6283 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006284 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006285 return CONVERT_WDI2VOS_STATUS(status) ;
6286}
6287#endif
6288/*
6289 * FUNCTION: WDA_SendBeaconParamsCallback
6290 * No need to send any response to PE in this case
6291 */
6292void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
6293{
6294
Jeff Johnson295189b2012-06-20 16:38:30 -07006295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006296 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006297 return ;
6298}
Jeff Johnson295189b2012-06-20 16:38:30 -07006299/*
6300 * FUNCTION: WDA_ProcessSendBeacon
6301 * Request to WDI to send the beacon template to HAL to update the TPE memory and
6302 * start beacon trasmission
6303 */
6304VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
6305 tSendbeaconParams *pSendbeaconParams)
6306{
6307 WDI_Status status = WDI_STATUS_SUCCESS ;
6308 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006310 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006311 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
6312 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
6313 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
6314 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07006315 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
6316 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05306317 /* p2pIeOffset should be atleast greater than timIeOffset */
6318 if ((pSendbeaconParams->p2pIeOffset != 0) &&
6319 (pSendbeaconParams->p2pIeOffset <
6320 pSendbeaconParams->timIeOffset))
6321 {
6322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6323 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
6324 VOS_ASSERT( 0 );
6325 return WDI_STATUS_E_FAILURE;
6326 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006327 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
6328 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07006329 /* Copy the beacon template to local buffer */
6330 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
6331 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
6332 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
6333
Jeff Johnson295189b2012-06-20 16:38:30 -07006334 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
6335 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006336 if(IS_WDI_STATUS_FAILURE(status))
6337 {
6338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6339 "Failure in SEND BEACON REQ Params WDI API" );
6340 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006341 vos_mem_free(pSendbeaconParams);
6342 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006343}
Jeff Johnson295189b2012-06-20 16:38:30 -07006344/*
6345 * FUNCTION: WDA_UpdateProbeRspParamsCallback
6346 * No need to send any response to PE in this case
6347 */
6348void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
6349{
Jeff Johnson295189b2012-06-20 16:38:30 -07006350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006351 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006352 return ;
6353}
6354
Jeff Johnson295189b2012-06-20 16:38:30 -07006355/*
6356 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
6357 * Request to WDI to send the probe response template to HAL to update the TPE memory and
6358 * send probe response
6359 */
6360VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
6361 tSendProbeRespParams *pSendProbeRspParams)
6362{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006363 WDI_Status status = WDI_STATUS_SUCCESS;
6364 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
6365 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006367 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006368
6369 if (!wdiSendProbeRspParam)
6370 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
6371
Jeff Johnson295189b2012-06-20 16:38:30 -07006372 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006373 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07006374 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006375 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07006376 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07006377 /* Copy the Probe Response template to local buffer */
6378 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006379 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07006380 pSendProbeRspParams->pProbeRespTemplate,
6381 pSendProbeRspParams->probeRespTemplateLen);
6382 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006383 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07006384 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
6385 WDI_PROBE_REQ_BITMAP_IE_LEN);
6386
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006387 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006388
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006389 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07006390 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006391 if(IS_WDI_STATUS_FAILURE(status))
6392 {
6393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6394 "Failure in SEND Probe RSP Params WDI API" );
6395 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006396 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006397 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006398 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006399}
Jeff Johnson295189b2012-06-20 16:38:30 -07006400#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
6401/*
6402 * FUNCTION: WDA_SetMaxTxPowerCallBack
6403 * send the response to PE with power value received from WDI
6404 */
6405void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6406 void* pUserData)
6407{
6408 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6409 tWDA_CbContext *pWDA = NULL;
6410 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
6411
6412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006413 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006414 if(NULL == pWdaParams)
6415 {
6416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006417 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006418 VOS_ASSERT(0) ;
6419 return ;
6420 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006421 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6422 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006423 if( NULL == pMaxTxPowerParams )
6424 {
6425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006426 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07006427 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006428 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6429 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006430 return ;
6431 }
Jeff Johnsone7245742012-09-05 17:12:55 -07006432
Jeff Johnson295189b2012-06-20 16:38:30 -07006433
6434 /*need to free memory for the pointers used in the
6435 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07006436 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6437 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006438 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07006439
Jeff Johnson295189b2012-06-20 16:38:30 -07006440
6441 /* send response to UMAC*/
6442 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
6443
6444 return;
6445}
Jeff Johnson295189b2012-06-20 16:38:30 -07006446/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006447 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07006448 * Request to WDI to send set Max Tx Power Request
6449 */
6450 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
6451 tMaxTxPowerParams *MaxTxPowerParams)
6452{
6453 WDI_Status status = WDI_STATUS_SUCCESS;
6454 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
6455 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006456
Jeff Johnson295189b2012-06-20 16:38:30 -07006457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006458 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006459
Jeff Johnson295189b2012-06-20 16:38:30 -07006460 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
6461 sizeof(WDI_SetMaxTxPowerParamsType));
6462 if(NULL == wdiSetMaxTxPowerParams)
6463 {
6464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006465 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006466 VOS_ASSERT(0);
6467 return VOS_STATUS_E_NOMEM;
6468 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006469 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6470 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: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006474 vos_mem_free(wdiSetMaxTxPowerParams);
6475 VOS_ASSERT(0);
6476 return VOS_STATUS_E_NOMEM;
6477 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006478 /* Copy.Max.Tx.Power Params to WDI structure */
6479 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
6480 MaxTxPowerParams->bssId,
6481 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006482 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
6483 MaxTxPowerParams->selfStaMacAddr,
6484 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006485 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
6486 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07006487 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006488 pWdaParams->pWdaContext = pWDA;
6489 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006490 /* store Params pass it to WDI */
6491 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006492 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
6493 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006494 if(IS_WDI_STATUS_FAILURE(status))
6495 {
6496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6497 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
6498 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6499 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006500 /* send response to UMAC*/
6501 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006502 }
6503 return CONVERT_WDI2VOS_STATUS(status);
6504
6505}
Jeff Johnson295189b2012-06-20 16:38:30 -07006506#endif
schang86c22c42013-03-13 18:41:24 -07006507
6508/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07006509 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
6510 * send the response to PE with power value received from WDI
6511 */
6512void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
6513 *pwdiSetMaxTxPowerPerBandRsp,
6514 void* pUserData)
6515{
6516 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6517 tWDA_CbContext *pWDA = NULL;
6518 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
6519
6520 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6521 "<------ %s ", __func__);
6522 if (NULL == pWdaParams)
6523 {
6524 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6525 "%s: pWdaParams received NULL", __func__);
6526 VOS_ASSERT(0);
6527 return ;
6528 }
6529 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6530 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
6531 if ( NULL == pMxTxPwrPerBandParams )
6532 {
6533 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6534 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
6535 VOS_ASSERT(0);
6536 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6537 vos_mem_free(pWdaParams);
6538 return;
6539 }
6540
6541 /*need to free memory for the pointers used in the
6542 WDA Process.Set Max Tx Power Req function*/
6543 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6544 vos_mem_free(pWdaParams);
6545 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
6546
6547 /* send response to UMAC*/
6548 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
6549 pMxTxPwrPerBandParams, 0);
6550
6551 return;
6552}
6553
6554/*
6555 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
6556 * Request to WDI to send set Max Tx Power Per band Request
6557 */
6558 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
6559 tMaxTxPowerPerBandParams
6560 *MaxTxPowerPerBandParams)
6561{
6562 WDI_Status status = WDI_STATUS_SUCCESS;
6563 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
6564 tWDA_ReqParams *pWdaParams = NULL;
6565
6566 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6567 "------> %s ", __func__);
6568
6569 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
6570 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
6571
6572 if (NULL == wdiSetMxTxPwrPerBandParams)
6573 {
6574 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6575 "%s: VOS MEM Alloc Failure", __func__);
6576 VOS_ASSERT(0);
6577 return VOS_STATUS_E_NOMEM;
6578 }
6579 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6580 if (NULL == pWdaParams)
6581 {
6582 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6583 "%s: VOS MEM Alloc Failure", __func__);
6584 vos_mem_free(wdiSetMxTxPwrPerBandParams);
6585 VOS_ASSERT(0);
6586 return VOS_STATUS_E_NOMEM;
6587 }
6588 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
6589 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
6590 MaxTxPowerPerBandParams->bandInfo;
6591 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
6592 MaxTxPowerPerBandParams->power;
6593 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
6594 pWdaParams->pWdaContext = pWDA;
6595 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
6596 /* store Params pass it to WDI */
6597 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
6598 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
6599 WDA_SetMaxTxPowerPerBandCallBack,
6600 pWdaParams);
6601 if (IS_WDI_STATUS_FAILURE(status))
6602 {
6603 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6604 "Failure in SET MAX TX Power REQ Params WDI API,"
6605 " free all the memory");
6606 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6607 vos_mem_free(pWdaParams);
6608 /* send response to UMAC*/
6609 WDA_SendMsg(pWDA,
6610 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
6611 MaxTxPowerPerBandParams, 0);
6612 }
6613 return CONVERT_WDI2VOS_STATUS(status);
6614}
6615
6616/*
schang86c22c42013-03-13 18:41:24 -07006617 * FUNCTION: WDA_SetTxPowerCallBack
6618 * send the response to PE with power value received from WDI
6619 */
6620void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6621 void* pUserData)
6622{
6623 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6624 tWDA_CbContext *pWDA = NULL;
6625 tSirSetTxPowerReq *pTxPowerParams = NULL;
6626
6627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6628 "<------ %s ", __func__);
6629 if(NULL == pWdaParams)
6630 {
6631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6632 "%s: pWdaParams received NULL", __func__);
6633 VOS_ASSERT(0) ;
6634 return ;
6635 }
6636 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6637 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
6638 if(NULL == pTxPowerParams)
6639 {
6640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6641 "%s: pTxPowerParams received NULL " ,__func__);
6642 VOS_ASSERT(0);
6643 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6644 vos_mem_free(pWdaParams);
6645 return ;
6646 }
6647
6648 /*need to free memory for the pointers used in the
6649 WDA Process.Set Max Tx Power Req function*/
6650 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6651 vos_mem_free(pWdaParams);
6652
6653 /* send response to UMAC*/
6654 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
6655 return;
6656}
6657
6658/*
6659 * FUNCTION: WDA_ProcessSetTxPowerReq
6660 * Request to WDI to send set Tx Power Request
6661 */
6662 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
6663 tSirSetTxPowerReq *txPowerParams)
6664{
6665 WDI_Status status = WDI_STATUS_SUCCESS;
6666 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
6667 tWDA_ReqParams *pWdaParams = NULL;
6668
6669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6670 "------> %s ", __func__);
6671
6672 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
6673 sizeof(WDI_SetTxPowerParamsType));
6674 if(NULL == wdiSetTxPowerParams)
6675 {
6676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6677 "%s: VOS MEM Alloc Failure", __func__);
6678 VOS_ASSERT(0);
6679 return VOS_STATUS_E_NOMEM;
6680 }
6681 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6682 if(NULL == pWdaParams)
6683 {
6684 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6685 "%s: VOS MEM Alloc Failure", __func__);
6686 vos_mem_free(wdiSetTxPowerParams);
6687 VOS_ASSERT(0);
6688 return VOS_STATUS_E_NOMEM;
6689 }
6690 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
6691 txPowerParams->bssIdx;
6692 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
6693 txPowerParams->mwPower;
6694 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
6695 pWdaParams->pWdaContext = pWDA;
6696 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
6697 /* store Params pass it to WDI */
6698 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
6699 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
6700 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
6701 if(IS_WDI_STATUS_FAILURE(status))
6702 {
6703 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6704 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
6705 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6706 vos_mem_free(pWdaParams);
6707 /* send response to UMAC*/
6708 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
6709 }
6710 return CONVERT_WDI2VOS_STATUS(status);
6711}
6712
Jeff Johnson295189b2012-06-20 16:38:30 -07006713/*
6714 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
6715 * Free the memory. No need to send any response to PE in this case
6716 */
6717void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
6718{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006719 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6720
Jeff Johnson295189b2012-06-20 16:38:30 -07006721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006722 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006723
6724 if(NULL == pWdaParams)
6725 {
6726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006727 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006728 VOS_ASSERT(0) ;
6729 return ;
6730 }
6731
6732 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6733 vos_mem_free(pWdaParams->wdaMsgParam) ;
6734 vos_mem_free(pWdaParams);
6735
Jeff Johnson295189b2012-06-20 16:38:30 -07006736 /*
6737 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
6738 * so just free the request param here
6739 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006740 return ;
6741}
6742
Jeff Johnson295189b2012-06-20 16:38:30 -07006743/*
6744 * FUNCTION: WDA_ProcessSetP2PGONOAReq
6745 * Request to WDI to set the P2P Group Owner Notice of Absence Req
6746 */
6747VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
6748 tP2pPsParams *pP2pPsConfigParams)
6749{
6750 WDI_Status status = WDI_STATUS_SUCCESS ;
6751 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
6752 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
6753 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006754 tWDA_ReqParams *pWdaParams = NULL;
6755
Jeff Johnson295189b2012-06-20 16:38:30 -07006756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006757 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006758 if(NULL == wdiSetP2PGONOAReqParam)
6759 {
6760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006761 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006762 VOS_ASSERT(0);
6763 return VOS_STATUS_E_NOMEM;
6764 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006765
6766 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6767 if(NULL == pWdaParams)
6768 {
6769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006770 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006771 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006772 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006773 VOS_ASSERT(0);
6774 return VOS_STATUS_E_NOMEM;
6775 }
6776
Jeff Johnson295189b2012-06-20 16:38:30 -07006777 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
6778 pP2pPsConfigParams->opp_ps;
6779 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
6780 pP2pPsConfigParams->ctWindow;
6781 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
6782 pP2pPsConfigParams->count;
6783 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
6784 pP2pPsConfigParams->duration;
6785 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
6786 pP2pPsConfigParams->interval;
6787 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
6788 pP2pPsConfigParams->single_noa_duration;
6789 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
6790 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006791
Jeff Johnson295189b2012-06-20 16:38:30 -07006792 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
6793 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006794 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
6795
Jeff Johnson295189b2012-06-20 16:38:30 -07006796 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006797 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
6798 pWdaParams->pWdaContext = pWDA;
6799
Jeff Johnson295189b2012-06-20 16:38:30 -07006800 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006801 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
6802
Jeff Johnson295189b2012-06-20 16:38:30 -07006803 if(IS_WDI_STATUS_FAILURE(status))
6804 {
6805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6806 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006807 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6808 vos_mem_free(pWdaParams->wdaMsgParam);
6809 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006810 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006811 return CONVERT_WDI2VOS_STATUS(status);
6812
Jeff Johnson295189b2012-06-20 16:38:30 -07006813}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306814
6815#ifdef FEATURE_WLAN_TDLS
6816/*
6817 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
6818 * Free the memory. No need to send any response to PE in this case
6819 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306820void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
6821 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306822{
6823 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6824 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306825 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306826
6827
6828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6829 "<------ %s " ,__func__);
6830 if(NULL == pWdaParams)
6831 {
6832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6833 "%s: pWdaParams received NULL", __func__);
6834 VOS_ASSERT(0) ;
6835 return ;
6836 }
6837 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6838
6839 if(NULL == pWdaParams)
6840 {
6841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6842 "%s: pWdaParams received NULL", __func__);
6843 VOS_ASSERT(0) ;
6844 return ;
6845 }
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306846 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
6847 if( NULL == pTdlsLinkEstablishParams )
6848 {
6849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6850 "%s: pTdlsLinkEstablishParams "
6851 "received NULL " ,__func__);
6852 VOS_ASSERT(0);
6853 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6854 vos_mem_free(pWdaParams);
6855 return ;
6856 }
6857 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
6858 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306859 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306860 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306861 /* send response to UMAC*/
6862 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
6863
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306864 return ;
6865}
6866
6867VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
6868 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
6869{
6870 WDI_Status status = WDI_STATUS_SUCCESS ;
6871 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
6872 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
6873 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
6874 tWDA_ReqParams *pWdaParams = NULL;
6875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6876 "------> %s " ,__func__);
6877 if(NULL == wdiSetTDLSLinkEstablishReqParam)
6878 {
6879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6880 "%s: VOS MEM Alloc Failure", __func__);
6881 VOS_ASSERT(0);
6882 return VOS_STATUS_E_NOMEM;
6883 }
6884 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6885 if(NULL == pWdaParams)
6886 {
6887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6888 "%s: VOS MEM Alloc Failure", __func__);
6889 vos_mem_free(pTdlsLinkEstablishParams);
6890 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
6891 VOS_ASSERT(0);
6892 return VOS_STATUS_E_NOMEM;
6893 }
6894 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306895 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306896 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306897 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306898 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306899 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306900 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306901 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306902 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306903 pTdlsLinkEstablishParams->isBufsta;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306904
6905 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
6906 /* Store msg pointer from PE, as this will be used for response */
6907 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
6908 /* store Params pass it to WDI */
6909 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
6910 pWdaParams->pWdaContext = pWDA;
6911
6912 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
6913 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
6914 WDA_SetTDLSLinkEstablishReqParamsCallback,
6915 pWdaParams);
6916 if(IS_WDI_STATUS_FAILURE(status))
6917 {
6918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6919 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
6920 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6921 vos_mem_free(pWdaParams->wdaMsgParam);
6922 vos_mem_free(pWdaParams);
6923 }
6924 return CONVERT_WDI2VOS_STATUS(status);
6925}
6926#endif
6927
6928
Jeff Johnson295189b2012-06-20 16:38:30 -07006929#ifdef WLAN_FEATURE_VOWIFI_11R
6930/*
6931 * FUNCTION: WDA_AggrAddTSReqCallback
6932 * send ADD AGGREGATED TS RSP back to PE
6933 */
6934void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
6935{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006936 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6937 tWDA_CbContext *pWDA;
6938 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006939 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07006940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006941 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006942 if(NULL == pWdaParams)
6943 {
6944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006945 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006946 VOS_ASSERT(0) ;
6947 return ;
6948 }
6949
6950 pWDA = pWdaParams->pWdaContext;
6951 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006952
6953 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6954 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006955 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006956 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006957 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006958
6959 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6960 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006961 return ;
6962}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07006963/*
6964 * FUNCTION: WDA_ProcessAddTSReq
6965 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
6966 */
6967VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
6968 tAggrAddTsParams *pAggrAddTsReqParams)
6969{
6970 WDI_Status status = WDI_STATUS_SUCCESS ;
6971 int i;
6972 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006973 tWDA_ReqParams *pWdaParams = NULL;
6974
6975
Jeff Johnson295189b2012-06-20 16:38:30 -07006976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006977 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006978 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
6979 sizeof(WDI_AggrAddTSReqParamsType)) ;
6980 if(NULL == wdiAggrAddTSReqParam)
6981 {
6982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006983 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006984 VOS_ASSERT(0);
6985 return VOS_STATUS_E_NOMEM;
6986 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006987
6988
6989 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6990 if(NULL == pWdaParams)
6991 {
6992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006993 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006994 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006995 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006996 VOS_ASSERT(0);
6997 return VOS_STATUS_E_NOMEM;
6998 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006999 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
7000 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
7001 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007002 for( i = 0; i < WDI_MAX_NO_AC; i++ )
7003 {
7004 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
7005 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
7006 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07007007 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
7008 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
7009 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
7010 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
7011 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
7012 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
7013 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
7014 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
7015 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
7016 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
7017 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
7018 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
7019 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
7020 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
7021 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
7022 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07007023 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
7024 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07007025 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
7026 pAggrAddTsReqParams->tspec[i].nomMsduSz;
7027 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
7028 pAggrAddTsReqParams->tspec[i].maxMsduSz;
7029 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
7030 pAggrAddTsReqParams->tspec[i].minSvcInterval;
7031 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
7032 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
7033 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
7034 pAggrAddTsReqParams->tspec[i].inactInterval;
7035 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
7036 pAggrAddTsReqParams->tspec[i].suspendInterval;
7037 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
7038 pAggrAddTsReqParams->tspec[i].svcStartTime;
7039 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
7040 pAggrAddTsReqParams->tspec[i].minDataRate;
7041 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
7042 pAggrAddTsReqParams->tspec[i].meanDataRate;
7043 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
7044 pAggrAddTsReqParams->tspec[i].peakDataRate;
7045 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
7046 pAggrAddTsReqParams->tspec[i].maxBurstSz;
7047 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
7048 pAggrAddTsReqParams->tspec[i].delayBound;
7049 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
7050 pAggrAddTsReqParams->tspec[i].minPhyRate;
7051 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
7052 pAggrAddTsReqParams->tspec[i].surplusBw;
7053 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
7054 pAggrAddTsReqParams->tspec[i].mediumTime;
7055 }
7056
7057 /* TODO: tAggrAddTsParams doesn't have the following fields */
7058#if 0
7059 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
7060 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
7061 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
7062 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
7063#endif
7064 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
7065
7066 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007067 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007068 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007069 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
7070
7071 pWdaParams->pWdaContext = pWDA;
7072
Jeff Johnson295189b2012-06-20 16:38:30 -07007073 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007074 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
7075
Jeff Johnson295189b2012-06-20 16:38:30 -07007076 if(IS_WDI_STATUS_FAILURE(status))
7077 {
7078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7079 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007080 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7081 vos_mem_free(pWdaParams);
7082
7083 /* send the failure response back to PE*/
7084 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
7085 {
7086 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
7087 }
7088
7089 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
7090 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007091 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007092 return CONVERT_WDI2VOS_STATUS(status) ;
7093}
7094#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07007095/*
7096 * FUNCTION: WDA_EnterImpsReqCallback
7097 * send Enter IMPS RSP back to PE
7098 */
7099void WDA_EnterImpsReqCallback(WDI_Status status, void* pUserData)
7100{
7101 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007103 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007104 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007105 return ;
7106}
Jeff Johnson295189b2012-06-20 16:38:30 -07007107/*
7108 * FUNCTION: WDA_ProcessEnterImpsReq
7109 * Request to WDI to Enter IMPS power state.
7110 */
7111VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
7112{
7113 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007115 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007116 status = WDI_EnterImpsReq((WDI_EnterImpsRspCb)WDA_EnterImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007117 if(IS_WDI_STATUS_FAILURE(status))
7118 {
7119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7120 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007121 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007122 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007123 return CONVERT_WDI2VOS_STATUS(status) ;
7124}
Jeff Johnson295189b2012-06-20 16:38:30 -07007125/*
7126 * FUNCTION: WDA_ExitImpsReqCallback
7127 * send Exit IMPS RSP back to PE
7128 */
7129void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
7130{
7131 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007133 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007134 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007135 return ;
7136}
Jeff Johnson295189b2012-06-20 16:38:30 -07007137/*
7138 * FUNCTION: WDA_ProcessExitImpsReq
7139 * Request to WDI to Exit IMPS power state.
7140 */
7141VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
7142{
7143 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007145 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007146 status = WDI_ExitImpsReq((WDI_ExitImpsRspCb)WDA_ExitImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007147 if(IS_WDI_STATUS_FAILURE(status))
7148 {
7149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7150 "Failure in Exit IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007151 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007152 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007153 return CONVERT_WDI2VOS_STATUS(status) ;
7154}
Jeff Johnson295189b2012-06-20 16:38:30 -07007155/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007156 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007157 * send Enter BMPS RSP back to PE
7158 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007159void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007160{
7161 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7162 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007163 tEnterBmpsParams *pEnterBmpsRspParams;
7164
Jeff Johnson295189b2012-06-20 16:38:30 -07007165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007166 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007167 if(NULL == pWdaParams)
7168 {
7169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007170 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007171 VOS_ASSERT(0) ;
7172 return ;
7173 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007174
7175 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7176 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
7177
7178 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007179 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007180
7181 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007182 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007183 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
7184
Jeff Johnson295189b2012-06-20 16:38:30 -07007185 return ;
7186}
Jeff Johnson295189b2012-06-20 16:38:30 -07007187/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007188 * FUNCTION: WDA_EnterBmpsReqCallback
7189 * Free memory and send Enter BMPS RSP back to PE.
7190 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
7191 */
7192void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7193{
7194 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7195 tWDA_CbContext *pWDA;
7196 tEnterBmpsParams *pEnterBmpsRspParams;
7197
7198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7199 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7200
7201 if(NULL == pWdaParams)
7202 {
7203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7204 "%s: pWdaParams received NULL", __func__);
7205 VOS_ASSERT(0);
7206 return;
7207 }
7208
7209 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7210 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
7211 pEnterBmpsRspParams->status = wdiStatus;
7212
7213 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7214 {
7215 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7216 vos_mem_free(pWdaParams);
7217 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
7218 }
7219
7220 return;
7221}
7222/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007223 * FUNCTION: WDA_ProcessEnterBmpsReq
7224 * Request to WDI to Enter BMPS power state.
7225 */
7226VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
7227 tEnterBmpsParams *pEnterBmpsReqParams)
7228{
7229 WDI_Status status = WDI_STATUS_SUCCESS;
7230 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
7231 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007233 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007234 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
7235 {
7236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007237 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007238 VOS_ASSERT(0);
7239 return VOS_STATUS_E_FAILURE;
7240 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007241 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
7242 if (NULL == wdiEnterBmpsReqParams)
7243 {
7244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007245 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007246 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007247 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
7248 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007249 return VOS_STATUS_E_NOMEM;
7250 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007251 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7252 if (NULL == pWdaParams)
7253 {
7254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007255 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007256 VOS_ASSERT(0);
7257 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007258 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
7259 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007260 return VOS_STATUS_E_NOMEM;
7261 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007262 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
7263 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
7264 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
7265 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Jeff Johnson295189b2012-06-20 16:38:30 -07007266 // For CCX and 11R Roaming
7267 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
7268 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
7269 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007270 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
7271 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007272
Jeff Johnson295189b2012-06-20 16:38:30 -07007273 /* Store param pointer as passed in by caller */
7274 /* store Params pass it to WDI */
7275 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007276 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007277 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007278 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007279 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007280 if (IS_WDI_STATUS_FAILURE(status))
7281 {
7282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7283 "Failure in Enter BMPS REQ WDI API, free all the memory" );
7284 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007285 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007286 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007287 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007288 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007289 return CONVERT_WDI2VOS_STATUS(status);
7290}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007291
7292
7293static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
7294 WDI_Status wdiStatus,
7295 tExitBmpsParams *pExitBmpsReqParams)
7296{
7297 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
7298
7299 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
7300}
7301
7302
Jeff Johnson295189b2012-06-20 16:38:30 -07007303/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007304 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007305 * send Exit BMPS RSP back to PE
7306 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007307void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007308{
7309 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7310 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007311 tExitBmpsParams *pExitBmpsRspParams;
7312
Jeff Johnson295189b2012-06-20 16:38:30 -07007313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007314 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007315 if(NULL == pWdaParams)
7316 {
7317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007318 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007319 VOS_ASSERT(0) ;
7320 return ;
7321 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007322
7323 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7324 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
7325
7326 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007327 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007328
Jeff Johnson295189b2012-06-20 16:38:30 -07007329 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7330 vos_mem_free(pWdaParams) ;
7331
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007332 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007333 return ;
7334}
Jeff Johnson295189b2012-06-20 16:38:30 -07007335/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007336 * FUNCTION: WDA_ExitBmpsReqCallback
7337 * Free memory and send Exit BMPS RSP back to PE.
7338 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
7339 */
7340void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7341{
7342 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7343 tWDA_CbContext *pWDA;
7344 tExitBmpsParams *pExitBmpsRspParams;
7345
7346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7347 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7348
7349 if(NULL == pWdaParams)
7350 {
7351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7352 "%s: pWdaParams received NULL", __func__);
7353 VOS_ASSERT(0);
7354 return;
7355 }
7356
7357 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7358 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
7359 pExitBmpsRspParams->status = wdiStatus;
7360
7361 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7362 {
7363 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7364 vos_mem_free(pWdaParams);
7365 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
7366 }
7367
7368 return;
7369}
7370/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007371 * FUNCTION: WDA_ProcessExitBmpsReq
7372 * Request to WDI to Exit BMPS power state.
7373 */
7374VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
7375 tExitBmpsParams *pExitBmpsReqParams)
7376{
7377 WDI_Status status = WDI_STATUS_SUCCESS ;
7378 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
7379 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
7380 sizeof(WDI_ExitBmpsReqParamsType)) ;
7381 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007383 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007384 if(NULL == wdiExitBmpsReqParams)
7385 {
7386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007387 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007388 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007389 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007390 return VOS_STATUS_E_NOMEM;
7391 }
7392 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7393 if(NULL == pWdaParams)
7394 {
7395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007396 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007397 VOS_ASSERT(0);
7398 vos_mem_free(wdiExitBmpsReqParams);
7399 return VOS_STATUS_E_NOMEM;
7400 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007401 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07007402
7403 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
7404
Yue Ma7f44bbe2013-04-12 11:47:39 -07007405 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
7406 wdiExitBmpsReqParams->pUserData = pWdaParams;
7407
Jeff Johnson295189b2012-06-20 16:38:30 -07007408 /* Store param pointer as passed in by caller */
7409 /* store Params pass it to WDI */
7410 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
7411 pWdaParams->pWdaContext = pWDA;
7412 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007413 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007414 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007415 if(IS_WDI_STATUS_FAILURE(status))
7416 {
7417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7418 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007419 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7420 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007421 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007422 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007423 return CONVERT_WDI2VOS_STATUS(status) ;
7424}
Jeff Johnson295189b2012-06-20 16:38:30 -07007425/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007426 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007427 * send Enter UAPSD RSP back to PE
7428 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007429void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007430{
7431 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7432 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007433 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007435 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007436 if(NULL == pWdaParams)
7437 {
7438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007439 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007440 VOS_ASSERT(0) ;
7441 return ;
7442 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007443
7444 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7445 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
7446
7447 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007448 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007449
Jeff Johnson295189b2012-06-20 16:38:30 -07007450 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7451 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007452 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007453 return ;
7454}
Jeff Johnson295189b2012-06-20 16:38:30 -07007455/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007456 * FUNCTION: WDA_EnterUapsdReqCallback
7457 * Free memory and send Enter UAPSD RSP back to PE.
7458 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
7459 */
7460void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
7461{
7462 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7463 tWDA_CbContext *pWDA;
7464 tUapsdParams *pEnterUapsdRsqParams;
7465
7466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7467 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7468
7469 if(NULL == pWdaParams)
7470 {
7471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7472 "%s: pWdaParams received NULL", __func__);
7473 VOS_ASSERT(0);
7474 return;
7475 }
7476
7477 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7478 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
7479 pEnterUapsdRsqParams->status = wdiStatus;
7480
7481 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7482 {
7483 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7484 vos_mem_free(pWdaParams);
7485 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
7486 }
7487
7488 return;
7489}
7490/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007491 * FUNCTION: WDA_ProcessEnterUapsdReq
7492 * Request to WDI to Enter UAPSD power state.
7493 */
7494VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
7495 tUapsdParams *pEnterUapsdReqParams)
7496{
7497 WDI_Status status = WDI_STATUS_SUCCESS ;
7498 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
7499 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
7500 sizeof(WDI_EnterUapsdReqParamsType)) ;
7501 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007503 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007504 if(NULL == wdiEnterUapsdReqParams)
7505 {
7506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007507 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007508 VOS_ASSERT(0);
7509 return VOS_STATUS_E_NOMEM;
7510 }
7511 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7512 if(NULL == pWdaParams)
7513 {
7514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007515 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007516 VOS_ASSERT(0);
7517 vos_mem_free(wdiEnterUapsdReqParams);
7518 return VOS_STATUS_E_NOMEM;
7519 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007520 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
7521 pEnterUapsdReqParams->beDeliveryEnabled;
7522 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
7523 pEnterUapsdReqParams->beTriggerEnabled;
7524 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
7525 pEnterUapsdReqParams->bkDeliveryEnabled;
7526 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
7527 pEnterUapsdReqParams->bkTriggerEnabled;
7528 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
7529 pEnterUapsdReqParams->viDeliveryEnabled;
7530 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
7531 pEnterUapsdReqParams->viTriggerEnabled;
7532 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
7533 pEnterUapsdReqParams->voDeliveryEnabled;
7534 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
7535 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07007536 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007537
Yue Ma7f44bbe2013-04-12 11:47:39 -07007538 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
7539 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007540
Jeff Johnson295189b2012-06-20 16:38:30 -07007541 /* Store param pointer as passed in by caller */
7542 /* store Params pass it to WDI */
7543 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
7544 pWdaParams->pWdaContext = pWDA;
7545 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007546 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007547 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007548 if(IS_WDI_STATUS_FAILURE(status))
7549 {
7550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7551 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
7552 vos_mem_free(pWdaParams->wdaMsgParam) ;
7553 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7554 vos_mem_free(pWdaParams) ;
7555 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007556 return CONVERT_WDI2VOS_STATUS(status) ;
7557}
Jeff Johnson295189b2012-06-20 16:38:30 -07007558/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007559 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007560 * send Exit UAPSD RSP back to PE
7561 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007562void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007563{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007564
7565 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7566 tWDA_CbContext *pWDA;
7567 tExitUapsdParams *pExitUapsdRspParams;
7568
Jeff Johnson295189b2012-06-20 16:38:30 -07007569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007570 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007571 if(NULL == pWdaParams)
7572 {
7573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007574 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007575 VOS_ASSERT(0);
7576 return;
7577 }
7578
7579 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7580 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
7581
7582 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007583 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007584
7585 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7586 vos_mem_free(pWdaParams) ;
7587
7588 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007589 return ;
7590}
Jeff Johnson295189b2012-06-20 16:38:30 -07007591/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007592 * FUNCTION: WDA_ExitUapsdReqCallback
7593 * Free memory and send Exit UAPSD RSP back to PE.
7594 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
7595 */
7596void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
7597{
7598 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7599 tWDA_CbContext *pWDA;
7600 tExitUapsdParams *pExitUapsdRspParams;
7601
7602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7603 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7604
7605 if(NULL == pWdaParams)
7606 {
7607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7608 "%s: pWdaParams received NULL", __func__);
7609 VOS_ASSERT(0);
7610 return;
7611 }
7612
7613 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7614 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
7615 pExitUapsdRspParams->status = wdiStatus;
7616
7617 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7618 {
7619 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7620 vos_mem_free(pWdaParams);
7621 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
7622 }
7623
7624 return;
7625}
7626/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007627 * FUNCTION: WDA_ProcessExitUapsdReq
7628 * Request to WDI to Exit UAPSD power state.
7629 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007630VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
7631 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007632{
7633 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007634 tWDA_ReqParams *pWdaParams ;
7635 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
7636 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
7637 sizeof(WDI_ExitUapsdReqParamsType)) ;
7638
Jeff Johnson295189b2012-06-20 16:38:30 -07007639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007640 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007641
7642 if(NULL == wdiExitUapsdReqParams)
7643 {
7644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007645 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007646 VOS_ASSERT(0);
7647 return VOS_STATUS_E_NOMEM;
7648 }
7649 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7650 if(NULL == pWdaParams)
7651 {
7652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007653 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007654 VOS_ASSERT(0);
7655 vos_mem_free(wdiExitUapsdReqParams);
7656 return VOS_STATUS_E_NOMEM;
7657 }
7658
7659 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007660 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
7661 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007662
7663 /* Store param pointer as passed in by caller */
7664 /* store Params pass it to WDI */
7665 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
7666 pWdaParams->pWdaContext = pWDA;
7667 pWdaParams->wdaMsgParam = pExitUapsdParams;
7668
Yue Ma7f44bbe2013-04-12 11:47:39 -07007669 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007670 if(IS_WDI_STATUS_FAILURE(status))
7671 {
7672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7673 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007674 vos_mem_free(pWdaParams->wdaMsgParam) ;
7675 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7676 vos_mem_free(pWdaParams) ;
7677
Jeff Johnson295189b2012-06-20 16:38:30 -07007678 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007679 return CONVERT_WDI2VOS_STATUS(status) ;
7680}
7681
Jeff Johnson295189b2012-06-20 16:38:30 -07007682/*
7683 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
7684 *
7685 */
7686void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
7687{
7688 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007690 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007691 if(NULL == pWdaParams)
7692 {
7693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007694 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007695 VOS_ASSERT(0) ;
7696 return ;
7697 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007698 if( pWdaParams != NULL )
7699 {
7700 if( pWdaParams->wdaWdiApiMsgParam != NULL )
7701 {
7702 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7703 }
7704 if( pWdaParams->wdaMsgParam != NULL )
7705 {
7706 vos_mem_free(pWdaParams->wdaMsgParam) ;
7707 }
7708 vos_mem_free(pWdaParams) ;
7709 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007710 return ;
7711}
Jeff Johnson295189b2012-06-20 16:38:30 -07007712/*
7713 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
7714 * Request to WDI to set the power save params at start.
7715 */
7716VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
7717 tSirPowerSaveCfg *pPowerSaveCfg)
7718{
7719 WDI_Status status = WDI_STATUS_SUCCESS ;
7720 tHalCfg *tlvStruct = NULL ;
7721 tANI_U8 *tlvStructStart = NULL ;
7722 v_PVOID_t *configParam;
7723 tANI_U32 configParamSize;
7724 tANI_U32 *configDataValue;
7725 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
7726 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007728 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007729 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
7730 {
7731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007732 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007733 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007734 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007735 return VOS_STATUS_E_FAILURE;
7736 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007737 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
7738 if (NULL == wdiPowerSaveCfg)
7739 {
7740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007741 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007742 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007743 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007744 return VOS_STATUS_E_NOMEM;
7745 }
7746 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7747 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: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007751 VOS_ASSERT(0);
7752 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007753 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007754 return VOS_STATUS_E_NOMEM;
7755 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007756 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
7757 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07007758 if(NULL == configParam)
7759 {
7760 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007761 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007762 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07007763 vos_mem_free(pWdaParams);
7764 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007765 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007766 return VOS_STATUS_E_NOMEM;
7767 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007768 vos_mem_set(configParam, configParamSize, 0);
7769 wdiPowerSaveCfg->pConfigBuffer = configParam;
7770 tlvStruct = (tHalCfg *)configParam;
7771 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007772 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
7773 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
7774 tlvStruct->length = sizeof(tANI_U32);
7775 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7776 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07007777 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7778 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007779 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
7780 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
7781 tlvStruct->length = sizeof(tANI_U32);
7782 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7783 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07007784 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7785 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007786 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
7787 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
7788 tlvStruct->length = sizeof(tANI_U32);
7789 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7790 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07007791 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7792 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007793 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
7794 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
7795 tlvStruct->length = sizeof(tANI_U32);
7796 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7797 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07007798 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7799 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007800 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
7801 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
7802 tlvStruct->length = sizeof(tANI_U32);
7803 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7804 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07007805 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7806 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007807 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
7808 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
7809 tlvStruct->length = sizeof(tANI_U32);
7810 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7811 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07007812 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7813 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007814 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
7815 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
7816 tlvStruct->length = sizeof(tANI_U32);
7817 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7818 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07007819 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7820 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007821 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
7822 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
7823 tlvStruct->length = sizeof(tANI_U32);
7824 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7825 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
7826 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7827 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007828 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
7829 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
7830 tlvStruct->length = sizeof(tANI_U32);
7831 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7832 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
7833 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7834 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007835 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
7836 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
7837 tlvStruct->length = sizeof(tANI_U32);
7838 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7839 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
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_RSSI_FILTER_PERIOD */
7843 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
7844 tlvStruct->length = sizeof(tANI_U32);
7845 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7846 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
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 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007850 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007851 /* store Params pass it to WDI */
7852 pWdaParams->wdaMsgParam = configParam;
7853 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
7854 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007855 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
7856 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007857 if(IS_WDI_STATUS_FAILURE(status))
7858 {
7859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7860 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
7861 vos_mem_free(pWdaParams->wdaMsgParam);
7862 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7863 vos_mem_free(pWdaParams);
7864 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007865 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007866 return CONVERT_WDI2VOS_STATUS(status);
7867}
Jeff Johnson295189b2012-06-20 16:38:30 -07007868/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007869 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007870 *
7871 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007872void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007873{
Yue Ma7f44bbe2013-04-12 11:47:39 -07007874 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7875
Jeff Johnson295189b2012-06-20 16:38:30 -07007876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007877 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -07007878
7879 if(NULL == pWdaParams)
7880 {
7881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7882 "%s: pWdaParams received NULL", __func__);
7883 VOS_ASSERT(0);
7884 return ;
7885 }
7886
7887 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007888 vos_mem_free(pWdaParams);
7889
Jeff Johnson295189b2012-06-20 16:38:30 -07007890 return ;
7891}
Jeff Johnson295189b2012-06-20 16:38:30 -07007892/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007893 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
7894 * Free memory.
7895 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
7896 */
7897void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
7898{
7899 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7900
7901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7902 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7903
7904 if(NULL == pWdaParams)
7905 {
7906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7907 "%s: pWdaParams received NULL", __func__);
7908 VOS_ASSERT(0);
7909 return;
7910 }
7911
7912 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7913 {
7914 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7915 vos_mem_free(pWdaParams);
7916 }
7917
7918 return;
7919}
7920/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007921 * FUNCTION: WDA_SetUapsdAcParamsReq
7922 * Request to WDI to set the UAPSD params for an ac (sta mode).
7923 */
7924VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
7925 tUapsdInfo *pUapsdInfo)
7926{
7927 WDI_Status status = WDI_STATUS_SUCCESS;
7928 tWDA_CbContext *pWDA = NULL ;
7929 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
7930 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
7931 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
7932 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007934 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007935 if(NULL == wdiUapsdParams)
7936 {
7937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007938 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007939 VOS_ASSERT(0);
7940 return VOS_STATUS_E_NOMEM;
7941 }
7942 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7943 if(NULL == pWdaParams)
7944 {
7945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007946 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007947 VOS_ASSERT(0);
7948 vos_mem_free(wdiUapsdParams);
7949 return VOS_STATUS_E_NOMEM;
7950 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007951 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
7952 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
7953 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
7954 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
7955 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
7956 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007957 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
7958 wdiUapsdParams->pUserData = pWdaParams;
7959
Jeff Johnson295189b2012-06-20 16:38:30 -07007960 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07007961 pWdaParams->pWdaContext = pWDA;
7962 /* Store param pointer as passed in by caller */
7963 pWdaParams->wdaMsgParam = pUapsdInfo;
7964 /* store Params pass it to WDI */
7965 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007966 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007967 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07007968 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007969 if(IS_WDI_STATUS_FAILURE(status))
7970 {
7971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7972 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
7973 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7974 vos_mem_free(pWdaParams);
7975 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007976 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
7977 return VOS_STATUS_SUCCESS;
7978 else
7979 return VOS_STATUS_E_FAILURE;
7980
Jeff Johnson295189b2012-06-20 16:38:30 -07007981}
7982/*
7983 * FUNCTION: WDA_ClearUapsdAcParamsReq
7984 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
7985 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
7986 * and again enter the UPASD with the modified params. Hence the disable
7987 * function was kept empty.
7988 *
7989 */
7990VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
7991{
7992 /* do nothing */
7993 return VOS_STATUS_SUCCESS;
7994}
Jeff Johnson295189b2012-06-20 16:38:30 -07007995/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007996 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007997 *
7998 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007999void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008000{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008001 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8002
Jeff Johnson295189b2012-06-20 16:38:30 -07008003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008004 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008005
8006 if(NULL == pWdaParams)
8007 {
8008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008009 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008010 VOS_ASSERT(0) ;
8011 return ;
8012 }
8013
8014 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8015 vos_mem_free(pWdaParams->wdaMsgParam);
8016 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008017
Jeff Johnson295189b2012-06-20 16:38:30 -07008018 //print a msg, nothing else to do
8019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008020 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008021 return ;
8022}
Jeff Johnson295189b2012-06-20 16:38:30 -07008023/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008024 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
8025 * Free memory.
8026 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
8027 */
8028void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
8029{
8030 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8031
8032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8033 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8034
8035 if(NULL == pWdaParams)
8036 {
8037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8038 "%s: pWdaParams received NULL", __func__);
8039 VOS_ASSERT(0);
8040 return;
8041 }
8042
8043 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8044 {
8045 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8046 vos_mem_free(pWdaParams->wdaMsgParam);
8047 vos_mem_free(pWdaParams);
8048 }
8049
8050 return;
8051}
8052/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008053 * FUNCTION: WDA_UpdateUapsdParamsReq
8054 * Request to WDI to update UAPSD params (in softAP mode) for a station.
8055 */
8056VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
8057 tUpdateUapsdParams* pUpdateUapsdInfo)
8058{
8059 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008060 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008061 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
8062 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
8063 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008064 tWDA_ReqParams *pWdaParams = NULL;
8065
Jeff Johnson295189b2012-06-20 16:38:30 -07008066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008067 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008068 if(NULL == wdiUpdateUapsdParams)
8069 {
8070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008071 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008072 VOS_ASSERT(0);
8073 return VOS_STATUS_E_NOMEM;
8074 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008075 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
8076 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
8077 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008078 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
8079 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008080
8081 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8082 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008083 {
8084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008085 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008086 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008087 vos_mem_free(pUpdateUapsdInfo);
8088 vos_mem_free(wdiUpdateUapsdParams);
8089 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07008090 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008091 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008092 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07008093 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008094 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
8095 pWdaParams->pWdaContext = pWDA;
8096
Jeff Johnson43971f52012-07-17 12:26:56 -07008097 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008098 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008099 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008100
Jeff Johnson43971f52012-07-17 12:26:56 -07008101 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008102 {
8103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8104 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008105 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
8106 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8107 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008108 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008109 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008110 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008111}
Jeff Johnson295189b2012-06-20 16:38:30 -07008112/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008113 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008114 *
8115 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008116void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008117{
8118 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008120 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008121 if(WDI_STATUS_SUCCESS != wdiStatus)
8122 {
8123 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08008124 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008125 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008126 if(NULL == pWdaParams)
8127 {
8128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008129 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008130 VOS_ASSERT(0) ;
8131 return ;
8132 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008133 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8134 vos_mem_free(pWdaParams->wdaMsgParam);
8135 vos_mem_free(pWdaParams);
8136 return ;
8137}
Jeff Johnson295189b2012-06-20 16:38:30 -07008138/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008139 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
8140 * Free memory.
8141 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
8142 */
8143void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8144{
8145 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8146
8147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8148 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8149
8150 if(NULL == pWdaParams)
8151 {
8152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8153 "%s: pWdaParams received NULL", __func__);
8154 VOS_ASSERT(0);
8155 return;
8156 }
8157
8158 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8159 {
8160 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8161 vos_mem_free(pWdaParams->wdaMsgParam);
8162 vos_mem_free(pWdaParams);
8163 }
8164
8165 return;
8166}
8167/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008168 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
8169 *
8170 */
8171VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
8172 tSirWlanSetRxpFilters *pWlanSuspendParam)
8173{
Jeff Johnson295189b2012-06-20 16:38:30 -07008174 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008175 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008176 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams =
8177 (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
8178 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
8179 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008181 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008182 if(NULL == wdiRxpFilterParams)
8183 {
8184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008185 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008186 VOS_ASSERT(0);
8187 vos_mem_free(pWlanSuspendParam);
8188 return VOS_STATUS_E_NOMEM;
8189 }
8190 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8191 if(NULL == pWdaParams)
8192 {
8193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008194 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008195 VOS_ASSERT(0);
8196 vos_mem_free(wdiRxpFilterParams);
8197 vos_mem_free(pWlanSuspendParam);
8198 return VOS_STATUS_E_NOMEM;
8199 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008200 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
8201 pWlanSuspendParam->setMcstBcstFilter;
8202 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
8203 pWlanSuspendParam->configuredMcstBcstFilterSetting;
8204
Yue Ma7f44bbe2013-04-12 11:47:39 -07008205 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
8206 wdiRxpFilterParams->pUserData = pWdaParams;
8207
Jeff Johnson295189b2012-06-20 16:38:30 -07008208 pWdaParams->pWdaContext = pWDA;
8209 pWdaParams->wdaMsgParam = pWlanSuspendParam;
8210 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008211 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008212 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07008213 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008214 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008215 {
8216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8217 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008218 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008219 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8220 vos_mem_free(pWdaParams->wdaMsgParam);
8221 vos_mem_free(pWdaParams);
8222 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008223 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008224}
Jeff Johnson295189b2012-06-20 16:38:30 -07008225/*
8226 * FUNCTION: WDA_WdiIndicationCallback
8227 *
8228 */
8229void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
8230 void* pUserData)
8231{
8232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008233 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008234}
Jeff Johnson295189b2012-06-20 16:38:30 -07008235/*
8236 * FUNCTION: WDA_ProcessWlanSuspendInd
8237 *
8238 */
8239VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
8240 tSirWlanSuspendParam *pWlanSuspendParam)
8241{
8242 WDI_Status wdiStatus;
8243 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008245 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008246 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
8247 pWlanSuspendParam->configuredMcstBcstFilterSetting;
8248 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
8249 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07008251 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
8252 if(WDI_STATUS_PENDING == wdiStatus)
8253 {
8254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008255 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008256 }
8257 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
8258 {
8259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008260 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008261 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008262 vos_mem_free(pWlanSuspendParam);
8263 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8264}
8265
Chet Lanctot186b5732013-03-18 10:26:30 -07008266#ifdef WLAN_FEATURE_11W
8267/*
8268 * FUNCTION: WDA_ProcessExcludeUnecryptInd
8269 *
8270 */
8271VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
8272 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
8273{
8274 WDI_Status wdiStatus;
8275 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
8276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8277 "------> %s ", __func__);
8278
8279 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
8280 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
8281 sizeof(tSirMacAddr));
8282
8283 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
8284 wdiExclUnencryptParams.pUserData = pWDA;
8285
8286 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
8287 if(WDI_STATUS_PENDING == wdiStatus)
8288 {
8289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8290 "Pending received for %s:%d ", __func__, __LINE__ );
8291 }
8292 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
8293 {
8294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8295 "Failure in %s:%d ", __func__, __LINE__ );
8296 }
8297 vos_mem_free(pExclUnencryptParam);
8298 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8299}
8300#endif
8301
Jeff Johnson295189b2012-06-20 16:38:30 -07008302/*
8303 * FUNCTION: WDA_ProcessWlanResumeCallback
8304 *
8305 */
8306void WDA_ProcessWlanResumeCallback(
8307 WDI_SuspendResumeRspParamsType *resumeRspParams,
8308 void* pUserData)
8309{
8310 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008312 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008313 if(NULL == pWdaParams)
8314 {
8315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008316 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008317 VOS_ASSERT(0) ;
8318 return ;
8319 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008320 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
8321 {
8322 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08008323 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008324 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008325 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8326 vos_mem_free(pWdaParams->wdaMsgParam);
8327 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008328 return ;
8329}
Jeff Johnson295189b2012-06-20 16:38:30 -07008330/*
8331 * FUNCTION: WDA_ProcessWlanResumeReq
8332 *
8333 */
8334VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
8335 tSirWlanResumeParam *pWlanResumeParam)
8336{
8337 WDI_Status wdiStatus;
8338 WDI_ResumeParamsType *wdiResumeParams =
8339 (WDI_ResumeParamsType *)vos_mem_malloc(
8340 sizeof(WDI_ResumeParamsType) ) ;
8341 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008343 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008344 if(NULL == wdiResumeParams)
8345 {
8346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008347 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008348 VOS_ASSERT(0);
8349 return VOS_STATUS_E_NOMEM;
8350 }
8351 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8352 if(NULL == pWdaParams)
8353 {
8354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008355 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008356 VOS_ASSERT(0);
8357 vos_mem_free(wdiResumeParams);
8358 return VOS_STATUS_E_NOMEM;
8359 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008360 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
8361 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07008363 wdiResumeParams->wdiReqStatusCB = NULL;
8364 pWdaParams->wdaMsgParam = pWlanResumeParam;
8365 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
8366 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008367 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
8368 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
8369 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008370 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8371 {
8372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8373 "Failure in Host Resume REQ WDI API, free all the memory " );
8374 VOS_ASSERT(0);
8375 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8376 vos_mem_free(pWdaParams->wdaMsgParam);
8377 vos_mem_free(pWdaParams);
8378 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008379 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8380}
8381
Jeff Johnson295189b2012-06-20 16:38:30 -07008382/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008383 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008384 *
8385 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008386void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008387{
8388 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008390 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008391 if(NULL == pWdaParams)
8392 {
8393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008394 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008395 VOS_ASSERT(0) ;
8396 return ;
8397 }
8398
8399 vos_mem_free(pWdaParams->wdaMsgParam) ;
8400 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8401 vos_mem_free(pWdaParams) ;
8402 /*
8403 * No respone required for SetBeaconFilter req so just free the request
8404 * param here
8405 */
8406
Jeff Johnson295189b2012-06-20 16:38:30 -07008407 return ;
8408}
Jeff Johnson295189b2012-06-20 16:38:30 -07008409/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008410 * FUNCTION: WDA_SetBeaconFilterReqCallback
8411 * Free memory.
8412 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
8413 */
8414void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8415{
8416 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8417
8418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8419 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8420
8421 if(NULL == pWdaParams)
8422 {
8423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8424 "%s: pWdaParams received NULL", __func__);
8425 VOS_ASSERT(0);
8426 return;
8427 }
8428
8429 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8430 {
8431 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8432 vos_mem_free(pWdaParams->wdaMsgParam);
8433 vos_mem_free(pWdaParams);
8434 }
8435
8436 return;
8437}
8438/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008439 * FUNCTION: WDA_SetBeaconFilterReq
8440 * Request to WDI to send the beacon filtering related information.
8441 */
8442VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
8443 tBeaconFilterMsg* pBeaconFilterInfo)
8444{
8445 WDI_Status status = WDI_STATUS_SUCCESS;
8446 tANI_U8 *dstPtr, *srcPtr;
8447 tANI_U8 filterLength;
8448 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
8449 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
8450 sizeof(WDI_BeaconFilterReqParamsType) ) ;
8451 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008453 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008454 if(NULL == wdiBeaconFilterInfo)
8455 {
8456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008457 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008458 VOS_ASSERT(0);
8459 return VOS_STATUS_E_NOMEM;
8460 }
8461 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8462 if(NULL == pWdaParams)
8463 {
8464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008465 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008466 VOS_ASSERT(0);
8467 vos_mem_free(wdiBeaconFilterInfo);
8468 return VOS_STATUS_E_NOMEM;
8469 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008470 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
8471 pBeaconFilterInfo->beaconInterval;
8472 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
8473 pBeaconFilterInfo->capabilityInfo;
8474 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
8475 pBeaconFilterInfo->capabilityMask;
8476 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07008477
8478 //Fill the BssIdx
8479 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
8480
Jeff Johnson295189b2012-06-20 16:38:30 -07008481 //Fill structure with info contained in the beaconFilterTable
8482 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
8483 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
8484 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
8485 if(WDI_BEACON_FILTER_LEN < filterLength)
8486 {
8487 filterLength = WDI_BEACON_FILTER_LEN;
8488 }
8489 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008490 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
8491 wdiBeaconFilterInfo->pUserData = pWdaParams;
8492
Jeff Johnson295189b2012-06-20 16:38:30 -07008493 /* Store param pointer as passed in by caller */
8494 /* store Params pass it to WDI */
8495 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
8496 pWdaParams->pWdaContext = pWDA;
8497 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
8498
Jeff Johnson295189b2012-06-20 16:38:30 -07008499 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008500 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008501 if(IS_WDI_STATUS_FAILURE(status))
8502 {
8503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8504 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
8505 vos_mem_free(pWdaParams->wdaMsgParam) ;
8506 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8507 vos_mem_free(pWdaParams) ;
8508 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008509 return CONVERT_WDI2VOS_STATUS(status) ;
8510}
Jeff Johnson295189b2012-06-20 16:38:30 -07008511/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008512 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008513 *
8514 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008515void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008516{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008517 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8518
Jeff Johnson295189b2012-06-20 16:38:30 -07008519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008520 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008521
8522 if(NULL == pWdaParams)
8523 {
8524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008525 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008526 VOS_ASSERT(0) ;
8527 return ;
8528 }
8529
8530 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8531 vos_mem_free(pWdaParams->wdaMsgParam);
8532 vos_mem_free(pWdaParams);
8533
Jeff Johnson295189b2012-06-20 16:38:30 -07008534 //print a msg, nothing else to do
8535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008536 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008537 return ;
8538}
Yue Ma7f44bbe2013-04-12 11:47:39 -07008539/*
8540 * FUNCTION: WDA_RemBeaconFilterReqCallback
8541 * Free memory.
8542 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
8543 */
8544void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8545{
8546 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8547
8548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8549 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8550
8551 if(NULL == pWdaParams)
8552 {
8553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8554 "%s: pWdaParams received NULL", __func__);
8555 VOS_ASSERT(0);
8556 return;
8557 }
8558
8559 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8560 {
8561 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8562 vos_mem_free(pWdaParams->wdaMsgParam);
8563 vos_mem_free(pWdaParams);
8564 }
8565
8566 return;
8567}
Jeff Johnson295189b2012-06-20 16:38:30 -07008568 // TODO: PE does not have this feature for now implemented,
8569 // but the support for removing beacon filter exists between
8570 // HAL and FW. This function can be called whenever PE defines
8571 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07008572/*
8573 * FUNCTION: WDA_RemBeaconFilterReq
8574 * Request to WDI to send the removal of beacon filtering related information.
8575 */
8576VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
8577 tRemBeaconFilterMsg* pBeaconFilterInfo)
8578{
8579 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008580 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008581 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
8582 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
8583 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008584 tWDA_ReqParams *pWdaParams ;
8585
Jeff Johnson295189b2012-06-20 16:38:30 -07008586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008587 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008588 if(NULL == wdiBeaconFilterInfo)
8589 {
8590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008591 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008592 VOS_ASSERT(0);
8593 return VOS_STATUS_E_NOMEM;
8594 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008595 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8596 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008597 {
8598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008599 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008600 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008601 vos_mem_free(wdiBeaconFilterInfo);
8602 vos_mem_free(pBeaconFilterInfo);
8603 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07008604 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07008605
8606 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
8607 pBeaconFilterInfo->ucIeCount;
8608 //Fill structure with info contained in the ucRemIeId
8609 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
8610 pBeaconFilterInfo->ucRemIeId,
8611 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
8612 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
8613 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008614
8615 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008616 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07008617 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008618 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
8619
8620 pWdaParams->pWdaContext = pWDA;
8621
Jeff Johnson43971f52012-07-17 12:26:56 -07008622 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008623 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008624 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008625 {
8626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8627 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008628 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008629 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8630 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008631 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008632 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008633 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008634}
Jeff Johnson295189b2012-06-20 16:38:30 -07008635/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008636 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008637 *
8638 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008639void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008640{
8641 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
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 == pWdaParams)
8645 {
8646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008647 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008648 VOS_ASSERT(0) ;
8649 return ;
8650 }
8651
8652 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8653 vos_mem_free(pWdaParams) ;
8654
Jeff Johnson295189b2012-06-20 16:38:30 -07008655 return ;
8656}
Jeff Johnson295189b2012-06-20 16:38:30 -07008657/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008658 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
8659 * Free memory.
8660 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
8661 */
8662void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
8663{
8664 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8665
8666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8667 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8668
8669 if(NULL == pWdaParams)
8670 {
8671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8672 "%s: pWdaParams received NULL", __func__);
8673 VOS_ASSERT(0);
8674 return;
8675 }
8676
8677 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8678 {
8679 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8680 vos_mem_free(pWdaParams);
8681 }
8682
8683 return;
8684}
8685/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008686 * FUNCTION: WDA_SetRSSIThresholdsReq
8687 * Request to WDI to set the RSSI thresholds (sta mode).
8688 */
8689VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
8690{
8691 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008692 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008693 tWDA_CbContext *pWDA = NULL ;
8694 v_PVOID_t pVosContext = NULL;
8695 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
8696 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
8697 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
8698 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008700 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008701 if(NULL == wdiRSSIThresholdsInfo)
8702 {
8703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008704 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008705 VOS_ASSERT(0);
8706 return VOS_STATUS_E_NOMEM;
8707 }
8708 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8709 if(NULL == pWdaParams)
8710 {
8711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008712 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008713 VOS_ASSERT(0);
8714 vos_mem_free(wdiRSSIThresholdsInfo);
8715 return VOS_STATUS_E_NOMEM;
8716 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008717 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07008718 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
8719 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
8720 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07008721 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
8722 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
8723 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07008724 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
8725 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
8726 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008727 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
8728 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008729 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
8730 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
8731
Jeff Johnson295189b2012-06-20 16:38:30 -07008732 /* Store param pointer as passed in by caller */
8733 /* store Params pass it to WDI */
8734 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
8735 pWdaParams->pWdaContext = pWDA;
8736 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07008737 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008738 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008739 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008740 {
8741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8742 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008743 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008744 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8745 vos_mem_free(pWdaParams) ;
8746 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008747 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008748
8749}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008750/*
Yue Madb90ac12013-04-04 13:39:13 -07008751 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008752 *
8753 */
Yue Madb90ac12013-04-04 13:39:13 -07008754void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008755{
8756 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8757
8758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008759 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008760 if(NULL == pWdaParams)
8761 {
8762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008763 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008764 VOS_ASSERT(0) ;
8765 return ;
8766 }
8767
8768 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8769 vos_mem_free(pWdaParams->wdaMsgParam);
8770 vos_mem_free(pWdaParams) ;
8771
8772 //print a msg, nothing else to do
8773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -07008774 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008775 return ;
8776}
Jeff Johnson295189b2012-06-20 16:38:30 -07008777/*
Yue Madb90ac12013-04-04 13:39:13 -07008778 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -07008779 * Free memory.
8780 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -07008781 */
8782void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
8783{
8784 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8785
8786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8787 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8788
8789 if(NULL == pWdaParams)
8790 {
8791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8792 "%s: Invalid pWdaParams pointer", __func__);
8793 VOS_ASSERT(0);
8794 return;
8795 }
8796
8797 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8798 {
8799 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8800 vos_mem_free(pWdaParams->wdaMsgParam);
8801 vos_mem_free(pWdaParams);
8802 }
8803
8804 return;
8805}
8806/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008807 * FUNCTION: WDA_ProcessHostOffloadReq
8808 * Request to WDI to set the filter to minimize unnecessary host wakeup due
8809 * to broadcast traffic (sta mode).
8810 */
8811VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
8812 tSirHostOffloadReq *pHostOffloadParams)
8813{
8814 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008815 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008816 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
8817 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
8818 sizeof(WDI_HostOffloadReqParamsType)) ;
8819 tWDA_ReqParams *pWdaParams ;
8820
8821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008822 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07008823
8824 if(NULL == wdiHostOffloadInfo)
8825 {
8826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008827 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008828 VOS_ASSERT(0);
8829 return VOS_STATUS_E_NOMEM;
8830 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008831 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8832 if(NULL == pWdaParams)
8833 {
8834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008835 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008836 VOS_ASSERT(0);
8837 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008838 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008839 return VOS_STATUS_E_NOMEM;
8840 }
8841
8842 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
8843 pHostOffloadParams->offloadType;
8844 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
8845 pHostOffloadParams->enableOrDisable;
8846
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008847 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
8848 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
8849
Jeff Johnson295189b2012-06-20 16:38:30 -07008850 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
8851 {
8852 case SIR_IPV4_ARP_REPLY_OFFLOAD:
8853 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
8854 pHostOffloadParams->params.hostIpv4Addr,
8855 4);
8856 break;
8857 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
8858 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
8859 pHostOffloadParams->params.hostIpv6Addr,
8860 16);
8861 break;
8862 case SIR_IPV6_NS_OFFLOAD:
8863 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
8864 pHostOffloadParams->params.hostIpv6Addr,
8865 16);
8866
8867#ifdef WLAN_NS_OFFLOAD
8868 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
8869 {
8870 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
8871 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
8872 16);
8873 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
8874 }
8875 else
8876 {
8877 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
8878 }
8879
8880 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
8881 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
8882 16);
8883 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
8884 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
8885 6);
8886
8887 //Only two are supported so let's go through them without a loop
8888 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
8889 {
8890 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
8891 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
8892 16);
8893 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
8894 }
8895 else
8896 {
8897 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
8898 }
8899
8900 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
8901 {
8902 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
8903 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
8904 16);
8905 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
8906 }
8907 else
8908 {
8909 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
8910 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +05308911 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
8912 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008913 break;
8914#endif //WLAN_NS_OFFLOAD
8915 default:
8916 {
8917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8918 "No Handling for Offload Type %x in WDA "
8919 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
8920 //WDA_VOS_ASSERT(0) ;
8921 }
8922 }
Yue Madb90ac12013-04-04 13:39:13 -07008923 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
8924 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008925
Jeff Johnson295189b2012-06-20 16:38:30 -07008926 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008927 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008928 /* store Params pass it to WDI */
8929 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
8930 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008931
Jeff Johnson295189b2012-06-20 16:38:30 -07008932
Jeff Johnson43971f52012-07-17 12:26:56 -07008933 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -07008934 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008935
Jeff Johnson43971f52012-07-17 12:26:56 -07008936 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008937 {
8938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8939 "Failure in host offload REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008940 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008941 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8942 vos_mem_free(pWdaParams->wdaMsgParam);
8943 vos_mem_free(pWdaParams) ;
8944 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008945 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008946
8947}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008948/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008949 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008950 *
8951 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008952void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008953{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008954 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8955
Jeff Johnson295189b2012-06-20 16:38:30 -07008956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008957 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008958
8959 if(NULL == pWdaParams)
8960 {
8961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008962 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008963 VOS_ASSERT(0) ;
8964 return ;
8965 }
8966
8967 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8968 vos_mem_free(pWdaParams->wdaMsgParam);
8969 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008970
Jeff Johnson295189b2012-06-20 16:38:30 -07008971 //print a msg, nothing else to do
8972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008973 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008974 return ;
8975}
Jeff Johnson295189b2012-06-20 16:38:30 -07008976/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008977 * FUNCTION: WDA_KeepAliveReqCallback
8978 * Free memory.
8979 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
8980 */
8981void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
8982{
8983 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8984
8985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8986 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8987
8988 if(NULL == pWdaParams)
8989 {
8990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8991 "%s: pWdaParams received NULL", __func__);
8992 VOS_ASSERT(0);
8993 return;
8994 }
8995
8996 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8997 {
8998 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8999 vos_mem_free(pWdaParams->wdaMsgParam);
9000 vos_mem_free(pWdaParams);
9001 }
9002
9003 return;
9004}
9005/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009006 * FUNCTION: WDA_ProcessKeepAliveReq
9007 * Request to WDI to send Keep Alive packets to minimize unnecessary host
9008 * wakeup due to broadcast traffic (sta mode).
9009 */
9010VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
9011 tSirKeepAliveReq *pKeepAliveParams)
9012{
9013 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009014 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009015 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
9016 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
9017 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009018 tWDA_ReqParams *pWdaParams;
9019
Jeff Johnson295189b2012-06-20 16:38:30 -07009020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009021 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009022 if(NULL == wdiKeepAliveInfo)
9023 {
9024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009025 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009026 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009027 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009028 return VOS_STATUS_E_NOMEM;
9029 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009030
9031 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9032 if(NULL == pWdaParams)
9033 {
9034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009035 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009036 VOS_ASSERT(0);
9037 vos_mem_free(wdiKeepAliveInfo);
9038 vos_mem_free(pKeepAliveParams);
9039 return VOS_STATUS_E_NOMEM;
9040 }
9041
Jeff Johnson295189b2012-06-20 16:38:30 -07009042 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
9043 pKeepAliveParams->packetType;
9044 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
9045 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009046
9047 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
9048 pKeepAliveParams->bssId,
9049 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07009050
9051 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
9052 {
9053 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
9054 pKeepAliveParams->hostIpv4Addr,
9055 SIR_IPV4_ADDR_LEN);
9056 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
9057 pKeepAliveParams->destIpv4Addr,
9058 SIR_IPV4_ADDR_LEN);
9059 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
9060 pKeepAliveParams->destMacAddr,
9061 SIR_MAC_ADDR_LEN);
9062 }
9063 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
9064 {
9065 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
9066 SIR_IPV4_ADDR_LEN,
9067 0);
9068 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
9069 SIR_IPV4_ADDR_LEN,
9070 0);
9071 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
9072 SIR_MAC_ADDR_LEN,
9073 0);
9074 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009075 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
9076 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009077
Jeff Johnson295189b2012-06-20 16:38:30 -07009078 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009079 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009080 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009081 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
9082 pWdaParams->pWdaContext = pWDA;
9083
Jeff Johnson295189b2012-06-20 16:38:30 -07009084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
9085 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
9086 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
9087 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
9088 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
9089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
9090 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
9091 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
9092 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
9093 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
9094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9095 "WDA DMAC : %d:%d:%d:%d:%d:%d",
9096 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
9097 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
9098 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
9099 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
9100 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
9101 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
9102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9103 "TimePeriod %d PacketType %d",
9104 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
9105 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -07009106 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009107 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009108
Jeff Johnson43971f52012-07-17 12:26:56 -07009109 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009110 {
9111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9112 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009113 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009114 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9115 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009116 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009117 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009118 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009119
9120}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009121/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009122 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009123 *
9124 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009125void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009126 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
9127 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009128{
9129 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009131 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009132 if(NULL == pWdaParams)
9133 {
9134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009135 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009136 VOS_ASSERT(0) ;
9137 return ;
9138 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009139 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9140 vos_mem_free(pWdaParams->wdaMsgParam);
9141 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009142 return ;
9143}
Jeff Johnson295189b2012-06-20 16:38:30 -07009144/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009145 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
9146 * Free memory.
9147 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
9148 */
9149void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
9150{
9151 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9152
9153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9154 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9155
9156 if(NULL == pWdaParams)
9157 {
9158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9159 "%s: pWdaParams received NULL", __func__);
9160 VOS_ASSERT(0);
9161 return;
9162 }
9163
9164 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9165 {
9166 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9167 vos_mem_free(pWdaParams->wdaMsgParam);
9168 vos_mem_free(pWdaParams);
9169 }
9170
9171 return;
9172}
9173
9174/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009175 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
9176 * Request to WDI to add WOWL Bcast pattern
9177 */
9178VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
9179 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
9180{
9181 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009182 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009183 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
9184 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
9185 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
9186 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009188 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009189 if(NULL == wdiWowlAddBcPtrnInfo)
9190 {
9191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009192 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009193 VOS_ASSERT(0);
9194 return VOS_STATUS_E_NOMEM;
9195 }
9196 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9197 if(NULL == pWdaParams)
9198 {
9199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009200 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009201 VOS_ASSERT(0);
9202 vos_mem_free(wdiWowlAddBcPtrnInfo);
9203 return VOS_STATUS_E_NOMEM;
9204 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009205 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
9206 pWowlAddBcPtrnParams->ucPatternId;
9207 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
9208 pWowlAddBcPtrnParams->ucPatternByteOffset;
9209 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
9210 pWowlAddBcPtrnParams->ucPatternMaskSize;
9211 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
9212 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -07009213 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
9214 {
9215 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
9216 pWowlAddBcPtrnParams->ucPattern,
9217 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
9218 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
9219 pWowlAddBcPtrnParams->ucPatternMask,
9220 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
9221 }
9222 else
9223 {
9224 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
9225 pWowlAddBcPtrnParams->ucPattern,
9226 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9227 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
9228 pWowlAddBcPtrnParams->ucPatternMask,
9229 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9230
9231 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
9232 pWowlAddBcPtrnParams->ucPatternExt,
9233 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9234 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
9235 pWowlAddBcPtrnParams->ucPatternMaskExt,
9236 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9237 }
9238
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009239 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
9240 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
9241
Yue Ma7f44bbe2013-04-12 11:47:39 -07009242 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
9243 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009244 /* Store param pointer as passed in by caller */
9245 /* store Params pass it to WDI */
9246 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
9247 pWdaParams->pWdaContext = pWDA;
9248 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009249 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009250 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009251 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009252 {
9253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9254 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009255 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009256 vos_mem_free(pWdaParams->wdaMsgParam) ;
9257 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9258 vos_mem_free(pWdaParams) ;
9259 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009260 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009261
9262}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009263/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009264 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009265 *
9266 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009267void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009268 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
9269 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009270{
9271 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009273 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009274 if(NULL == pWdaParams)
9275 {
9276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009277 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009278 VOS_ASSERT(0) ;
9279 return ;
9280 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009281 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9282 vos_mem_free(pWdaParams->wdaMsgParam);
9283 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009284 return ;
9285}
Jeff Johnson295189b2012-06-20 16:38:30 -07009286/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009287 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
9288 * Free memory.
9289 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
9290 */
9291void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
9292{
9293 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9294
9295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9296 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9297
9298 if(NULL == pWdaParams)
9299 {
9300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9301 "%s: pWdaParams received NULL", __func__);
9302 VOS_ASSERT(0);
9303 return;
9304 }
9305
9306 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9307 {
9308 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9309 vos_mem_free(pWdaParams->wdaMsgParam);
9310 vos_mem_free(pWdaParams);
9311 }
9312
9313 return;
9314}
9315/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009316 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
9317 * Request to WDI to delete WOWL Bcast pattern
9318 */
9319VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
9320 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
9321{
9322 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009323 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009324 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
9325 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
9326 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
9327 tWDA_ReqParams *pWdaParams ;
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 == wdiWowlDelBcPtrnInfo)
9331 {
9332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009333 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009334 VOS_ASSERT(0);
9335 return VOS_STATUS_E_NOMEM;
9336 }
9337 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9338 if(NULL == pWdaParams)
9339 {
9340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009341 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009342 VOS_ASSERT(0);
9343 vos_mem_free(wdiWowlDelBcPtrnInfo);
9344 return VOS_STATUS_E_NOMEM;
9345 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009346 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
9347 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009348
9349 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
9350 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
9351
Yue Ma7f44bbe2013-04-12 11:47:39 -07009352 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
9353 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009354 /* Store param pointer as passed in by caller */
9355 /* store Params pass it to WDI */
9356 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
9357 pWdaParams->pWdaContext = pWDA;
9358 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009359 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009360 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009361 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009362 {
9363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9364 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009365 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009366 vos_mem_free(pWdaParams->wdaMsgParam) ;
9367 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9368 vos_mem_free(pWdaParams) ;
9369 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009370 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009371
9372}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009373/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009374 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009375 *
9376 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009377void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009378{
9379 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9380 tWDA_CbContext *pWDA;
9381 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009383 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009384 if(NULL == pWdaParams)
9385 {
9386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009387 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009388 VOS_ASSERT(0) ;
9389 return ;
9390 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009391 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9392 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
9393
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009394 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
9395
Jeff Johnson295189b2012-06-20 16:38:30 -07009396 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9397 vos_mem_free(pWdaParams) ;
9398
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009399 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009400 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -07009401 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009402 return ;
9403}
Jeff Johnson295189b2012-06-20 16:38:30 -07009404/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009405 * FUNCTION: WDA_WowlEnterReqCallback
9406 * Free memory and send WOWL Enter RSP back to PE.
9407 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
9408 */
9409void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
9410{
9411 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9412 tWDA_CbContext *pWDA;
9413 tSirHalWowlEnterParams *pWowlEnterParams;
9414
9415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9416 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9417
9418 if(NULL == pWdaParams)
9419 {
9420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9421 "%s: pWdaParams received NULL", __func__);
9422 VOS_ASSERT(0);
9423 return;
9424 }
9425
9426 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9427 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
9428 pWowlEnterParams->status = wdiStatus;
9429
9430 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9431 {
9432 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9433 vos_mem_free(pWdaParams);
9434 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
9435 }
9436
9437 return;
9438}
9439/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009440 * FUNCTION: WDA_ProcessWowlEnterReq
9441 * Request to WDI to enter WOWL
9442 */
9443VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
9444 tSirHalWowlEnterParams *pWowlEnterParams)
9445{
9446 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009447 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009448 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
9449 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
9450 sizeof(WDI_WowlEnterReqParamsType)) ;
9451 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009453 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009454 if(NULL == wdiWowlEnterInfo)
9455 {
9456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009457 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009458 VOS_ASSERT(0);
9459 return VOS_STATUS_E_NOMEM;
9460 }
9461 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9462 if(NULL == pWdaParams)
9463 {
9464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009465 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009466 VOS_ASSERT(0);
9467 vos_mem_free(wdiWowlEnterInfo);
9468 return VOS_STATUS_E_NOMEM;
9469 }
Kumar Anandaca924e2013-07-22 14:35:34 -07009470
9471 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
9472
Jeff Johnson295189b2012-06-20 16:38:30 -07009473 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
9474 pWowlEnterParams->magicPtrn,
9475 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07009476 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
9477 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009478 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
9479 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009480 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
9481 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009482 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
9483 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009484 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
9485 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009486 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
9487 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009488 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
9489 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -07009490 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
9491 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -07009492#ifdef WLAN_WAKEUP_EVENTS
9493 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
9494 pWowlEnterParams->ucWoWEAPIDRequestEnable;
9495
9496 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
9497 pWowlEnterParams->ucWoWEAPOL4WayEnable;
9498
9499 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
9500 pWowlEnterParams->ucWowNetScanOffloadMatch;
9501
9502 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
9503 pWowlEnterParams->ucWowGTKRekeyError;
9504
9505 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
9506 pWowlEnterParams->ucWoWBSSConnLoss;
9507#endif // WLAN_WAKEUP_EVENTS
9508
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009509 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
9510 pWowlEnterParams->bssIdx;
9511
Yue Ma7f44bbe2013-04-12 11:47:39 -07009512 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
9513 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009514 /* Store param pointer as passed in by caller */
9515 /* store Params pass it to WDI */
9516 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
9517 pWdaParams->pWdaContext = pWDA;
9518 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009519 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009520 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009521 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009522 {
9523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9524 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009525 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009526 vos_mem_free(pWdaParams->wdaMsgParam) ;
9527 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9528 vos_mem_free(pWdaParams) ;
9529 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009530 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009531
9532}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009533/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009534 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009535 *
9536 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009537void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009538{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009539 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9540 tWDA_CbContext *pWDA;
9541 tSirHalWowlExitParams *pWowlExitParams;
9542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009543 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009544 if(NULL == pWdaParams)
9545 {
9546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009547 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009548 VOS_ASSERT(0) ;
9549 return ;
9550 }
9551 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9552 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
9553
9554 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009555 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009556
9557 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9558 vos_mem_free(pWdaParams) ;
9559
Jeff Johnson295189b2012-06-20 16:38:30 -07009560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009561 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009562 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009563 return ;
9564}
Jeff Johnson295189b2012-06-20 16:38:30 -07009565/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009566 * FUNCTION: WDA_WowlExitReqCallback
9567 * Free memory and send WOWL Exit RSP back to PE.
9568 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
9569 */
9570void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
9571{
9572 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9573 tWDA_CbContext *pWDA;
9574 tSirHalWowlExitParams *pWowlExitParams;
9575
9576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9577 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9578
9579 if(NULL == pWdaParams)
9580 {
9581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9582 "%s: pWdaParams received NULL", __func__);
9583 VOS_ASSERT(0);
9584 return;
9585 }
9586
9587 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9588 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
9589 pWowlExitParams->status = wdiStatus;
9590
9591 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9592 {
9593 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9594 vos_mem_free(pWdaParams);
9595 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
9596 }
9597
9598 return;
9599}
9600/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009601 * FUNCTION: WDA_ProcessWowlExitReq
9602 * Request to WDI to add WOWL Bcast pattern
9603 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009604VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
9605 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009606{
9607 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009608 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009609 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
9610 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
9611 sizeof(WDI_WowlExitReqParamsType)) ;
9612 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009614 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009615 if(NULL == wdiWowlExitInfo)
9616 {
9617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009618 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009619 VOS_ASSERT(0);
9620 return VOS_STATUS_E_NOMEM;
9621 }
9622 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9623 if(NULL == pWdaParams)
9624 {
9625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009626 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009627 VOS_ASSERT(0);
9628 vos_mem_free(wdiWowlExitInfo);
9629 return VOS_STATUS_E_NOMEM;
9630 }
9631
9632 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
9633 pWowlExitParams->bssIdx;
9634
Yue Ma7f44bbe2013-04-12 11:47:39 -07009635 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
9636 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009637
9638 /* Store param pointer as passed in by caller */
9639 /* store Params pass it to WDI */
9640 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
9641 pWdaParams->pWdaContext = pWDA;
9642 pWdaParams->wdaMsgParam = pWowlExitParams;
9643
9644 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009645 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009646
Jeff Johnson43971f52012-07-17 12:26:56 -07009647 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009648 {
9649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9650 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009651 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009652 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9653 vos_mem_free(pWdaParams->wdaMsgParam);
9654 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009655 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009656 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009657}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009658/*
9659 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
9660 * Request to WDI to determine whether a given station is capable of
9661 * using HW-based frame translation
9662 */
9663v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
9664 tANI_U8 staIdx)
9665{
9666 return WDI_IsHwFrameTxTranslationCapable(staIdx);
9667}
Jeff Johnson295189b2012-06-20 16:38:30 -07009668/*
9669 * FUNCTION: WDA_NvDownloadReqCallback
9670 * send NV Download RSP back to PE
9671 */
9672void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
9673 void* pUserData)
9674{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009675
9676 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
9677 tWDA_CbContext *pWDA;
9678
Jeff Johnson295189b2012-06-20 16:38:30 -07009679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009680 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009681
9682 if(NULL == pWdaParams)
9683 {
9684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009685 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009686 VOS_ASSERT(0) ;
9687 return ;
9688 }
9689
9690 pWDA = pWdaParams->pWdaContext;
9691
Jeff Johnson295189b2012-06-20 16:38:30 -07009692 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009693 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9694 vos_mem_free(pWdaParams);
9695
Jeff Johnson295189b2012-06-20 16:38:30 -07009696 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07009697 return ;
9698}
Jeff Johnson295189b2012-06-20 16:38:30 -07009699/*
9700 * FUNCTION: WDA_ProcessNvDownloadReq
9701 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
9702 */
9703VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
9704{
9705 /* Initialize the local Variables*/
9706 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
9707 v_VOID_t *pNvBuffer=NULL;
9708 v_SIZE_t bufferSize = 0;
9709 WDI_Status status = WDI_STATUS_E_FAILURE;
9710 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009711 tWDA_ReqParams *pWdaParams ;
9712
Jeff Johnson295189b2012-06-20 16:38:30 -07009713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009714 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009715 if(NULL == pWDA)
9716 {
9717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009718 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009719 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07009720 return VOS_STATUS_E_FAILURE;
9721 }
9722
9723 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -07009724 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
9725
Jeff Johnson295189b2012-06-20 16:38:30 -07009726 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
9727 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009728 if(NULL == wdiNvDownloadReqParam)
9729 {
9730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009731 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009732 VOS_ASSERT(0);
9733 return VOS_STATUS_E_NOMEM;
9734 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009735 /* Copy Params to wdiNvDownloadReqParam*/
9736 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
9737 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009738
9739 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9740 if(NULL == pWdaParams)
9741 {
9742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009743 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009744 VOS_ASSERT(0);
9745 vos_mem_free(wdiNvDownloadReqParam);
9746 return VOS_STATUS_E_NOMEM;
9747 }
9748
Jeff Johnson295189b2012-06-20 16:38:30 -07009749 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009750 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
9751 pWdaParams->wdaMsgParam = NULL;
9752 pWdaParams->pWdaContext = pWDA;
9753
9754
Jeff Johnson295189b2012-06-20 16:38:30 -07009755 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009756
Jeff Johnson295189b2012-06-20 16:38:30 -07009757 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009758 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
9759
Jeff Johnson295189b2012-06-20 16:38:30 -07009760 if(IS_WDI_STATUS_FAILURE(status))
9761 {
9762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9763 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009764 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9765 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009766 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009767 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009768}
9769/*
9770 * FUNCTION: WDA_FlushAcReqCallback
9771 * send Flush AC RSP back to TL
9772 */
9773void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
9774{
9775 vos_msg_t wdaMsg = {0} ;
9776 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9777 tFlushACReq *pFlushACReqParams;
9778 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009780 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009781 if(NULL == pWdaParams)
9782 {
9783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009784 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009785 VOS_ASSERT(0) ;
9786 return ;
9787 }
9788
9789 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
9790 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
9791 if(NULL == pFlushACRspParams)
9792 {
9793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009794 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009795 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009796 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009797 return ;
9798 }
9799 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
9800 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
9801 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
9802 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
9803 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009804 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009805 vos_mem_free(pWdaParams->wdaMsgParam) ;
9806 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9807 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009808 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
9809 wdaMsg.bodyptr = (void *)pFlushACRspParams;
9810 // POST message to TL
9811 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
9812
Jeff Johnson295189b2012-06-20 16:38:30 -07009813 return ;
9814}
Jeff Johnson295189b2012-06-20 16:38:30 -07009815/*
9816 * FUNCTION: WDA_ProcessFlushAcReq
9817 * Request to WDI to Update the DELBA REQ params.
9818 */
9819VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
9820 tFlushACReq *pFlushAcReqParams)
9821{
9822 WDI_Status status = WDI_STATUS_SUCCESS ;
9823 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
9824 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
9825 sizeof(WDI_FlushAcReqParamsType)) ;
9826 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009827 if(NULL == wdiFlushAcReqParam)
9828 {
9829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009830 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009831 VOS_ASSERT(0);
9832 return VOS_STATUS_E_NOMEM;
9833 }
9834 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9835 if(NULL == pWdaParams)
9836 {
9837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009838 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009839 VOS_ASSERT(0);
9840 vos_mem_free(wdiFlushAcReqParam);
9841 return VOS_STATUS_E_NOMEM;
9842 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009844 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009845 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
9846 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
9847 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
9848 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -07009849 /* Store Flush AC pointer, as this will be used for response */
9850 /* store Params pass it to WDI */
9851 pWdaParams->pWdaContext = pWDA;
9852 pWdaParams->wdaMsgParam = pFlushAcReqParams;
9853 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009854 status = WDI_FlushAcReq(wdiFlushAcReqParam,
9855 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009856 if(IS_WDI_STATUS_FAILURE(status))
9857 {
9858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9859 "Failure in Flush AC REQ Params WDI API, free all the memory " );
9860 vos_mem_free(pWdaParams->wdaMsgParam) ;
9861 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9862 vos_mem_free(pWdaParams) ;
9863 //TODO: respond to TL with failure
9864 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009865 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009866}
Jeff Johnson295189b2012-06-20 16:38:30 -07009867/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009868 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009869 *
9870 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009871void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009872{
9873 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9874 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07009875 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009876
9877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009878 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009879 if(NULL == pWdaParams)
9880 {
9881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009882 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009883 VOS_ASSERT(0) ;
9884 return ;
9885 }
9886 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9887 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
9888 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
9889 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
9890 {
9891 pWDA->wdaAmpSessionOn = VOS_FALSE;
9892 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009893 vos_mem_free(pWdaParams->wdaMsgParam) ;
9894 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9895 vos_mem_free(pWdaParams) ;
9896 /*
9897 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
9898 * param here
9899 */
Jeff Johnson295189b2012-06-20 16:38:30 -07009900 return ;
9901}
Yue Ma7f44bbe2013-04-12 11:47:39 -07009902/*
9903 * FUNCTION: WDA_BtAmpEventReqCallback
9904 * Free memory.
9905 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
9906 */
9907void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
9908{
9909 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9910 tWDA_CbContext *pWDA;
9911 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009912
Yue Ma7f44bbe2013-04-12 11:47:39 -07009913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9914 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9915
9916 if(NULL == pWdaParams)
9917 {
9918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9919 "%s: pWdaParams received NULL", __func__);
9920 VOS_ASSERT(0);
9921 return;
9922 }
9923
9924 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9925 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
9926
9927 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
9928 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
9929 {
9930 pWDA->wdaAmpSessionOn = VOS_FALSE;
9931 }
9932
9933 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9934 {
9935 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9936 vos_mem_free(pWdaParams->wdaMsgParam);
9937 vos_mem_free(pWdaParams);
9938 }
9939
9940 return;
9941}
Jeff Johnson295189b2012-06-20 16:38:30 -07009942/*
9943 * FUNCTION: WDA_ProcessBtAmpEventReq
9944 * Request to WDI to Update with BT AMP events.
9945 */
9946VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
9947 tSmeBtAmpEvent *pBtAmpEventParams)
9948{
9949 WDI_Status status = WDI_STATUS_SUCCESS ;
9950 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
9951 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
9952 sizeof(WDI_BtAmpEventParamsType)) ;
9953 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009955 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009956 if(NULL == wdiBtAmpEventParam)
9957 {
9958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009959 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009960 VOS_ASSERT(0);
9961 return VOS_STATUS_E_NOMEM;
9962 }
9963 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9964 if(NULL == pWdaParams)
9965 {
9966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009967 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009968 VOS_ASSERT(0);
9969 vos_mem_free(wdiBtAmpEventParam);
9970 return VOS_STATUS_E_NOMEM;
9971 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009972 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
9973 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009974 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
9975 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009976 /* Store BT AMP event pointer, as this will be used for response */
9977 /* store Params pass it to WDI */
9978 pWdaParams->pWdaContext = pWDA;
9979 pWdaParams->wdaMsgParam = pBtAmpEventParams;
9980 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009981 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009982 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009983 if(IS_WDI_STATUS_FAILURE(status))
9984 {
9985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9986 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
9987 vos_mem_free(pWdaParams->wdaMsgParam) ;
9988 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9989 vos_mem_free(pWdaParams) ;
9990 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009991 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
9992 {
9993 pWDA->wdaAmpSessionOn = VOS_TRUE;
9994 }
9995 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009996}
9997
Jeff Johnson295189b2012-06-20 16:38:30 -07009998/*
9999 * FUNCTION: WDA_FTMCommandReqCallback
10000 * Handle FTM CMD response came from HAL
10001 * Route responce to HDD FTM
10002 */
10003void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
10004 void *usrData)
10005{
10006 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010007 if((NULL == pWDA) || (NULL == ftmCmdRspData))
10008 {
10009 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010010 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010011 return;
10012 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010013 /* Release Current FTM Command Request */
10014 vos_mem_free(pWDA->wdaFTMCmdReq);
10015 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010016 /* Post FTM Responce to HDD FTM */
10017 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010018 return;
10019}
Jeff Johnson295189b2012-06-20 16:38:30 -070010020/*
10021 * FUNCTION: WDA_ProcessFTMCommand
10022 * Send FTM command to WDI
10023 */
10024VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
10025 tPttMsgbuffer *pPTTFtmCmd)
10026{
10027 WDI_Status status = WDI_STATUS_SUCCESS;
10028 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010029 ftmCMDReq = (WDI_FTMCommandReqType *)
10030 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
10031 if(NULL == ftmCMDReq)
10032 {
10033 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10034 "WDA FTM Command buffer alloc fail");
10035 return VOS_STATUS_E_NOMEM;
10036 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010037 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
10038 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070010039 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070010040 /* Send command to WDI */
10041 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070010042 return status;
10043}
Jeff Johnsone7245742012-09-05 17:12:55 -070010044#ifdef FEATURE_OEM_DATA_SUPPORT
10045/*
10046 * FUNCTION: WDA_StartOemDataReqCallback
10047 *
10048 */
10049void WDA_StartOemDataReqCallback(
10050 WDI_oemDataRspParamsType *wdiOemDataRspParams,
10051 void* pUserData)
10052{
10053 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010054 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10055 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -070010056 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010057
Jeff Johnsone7245742012-09-05 17:12:55 -070010058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010059 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010060
10061 if(NULL == pWdaParams)
10062 {
10063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010064 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010065 VOS_ASSERT(0) ;
10066 return ;
10067 }
10068 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10069
Jeff Johnsone7245742012-09-05 17:12:55 -070010070 if(NULL == pWDA)
10071 {
10072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010073 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010074 VOS_ASSERT(0);
10075 return ;
10076 }
10077
10078 /*
10079 * Allocate memory for response params sent to PE
10080 */
10081 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
10082
10083 // Check if memory is allocated for OemdataMeasRsp Params.
10084 if(NULL == pOemDataRspParams)
10085 {
10086 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10087 "OEM DATA WDA callback alloc fail");
10088 VOS_ASSERT(0) ;
10089 return;
10090 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010091
Jeff Johnsone7245742012-09-05 17:12:55 -070010092 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010093 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10094 vos_mem_free(pWdaParams->wdaMsgParam);
10095 vos_mem_free(pWdaParams) ;
10096
Jeff Johnsone7245742012-09-05 17:12:55 -070010097 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080010098 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070010099 * Also, here success always means that we have atleast one BSSID.
10100 */
10101 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
10102
10103 //enable Tx
10104 status = WDA_ResumeDataTx(pWDA);
10105 if(status != VOS_STATUS_SUCCESS)
10106 {
10107 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
10108 }
10109 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
10110 return ;
10111}
10112/*
10113 * FUNCTION: WDA_ProcessStartOemDataReq
10114 * Send Start Oem Data Req to WDI
10115 */
10116VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
10117 tStartOemDataReq *pOemDataReqParams)
10118{
10119 WDI_Status status = WDI_STATUS_SUCCESS;
10120 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010121 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070010122
10123 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
10124
10125 if(NULL == wdiOemDataReqParams)
10126 {
10127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010128 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010129 VOS_ASSERT(0);
10130 return VOS_STATUS_E_NOMEM;
10131 }
10132
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010133 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
10134 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
10135 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
10136 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070010137
10138 wdiOemDataReqParams->wdiReqStatusCB = NULL;
10139
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010140 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10141 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070010142 {
10143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010144 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010145 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010146 vos_mem_free(pOemDataReqParams);
10147 VOS_ASSERT(0);
10148 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070010149 }
Jeff Johnsone7245742012-09-05 17:12:55 -070010150
Bernald44a1ae2013-01-09 08:30:39 -080010151 pWdaParams->pWdaContext = (void*)pWDA;
10152 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
10153 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010154
10155 status = WDI_StartOemDataReq(wdiOemDataReqParams,
10156 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070010157
10158 if(IS_WDI_STATUS_FAILURE(status))
10159 {
10160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10161 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010162 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10163 vos_mem_free(pWdaParams->wdaMsgParam);
10164 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070010165 }
10166 return CONVERT_WDI2VOS_STATUS(status) ;
10167}
10168#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070010169/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010170 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010171 *
10172 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010173void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010174{
10175 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010177 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010178 if(NULL == pWdaParams)
10179 {
10180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010181 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010182 VOS_ASSERT(0) ;
10183 return ;
10184 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010185
10186 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10187 vos_mem_free(pWdaParams->wdaMsgParam);
10188 vos_mem_free(pWdaParams);
10189
10190 return ;
10191}
10192/*
10193 * FUNCTION: WDA_SetTxPerTrackingReqCallback
10194 * Free memory.
10195 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
10196 */
10197void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
10198{
10199 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10200
10201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10202 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10203
10204 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010205 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070010206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10207 "%s: pWdaParams received NULL", __func__);
10208 VOS_ASSERT(0);
10209 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010210 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010211
10212 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010213 {
10214 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010215 vos_mem_free(pWdaParams->wdaMsgParam);
10216 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010217 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010218
10219 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010220}
Jeff Johnson295189b2012-06-20 16:38:30 -070010221#ifdef WLAN_FEATURE_GTK_OFFLOAD
10222/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010223 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010224 *
10225 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010226void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010227 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010228{
10229 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10230
10231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010232 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010233
10234 VOS_ASSERT(NULL != pWdaParams);
10235
10236 vos_mem_free(pWdaParams->wdaMsgParam) ;
10237 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10238 vos_mem_free(pWdaParams) ;
10239
10240 //print a msg, nothing else to do
10241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010242 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010243
10244 return ;
10245}
Yue Ma7f44bbe2013-04-12 11:47:39 -070010246/*
10247 * FUNCTION: WDA_GTKOffloadReqCallback
10248 * Free memory.
10249 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
10250 */
10251void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
10252{
10253 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010254
Yue Ma7f44bbe2013-04-12 11:47:39 -070010255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10256 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10257
10258 if(NULL == pWdaParams)
10259 {
10260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10261 "%s: pWdaParams received NULL", __func__);
10262 VOS_ASSERT(0);
10263 return;
10264 }
10265
10266 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10267 {
10268 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10269 vos_mem_free(pWdaParams->wdaMsgParam);
10270 vos_mem_free(pWdaParams);
10271 }
10272
10273 return;
10274}
Jeff Johnson295189b2012-06-20 16:38:30 -070010275/*
10276 * FUNCTION: WDA_ProcessGTKOffloadReq
10277 * Request to WDI to set the filter to minimize unnecessary host wakeup due
10278 * to broadcast traffic (sta mode).
10279 */
10280VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
10281 tpSirGtkOffloadParams pGtkOffloadParams)
10282{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010283 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010284 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
10285 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
10286 sizeof(WDI_GtkOffloadReqMsg)) ;
10287 tWDA_ReqParams *pWdaParams ;
10288
10289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010290 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010291
10292 if(NULL == wdiGtkOffloadReqMsg)
10293 {
10294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010295 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010296 VOS_ASSERT(0);
10297 return VOS_STATUS_E_NOMEM;
10298 }
10299
10300 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10301 if(NULL == pWdaParams)
10302 {
10303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010304 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010305 VOS_ASSERT(0);
10306 vos_mem_free(wdiGtkOffloadReqMsg);
10307 return VOS_STATUS_E_NOMEM;
10308 }
10309
10310 //
10311 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
10312 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010313
10314 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010315 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010316
Jeff Johnson295189b2012-06-20 16:38:30 -070010317 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
10318 // Copy KCK
10319 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
10320 // Copy KEK
10321 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
10322 // Copy KeyReplayCounter
10323 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
10324 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
10325
Yue Ma7f44bbe2013-04-12 11:47:39 -070010326 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
10327 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010328
Jeff Johnson295189b2012-06-20 16:38:30 -070010329
10330 /* Store Params pass it to WDI */
10331 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
10332 pWdaParams->pWdaContext = pWDA;
10333 /* Store param pointer as passed in by caller */
10334 pWdaParams->wdaMsgParam = pGtkOffloadParams;
10335
Yue Ma7f44bbe2013-04-12 11:47:39 -070010336 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010337
10338 if(IS_WDI_STATUS_FAILURE(status))
10339 {
10340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10341 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
10342 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10343 vos_mem_free(pWdaParams->wdaMsgParam);
10344 vos_mem_free(pWdaParams);
10345 }
10346
10347 return CONVERT_WDI2VOS_STATUS(status) ;
10348}
10349
10350/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010351 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010352 *
10353 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010354void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010355 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010356{
10357 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10358 tWDA_CbContext *pWDA;
10359 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Sameer Thalappile8202632013-07-09 11:07:40 -070010360 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010361 vos_msg_t vosMsg;
10362
10363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010364 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010365
10366 VOS_ASSERT(NULL != pWdaParams);
10367
10368 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
10369 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
10370
10371 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
10372 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
10373
10374 /* Message Header */
10375 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070010376 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010377
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010378 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
10379 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
10380 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
10381 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
10382 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070010383
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010384 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
10385 pwdiGtkOffloadGetInfoRsparams->bssId,
10386 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010387 /* VOS message wrapper */
10388 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
10389 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
10390 vosMsg.bodyval = 0;
10391
10392 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10393 {
10394 /* free the mem and return */
10395 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
10396 }
10397
10398 vos_mem_free(pWdaParams->wdaMsgParam) ;
10399 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10400 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010401
10402 return;
10403}
10404/*
10405 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
10406 * Free memory and send RSP back to SME.
10407 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
10408 */
10409void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
10410{
10411 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10412 vos_msg_t vosMsg;
10413
10414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10415 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10416
10417 if(NULL == pWdaParams)
10418 {
10419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10420 "%s: pWdaParams received NULL", __func__);
10421 VOS_ASSERT(0);
10422 return;
10423 }
10424
10425 /* VOS message wrapper */
10426 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
10427 vosMsg.bodyptr = NULL;
10428 vosMsg.bodyval = 0;
10429
10430 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10431 {
10432 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10433 vos_mem_free(pWdaParams->wdaMsgParam);
10434 vos_mem_free(pWdaParams);
10435 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
10436 }
10437
10438 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010439}
10440#endif
10441
10442/*
10443 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
10444 * Request to WDI to set Tx Per Tracking configurations
10445 */
10446VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
10447{
10448 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010449 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010450 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
10451 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
10452 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
10453 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010455 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010456 if(NULL == pwdiSetTxPerTrackingReqParams)
10457 {
10458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010459 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010460 vos_mem_free(pTxPerTrackingParams);
10461 VOS_ASSERT(0);
10462 return VOS_STATUS_E_NOMEM;
10463 }
10464 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10465 if(NULL == pWdaParams)
10466 {
10467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010468 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010469 vos_mem_free(pwdiSetTxPerTrackingReqParams);
10470 vos_mem_free(pTxPerTrackingParams);
10471 VOS_ASSERT(0);
10472 return VOS_STATUS_E_NOMEM;
10473 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010474 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
10475 pTxPerTrackingParams->ucTxPerTrackingEnable;
10476 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
10477 pTxPerTrackingParams->ucTxPerTrackingPeriod;
10478 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
10479 pTxPerTrackingParams->ucTxPerTrackingRatio;
10480 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
10481 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010482 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
10483 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010484 /* Store param pointer as passed in by caller */
10485 /* store Params pass it to WDI
10486 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
10487 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
10488 pWdaParams->pWdaContext = pWDA;
10489 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010490 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010491 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010492 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010493 {
10494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10495 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010496 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010497 vos_mem_free(pWdaParams->wdaMsgParam) ;
10498 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10499 vos_mem_free(pWdaParams) ;
10500 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010501 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010502
10503}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010504/*
10505 * FUNCTION: WDA_HALDumpCmdCallback
10506 * Send the VOS complete .
10507 */
10508void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
10509 void* pUserData)
10510{
10511 tANI_U8 *buffer = NULL;
10512 tWDA_CbContext *pWDA = NULL;
10513 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010514 if(NULL == pWdaParams)
10515 {
10516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010517 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010518 VOS_ASSERT(0) ;
10519 return ;
10520 }
10521
10522 pWDA = pWdaParams->pWdaContext;
10523 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010524 if(wdiRspParams->usBufferLen > 0)
10525 {
10526 /*Copy the Resp data to UMAC supplied buffer*/
10527 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
10528 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010529 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10530 vos_mem_free(pWdaParams);
10531
10532 /* Indicate VOSS about the start complete */
10533 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070010534 return ;
10535}
10536
Jeff Johnson295189b2012-06-20 16:38:30 -070010537/*
10538 * FUNCTION: WDA_ProcessHALDumpCmdReq
10539 * Send Dump command to WDI
10540 */
10541VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
10542 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
10543 tANI_U32 arg4, tANI_U8 *pBuffer)
10544{
10545 WDI_Status status = WDI_STATUS_SUCCESS;
10546 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
10547 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
10548 tWDA_ReqParams *pWdaParams ;
10549 pVosContextType pVosContext = NULL;
10550 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010551 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
10552 (void *)pMac);
10553
10554 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10555 if(NULL == pWdaParams)
10556 {
10557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010558 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010559 return VOS_STATUS_E_NOMEM;
10560 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010561 /* Allocate memory WDI request structure*/
10562 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
10563 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
10564 if(NULL == wdiHALDumpCmdReqParam)
10565 {
10566 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10567 "WDA HAL DUMP Command buffer alloc fail");
10568 vos_mem_free(pWdaParams);
10569 return WDI_STATUS_E_FAILURE;
10570 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010571 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070010572 /* Extract the arguments */
10573 wdiHalDumpCmdInfo->command = cmd;
10574 wdiHalDumpCmdInfo->argument1 = arg1;
10575 wdiHalDumpCmdInfo->argument2 = arg2;
10576 wdiHalDumpCmdInfo->argument3 = arg3;
10577 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070010578 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010579 pWdaParams->pWdaContext = pVosContext->pWDAContext;
10580
10581 /* Response message will be passed through the buffer */
10582 pWdaParams->wdaMsgParam = (void *)pBuffer;
10583
10584 /* store Params pass it to WDI */
10585 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010586 /* Send command to WDI */
10587 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -080010588 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), WDA_DUMPCMD_WAIT_TIMEOUT );
Jeff Johnson295189b2012-06-20 16:38:30 -070010589 if ( vStatus != VOS_STATUS_SUCCESS )
10590 {
10591 if ( vStatus == VOS_STATUS_E_TIMEOUT )
10592 {
10593 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010594 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010595 }
10596 else
10597 {
10598 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010599 "%s: WDA_HALDUMP reporting other error",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010600 }
10601 VOS_ASSERT(0);
10602 }
10603 return status;
10604}
Jeff Johnson295189b2012-06-20 16:38:30 -070010605#ifdef WLAN_FEATURE_GTK_OFFLOAD
10606/*
10607 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
10608 * Request to WDI to get GTK Offload Information
10609 */
10610VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
10611 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
10612{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010613 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010614 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
10615 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
10616 tWDA_ReqParams *pWdaParams ;
10617
10618 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
10619 {
10620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010621 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010622 VOS_ASSERT(0);
10623 return VOS_STATUS_E_NOMEM;
10624 }
10625
10626 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10627 if(NULL == pWdaParams)
10628 {
10629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010630 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010631 VOS_ASSERT(0);
10632 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
10633 return VOS_STATUS_E_NOMEM;
10634 }
10635
Yue Ma7f44bbe2013-04-12 11:47:39 -070010636 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
10637 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010638
Jeff Johnson295189b2012-06-20 16:38:30 -070010639 /* Store Params pass it to WDI */
10640 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
10641 pWdaParams->pWdaContext = pWDA;
10642 /* Store param pointer as passed in by caller */
10643 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
10644
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010645 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010646 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010647
Yue Ma7f44bbe2013-04-12 11:47:39 -070010648 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010649
10650 if(IS_WDI_STATUS_FAILURE(status))
10651 {
10652 /* failure returned by WDI API */
10653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10654 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
10655 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10656 vos_mem_free(pWdaParams) ;
10657 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
10658 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
10659 }
10660
10661 return CONVERT_WDI2VOS_STATUS(status) ;
10662}
10663#endif // WLAN_FEATURE_GTK_OFFLOAD
10664
10665/*
Yue Mab9c86f42013-08-14 15:59:08 -070010666 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
10667 *
10668 */
10669VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
10670 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
10671{
10672 WDI_Status wdiStatus;
10673 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
10674
10675 addPeriodicTxPtrnParams =
10676 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
10677
10678 if (NULL == addPeriodicTxPtrnParams)
10679 {
10680 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10681 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
10682 __func__);
10683
10684 return VOS_STATUS_E_NOMEM;
10685 }
10686
10687 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
10688 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
10689
10690 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
10691 addPeriodicTxPtrnParams->pUserData = pWDA;
10692
10693 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
10694
10695 if (WDI_STATUS_PENDING == wdiStatus)
10696 {
10697 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10698 "Pending received for %s:%d", __func__, __LINE__ );
10699 }
10700 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
10701 {
10702 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10703 "Failure in %s:%d", __func__, __LINE__ );
10704 }
10705
10706 vos_mem_free(addPeriodicTxPtrnParams);
10707
10708 return CONVERT_WDI2VOS_STATUS(wdiStatus);
10709}
10710
10711/*
10712 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
10713 *
10714 */
10715VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
10716 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
10717{
10718 WDI_Status wdiStatus;
10719 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
10720
10721 delPeriodicTxPtrnParams =
10722 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
10723
10724 if (NULL == delPeriodicTxPtrnParams)
10725 {
10726 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10727 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
10728 __func__);
10729
10730 return VOS_STATUS_E_NOMEM;
10731 }
10732
10733 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
10734 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
10735
10736 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
10737 delPeriodicTxPtrnParams->pUserData = pWDA;
10738
10739 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
10740
10741 if (WDI_STATUS_PENDING == wdiStatus)
10742 {
10743 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10744 "Pending received for %s:%d", __func__, __LINE__ );
10745 }
10746 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
10747 {
10748 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10749 "Failure in %s:%d", __func__, __LINE__ );
10750 }
10751
10752 vos_mem_free(delPeriodicTxPtrnParams);
10753
10754 return CONVERT_WDI2VOS_STATUS(wdiStatus);
10755}
10756
Rajeev79dbe4c2013-10-05 11:03:42 +053010757#ifdef FEATURE_WLAN_BATCH_SCAN
10758/*
10759 * FUNCTION: WDA_ProcessStopBatchScanInd
10760 *
10761 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
10762 *
10763 * PARAM:
10764 * pWDA: pointer to WDA context
10765 * pReq: pointer to stop batch scan request
10766 */
10767VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
10768 tSirStopBatchScanInd *pReq)
10769{
10770 WDI_Status wdiStatus;
10771 WDI_StopBatchScanIndType wdiReq;
10772
10773 wdiReq.param = pReq->param;
10774
10775 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
10776
10777 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
10778 {
10779 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10780 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
10781 }
10782
10783 vos_mem_free(pReq);
10784
10785 return CONVERT_WDI2VOS_STATUS(wdiStatus);
10786}
10787/*==========================================================================
10788 FUNCTION WDA_ProcessTriggerBatchScanResultInd
10789
10790 DESCRIPTION
10791 API to pull batch scan result from FW
10792
10793 PARAMETERS
10794 pWDA: Pointer to WDA context
10795 pGetBatchScanReq: Pointer to get batch scan result indication
10796
10797 RETURN VALUE
10798 NONE
10799
10800===========================================================================*/
10801VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
10802 tSirTriggerBatchScanResultInd *pReq)
10803{
10804 WDI_Status wdiStatus;
10805 WDI_TriggerBatchScanResultIndType wdiReq;
10806
10807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10808 "------> %s " ,__func__);
10809
10810 wdiReq.param = pReq->param;
10811
10812 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
10813
10814 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
10815 {
10816 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10817 "Trigger batch scan result ind failed %s:%d",
10818 __func__, wdiStatus);
10819 }
10820
10821 vos_mem_free(pReq);
10822
10823 return CONVERT_WDI2VOS_STATUS(wdiStatus);
10824}
10825
10826/*==========================================================================
10827 FUNCTION WDA_SetBatchScanRespCallback
10828
10829 DESCRIPTION
10830 API to process set batch scan response from FW
10831
10832 PARAMETERS
10833 pRsp: Pointer to set batch scan response
10834 pUserData: Pointer to user data
10835
10836 RETURN VALUE
10837 NONE
10838
10839===========================================================================*/
10840void WDA_SetBatchScanRespCallback
10841(
10842 WDI_SetBatchScanRspType *pRsp,
10843 void* pUserData
10844)
10845{
10846 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
10847 tpAniSirGlobal pMac;
10848 void *pCallbackContext;
10849 tWDA_CbContext *pWDA = NULL ;
10850 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10851
10852
10853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10854 "<------ %s " ,__func__);
10855 if (NULL == pWdaParams)
10856 {
10857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10858 "%s: pWdaParams received NULL", __func__);
10859 VOS_ASSERT(0) ;
10860 return ;
10861 }
10862
10863 /*extract WDA context*/
10864 pWDA = pWdaParams->pWdaContext;
10865 if (NULL == pWDA)
10866 {
10867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10868 "%s:pWDA is NULL can't invole HDD callback",
10869 __func__);
10870 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10871 vos_mem_free(pWdaParams->wdaMsgParam);
10872 vos_mem_free(pWdaParams);
10873 VOS_ASSERT(0);
10874 return;
10875 }
10876
10877 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10878 vos_mem_free(pWdaParams->wdaMsgParam);
10879 vos_mem_free(pWdaParams);
10880
10881 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
10882 if (NULL == pMac)
10883 {
10884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10885 "%s:pMac is NULL", __func__);
10886 VOS_ASSERT(0);
10887 return;
10888 }
10889
10890 pHddSetBatchScanRsp =
10891 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
10892 if (NULL == pHddSetBatchScanRsp)
10893 {
10894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10895 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
10896 VOS_ASSERT(0);
10897 return;
10898 }
10899
10900 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
10901
10902 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
10903 /*call hdd callback with set batch scan response data*/
10904 if(pMac->pmc.setBatchScanReqCallback)
10905 {
10906 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
10907 }
10908 else
10909 {
10910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10911 "%s:HDD callback is null", __func__);
10912 VOS_ASSERT(0);
10913 }
10914
10915 vos_mem_free(pHddSetBatchScanRsp);
10916 return ;
10917}
10918
10919/*==========================================================================
10920 FUNCTION WDA_ProcessSetBatchScanReq
10921
10922 DESCRIPTION
10923 API to send set batch scan request to WDI
10924
10925 PARAMETERS
10926 pWDA: Pointer to WDA context
10927 pSetBatchScanReq: Pointer to set batch scan req
10928
10929 RETURN VALUE
10930 NONE
10931
10932===========================================================================*/
10933VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
10934 tSirSetBatchScanReq *pSetBatchScanReq)
10935{
10936 WDI_Status status;
10937 tWDA_ReqParams *pWdaParams ;
10938 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
10939
10940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10941 "------> %s " ,__func__);
10942
10943 pWdiSetBatchScanReq =
10944 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
10945 if (NULL == pWdiSetBatchScanReq)
10946 {
10947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10948 "%s: VOS MEM Alloc Failure", __func__);
10949 vos_mem_free(pSetBatchScanReq);
10950 VOS_ASSERT(0);
10951 return VOS_STATUS_E_NOMEM;
10952 }
10953
10954 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
10955 if (NULL == pWdaParams)
10956 {
10957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10958 "%s: VOS MEM Alloc Failure", __func__);
10959 VOS_ASSERT(0);
10960 vos_mem_free(pSetBatchScanReq);
10961 vos_mem_free(pWdiSetBatchScanReq);
10962 return VOS_STATUS_E_NOMEM;
10963 }
10964
10965 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
10966 pWdiSetBatchScanReq->numberOfScansToBatch =
10967 pSetBatchScanReq->numberOfScansToBatch;
10968 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
10969 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
10970 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
10971
10972 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
10973 pWdaParams->pWdaContext = pWDA;
10974 pWdaParams->wdaMsgParam = pSetBatchScanReq;
10975
10976 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
10977 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
10978 if (IS_WDI_STATUS_FAILURE(status))
10979 {
10980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10981 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
10982 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10983 vos_mem_free(pWdaParams->wdaMsgParam);
10984 vos_mem_free(pWdaParams);
10985 }
10986 return CONVERT_WDI2VOS_STATUS(status);
10987}
10988
10989#endif
10990
Yue Mab9c86f42013-08-14 15:59:08 -070010991/*
Chittajit Mitraf5413a42013-10-18 14:20:08 -070010992 * FUNCTION: WDA_ProcessRateUpdateInd
10993 *
10994 */
10995VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
10996 tSirRateUpdateInd *pRateUpdateParams)
10997{
10998 WDI_Status wdiStatus;
10999 WDI_RateUpdateIndParams rateUpdateParams;
11000
11001 vos_mem_copy(rateUpdateParams.bssid,
11002 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
11003
11004 rateUpdateParams.ucastDataRateTxFlag =
11005 pRateUpdateParams->ucastDataRateTxFlag;
11006 rateUpdateParams.reliableMcastDataRateTxFlag =
11007 pRateUpdateParams->reliableMcastDataRateTxFlag;
11008 rateUpdateParams.mcastDataRate24GHzTxFlag =
11009 pRateUpdateParams->mcastDataRate24GHzTxFlag;
11010 rateUpdateParams.mcastDataRate5GHzTxFlag =
11011 pRateUpdateParams->mcastDataRate5GHzTxFlag;
11012
11013 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
11014 rateUpdateParams.reliableMcastDataRate =
11015 pRateUpdateParams->reliableMcastDataRate;
11016 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
11017 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
11018
11019 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
11020 rateUpdateParams.pUserData = pWDA;
11021
11022 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
11023
11024 if (WDI_STATUS_PENDING == wdiStatus)
11025 {
11026 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11027 "Pending received for %s:%d", __func__, __LINE__ );
11028 }
11029 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11030 {
11031 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11032 "Failure in %s:%d", __func__, __LINE__ );
11033 }
11034
11035 vos_mem_free(pRateUpdateParams);
11036
11037 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11038}
11039
11040/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011041 * -------------------------------------------------------------------------
11042 * DATA interface with WDI for Mgmt Frames
11043 * -------------------------------------------------------------------------
11044 */
Jeff Johnson295189b2012-06-20 16:38:30 -070011045/*
11046 * FUNCTION: WDA_TxComplete
11047 * Callback function for the WDA_TxPacket
11048 */
11049VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
11050 VOS_STATUS status )
11051{
11052
11053 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
11054 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011055 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011056
11057 if(NULL == wdaContext)
11058 {
11059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11060 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011061 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011062 VOS_ASSERT(0);
11063 return VOS_STATUS_E_FAILURE;
11064 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011065
11066 /*Check if frame was timed out or not*/
11067 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
11068 (v_PVOID_t)&uUserData);
11069
11070 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
11071 {
11072 /*Discard frame - no further processing is needed*/
11073 vos_pkt_return_packet(pData);
11074 return VOS_STATUS_SUCCESS;
11075 }
11076
Jeff Johnson295189b2012-06-20 16:38:30 -070011077 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
11078 if( NULL!=wdaContext->pTxCbFunc)
11079 {
11080 /*check if packet is freed already*/
11081 if(vos_atomic_set_U32(&wdaContext->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED) == (v_U32_t)pData)
11082 {
11083 wdaContext->pTxCbFunc(pMac, pData);
11084 }
11085 else
11086 {
11087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053011088 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011089 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070011090 //Return from here since we reaching here because the packet already timeout
11091 return status;
11092 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011093 }
11094
11095 /*
11096 * Trigger the event to bring the HAL TL Tx complete function to come
11097 * out of wait
11098 * Let the coe above to complete the packet first. When this event is set,
11099 * the thread waiting for the event may run and set Vospacket_freed causing the original
11100 * packet not being freed.
11101 */
11102 status = vos_event_set(&wdaContext->txFrameEvent);
11103 if(!VOS_IS_STATUS_SUCCESS(status))
11104 {
11105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011106 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011107 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011108 return status;
11109}
Jeff Johnson295189b2012-06-20 16:38:30 -070011110/*
11111 * FUNCTION: WDA_TxPacket
11112 * Forward TX management frame to WDI
11113 */
11114VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
11115 void *pFrmBuf,
11116 tANI_U16 frmLen,
11117 eFrameType frmType,
11118 eFrameTxDir txDir,
11119 tANI_U8 tid,
11120 pWDATxRxCompFunc pCompFunc,
11121 void *pData,
11122 pWDAAckFnTxComp pAckTxComp,
11123 tANI_U8 txFlag)
11124{
11125 VOS_STATUS status = VOS_STATUS_SUCCESS ;
11126 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
11127 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
11128 tANI_U8 eventIdx = 0;
11129 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
11130 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -070011131 if((NULL == pWDA)||(NULL == pFrmBuf))
11132 {
11133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053011134 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011135 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070011136 VOS_ASSERT(0);
11137 return VOS_STATUS_E_FAILURE;
11138 }
11139
11140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011141 "Tx Mgmt Frame Subtype: %d alloc(%p)", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070011142 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
11143 if(NULL == pMac)
11144 {
11145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011146 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011147 VOS_ASSERT(0);
11148 return VOS_STATUS_E_FAILURE;
11149 }
11150
11151
11152
11153 /* store the call back function in WDA context */
11154 pWDA->pTxCbFunc = pCompFunc;
11155 /* store the call back for the function of ackTxComplete */
11156 if( pAckTxComp )
11157 {
Jeff Johnsone7245742012-09-05 17:12:55 -070011158 if( NULL != pWDA->pAckTxCbFunc )
11159 {
11160 /* Already TxComp is active no need to active again */
11161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011162 "There is already one request pending for tx complete");
Jeff Johnsone7245742012-09-05 17:12:55 -070011163 pWDA->pAckTxCbFunc( pMac, 0);
11164 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011165
Jeff Johnsone7245742012-09-05 17:12:55 -070011166 if( VOS_STATUS_SUCCESS !=
11167 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11168 {
11169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11170 "Tx Complete timeout Timer Stop Failed ");
11171 }
11172 else
11173 {
11174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080011175 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070011176 }
11177 }
11178
11179 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
11180 pWDA->pAckTxCbFunc = pAckTxComp;
11181 if( VOS_STATUS_SUCCESS !=
11182 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
11183 {
11184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11185 "Tx Complete Timer Start Failed ");
11186 pWDA->pAckTxCbFunc = NULL;
11187 return eHAL_STATUS_FAILURE;
11188 }
11189 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011190 /* Reset the event to be not signalled */
11191 status = vos_event_reset(&pWDA->txFrameEvent);
11192 if(!VOS_IS_STATUS_SUCCESS(status))
11193 {
11194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011195 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011196 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
11197 if( pAckTxComp )
11198 {
11199 pWDA->pAckTxCbFunc = NULL;
11200 if( VOS_STATUS_SUCCESS !=
11201 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11202 {
11203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11204 "Tx Complete timeout Timer Stop Failed ");
11205 }
11206 }
11207 return VOS_STATUS_E_FAILURE;
11208 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011209
11210 /* If Peer Sta mask is set don't overwrite to self sta */
11211 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070011212 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011213 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070011214 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011215 else
11216 {
Ganesh K08bce952012-12-13 15:04:41 -080011217 /* Get system role, use the self station if in unknown role or STA role */
11218 systemRole = wdaGetGlobalSystemRole(pMac);
11219 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
11220 (( eSYSTEM_STA_ROLE == systemRole )
Mohit Khanna698ba2a2012-12-04 15:08:18 -080011221#if defined FEATURE_WLAN_CCX || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080011222 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011223#endif
Ganesh K08bce952012-12-13 15:04:41 -080011224 ))
11225 {
11226 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
11227 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080011228 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011229
Jeff Johnsone7245742012-09-05 17:12:55 -070011230 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
11231 disassoc frame reaches the HW, HAL has already deleted the peer station */
11232 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070011233 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080011234 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070011235 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070011236 {
Jeff Johnson295189b2012-06-20 16:38:30 -070011237 /*Send Probe request frames on self sta idx*/
11238 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070011239 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011240 /* Since we donot want probe responses to be retried, send probe responses
11241 through the NO_ACK queues */
11242 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
11243 {
11244 //probe response is sent out using self station and no retries options.
11245 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
11246 }
11247 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
11248 {
11249 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
11250 }
11251 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011252 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
11253
11254 /*Set frame tag to 0
11255 We will use the WDA user data in order to tag a frame as expired*/
11256 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
11257 (v_PVOID_t)0);
11258
11259
11260 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
11261 frmLen, ucTypeSubType, tid,
11262 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
11263 {
11264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011265 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011266 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
11267 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);/*reset the VosPacket_freed*/
11268 if( pAckTxComp )
11269 {
11270 pWDA->pAckTxCbFunc = NULL;
11271 if( VOS_STATUS_SUCCESS !=
11272 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11273 {
11274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11275 "Tx Complete timeout Timer Stop Failed ");
11276 }
11277 }
11278 return VOS_STATUS_E_FAILURE;
11279 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011280 /*
11281 * Wait for the event to be set by the TL, to get the response of TX
11282 * complete, this event should be set by the Callback function called by TL
11283 */
11284 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
11285 &eventIdx);
11286 if(!VOS_IS_STATUS_SUCCESS(status))
11287 {
11288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11289 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011290 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011291 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
11292 after the packet gets completed(packet freed once)*/
11293
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070011294 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
schang6295e542013-03-12 15:31:23 -070011295 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070011296
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011297 /*Tag Frame as timed out for later deletion*/
11298 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
11299 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
11300
Jeff Johnson295189b2012-06-20 16:38:30 -070011301 /* check whether the packet was freed already,so need not free again when
11302 * TL calls the WDA_Txcomplete routine
11303 */
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011304 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);
11305 /*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 -070011306 {
11307 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011308 } */
11309
Jeff Johnson295189b2012-06-20 16:38:30 -070011310 if( pAckTxComp )
11311 {
11312 pWDA->pAckTxCbFunc = NULL;
11313 if( VOS_STATUS_SUCCESS !=
11314 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11315 {
11316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11317 "Tx Complete timeout Timer Stop Failed ");
11318 }
11319 }
11320 status = VOS_STATUS_E_FAILURE;
11321 }
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053011322#ifdef WLAN_DUMP_MGMTFRAMES
11323 if (VOS_IS_STATUS_SUCCESS(status))
11324 {
11325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11326 "%s() TX packet : SubType %d", __func__,pFc->subType);
11327 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11328 pData, frmLen);
11329 }
11330#endif
11331
Jeff Johnson295189b2012-06-20 16:38:30 -070011332 return status;
11333}
Jeff Johnson295189b2012-06-20 16:38:30 -070011334/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011335 * FUNCTION: WDA_ProcessDHCPStartInd
11336 * Forward DHCP Start to WDI
11337 */
11338static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
11339 tAniDHCPInd *dhcpStartInd)
11340{
11341 WDI_Status status;
11342 WDI_DHCPInd *wdiDHCPInd = (WDI_DHCPInd*)vos_mem_malloc(sizeof(WDI_DHCPInd)) ;
11343 if (NULL == wdiDHCPInd)
11344 {
11345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11346 "%s: VOS MEM Alloc Failure", __func__);
11347 VOS_ASSERT(0);
11348 vos_mem_free(dhcpStartInd);
11349 return VOS_STATUS_E_NOMEM;
11350 }
11351
11352 wdiDHCPInd->device_mode = dhcpStartInd->device_mode;
11353 vos_mem_copy(wdiDHCPInd->macAddr, dhcpStartInd->macAddr,
11354 sizeof(tSirMacAddr));
11355
11356 status = WDI_dhcpStartInd(wdiDHCPInd);
11357
11358 if (IS_WDI_STATUS_FAILURE(status))
11359 {
11360 vos_mem_free(wdiDHCPInd);
11361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11362 "DHCP Start Indication failed");
11363 }
11364 vos_mem_free(dhcpStartInd);
11365 return CONVERT_WDI2VOS_STATUS(status) ;
11366}
11367
11368 /*
11369 * FUNCTION: WDA_ProcessDHCPStopInd
11370 * Forward DHCP Stop to WDI
11371 */
11372 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
11373 tAniDHCPInd *dhcpStopInd)
11374 {
11375 WDI_Status status;
11376 WDI_DHCPInd *wdiDHCPInd = (WDI_DHCPInd*)vos_mem_malloc(sizeof(WDI_DHCPInd)) ;
11377 if (NULL == wdiDHCPInd)
11378 {
11379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11380 "%s: VOS MEM Alloc Failure", __func__);
11381 VOS_ASSERT(0);
11382 vos_mem_free(dhcpStopInd);
11383 return VOS_STATUS_E_NOMEM;
11384 }
11385 wdiDHCPInd->device_mode = dhcpStopInd->device_mode;
11386 vos_mem_copy(wdiDHCPInd->macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
11387 status = WDI_dhcpStopInd(wdiDHCPInd);
11388 if (IS_WDI_STATUS_FAILURE(status))
11389 {
11390 vos_mem_free(wdiDHCPInd);
11391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11392 "DHCP Start Indication failed");
11393 }
11394 vos_mem_free(dhcpStopInd);
11395 return CONVERT_WDI2VOS_STATUS(status) ;
11396 }
11397
11398/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011399 * FUNCTION: WDA_McProcessMsg
11400 * Trigger DAL-AL to start CFG download
11401 */
11402VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
11403{
11404 VOS_STATUS status = VOS_STATUS_SUCCESS;
11405 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011406 if(NULL == pMsg)
11407 {
11408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011409 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011410 VOS_ASSERT(0);
11411 return VOS_STATUS_E_FAILURE;
11412 }
11413
11414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011415 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070011416
11417 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
11418 if(NULL == pWDA )
11419 {
11420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011421 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011422 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070011423 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070011424 return VOS_STATUS_E_FAILURE;
11425 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011426 /* Process all the WDA messages.. */
11427 switch( pMsg->type )
11428 {
11429 case WNI_CFG_DNLD_REQ:
11430 {
11431 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070011432 /* call WDA complete event if config download success */
11433 if( VOS_IS_STATUS_SUCCESS(status) )
11434 {
11435 vos_WDAComplete_cback(pVosContext);
11436 }
11437 else
11438 {
11439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11440 "WDA Config Download failure" );
11441 }
11442 break ;
11443 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011444 /*
11445 * Init SCAN request from PE, convert it into DAL format
11446 * and send it to DAL
11447 */
11448 case WDA_INIT_SCAN_REQ:
11449 {
11450 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
11451 break ;
11452 }
11453 /* start SCAN request from PE */
11454 case WDA_START_SCAN_REQ:
11455 {
11456 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
11457 break ;
11458 }
11459 /* end SCAN request from PE */
11460 case WDA_END_SCAN_REQ:
11461 {
11462 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
11463 break ;
11464 }
11465 /* end SCAN request from PE */
11466 case WDA_FINISH_SCAN_REQ:
11467 {
11468 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
11469 break ;
11470 }
11471 /* join request from PE */
11472 case WDA_CHNL_SWITCH_REQ:
11473 {
11474 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
11475 {
11476 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
11477 }
11478 else
11479 {
11480 WDA_ProcessChannelSwitchReq(pWDA,
11481 (tSwitchChannelParams*)pMsg->bodyptr) ;
11482 }
11483 break ;
11484 }
11485 /* ADD BSS request from PE */
11486 case WDA_ADD_BSS_REQ:
11487 {
11488 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
11489 break ;
11490 }
11491 case WDA_ADD_STA_REQ:
11492 {
11493 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
11494 break ;
11495 }
11496 case WDA_DELETE_BSS_REQ:
11497 {
Jeff Johnson295189b2012-06-20 16:38:30 -070011498 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
11499 break ;
11500 }
11501 case WDA_DELETE_STA_REQ:
11502 {
Jeff Johnson295189b2012-06-20 16:38:30 -070011503 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
11504 break ;
11505 }
11506 case WDA_CONFIG_PARAM_UPDATE_REQ:
11507 {
11508 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
11509 break ;
11510 }
11511 case WDA_SET_BSSKEY_REQ:
11512 {
11513 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
11514 break ;
11515 }
11516 case WDA_SET_STAKEY_REQ:
11517 {
11518 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
11519 break ;
11520 }
11521 case WDA_SET_STA_BCASTKEY_REQ:
11522 {
11523 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
11524 break ;
11525 }
11526 case WDA_REMOVE_BSSKEY_REQ:
11527 {
11528 WDA_ProcessRemoveBssKeyReq(pWDA,
11529 (tRemoveBssKeyParams *)pMsg->bodyptr);
11530 break ;
11531 }
11532 case WDA_REMOVE_STAKEY_REQ:
11533 {
11534 WDA_ProcessRemoveStaKeyReq(pWDA,
11535 (tRemoveStaKeyParams *)pMsg->bodyptr);
11536 break ;
11537 }
11538 case WDA_REMOVE_STA_BCASTKEY_REQ:
11539 {
11540 /* TODO: currently UMAC is not sending this request, Add the code for
11541 handling this request when UMAC supports */
11542 break;
11543 }
11544#ifdef FEATURE_WLAN_CCX
11545 case WDA_TSM_STATS_REQ:
11546 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070011547 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070011548 break;
11549 }
11550#endif
11551 case WDA_UPDATE_EDCA_PROFILE_IND:
11552 {
11553 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
11554 break;
11555 }
11556 case WDA_ADD_TS_REQ:
11557 {
11558 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
11559 break;
11560 }
11561 case WDA_DEL_TS_REQ:
11562 {
11563 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
11564 break;
11565 }
11566 case WDA_ADDBA_REQ:
11567 {
11568 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
11569 break;
11570 }
11571 case WDA_DELBA_IND:
11572 {
11573 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
11574 break;
11575 }
11576 case WDA_SET_LINK_STATE:
11577 {
11578 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
11579 break;
11580 }
11581 case WDA_GET_STATISTICS_REQ:
11582 {
11583 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
11584 break;
11585 }
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080011586#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
11587 case WDA_GET_ROAM_RSSI_REQ:
11588 {
11589 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
11590 break;
11591 }
11592#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011593 case WDA_PWR_SAVE_CFG:
11594 {
11595 if(pWDA->wdaState == WDA_READY_STATE)
11596 {
11597 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
11598 }
11599 else
11600 {
11601 if(NULL != pMsg->bodyptr)
11602 {
11603 vos_mem_free(pMsg->bodyptr);
11604 }
11605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11606 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
11607 }
11608 break;
11609 }
11610 case WDA_ENTER_IMPS_REQ:
11611 {
11612 if(pWDA->wdaState == WDA_READY_STATE)
11613 {
11614 WDA_ProcessEnterImpsReq(pWDA);
11615 }
11616 else
11617 {
11618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11619 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
11620 }
11621 break;
11622 }
11623 case WDA_EXIT_IMPS_REQ:
11624 {
11625 if(pWDA->wdaState == WDA_READY_STATE)
11626 {
11627 WDA_ProcessExitImpsReq(pWDA);
11628 }
11629 else
11630 {
11631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11632 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
11633 }
11634 break;
11635 }
11636 case WDA_ENTER_BMPS_REQ:
11637 {
11638 if(pWDA->wdaState == WDA_READY_STATE)
11639 {
11640 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
11641 }
11642 else
11643 {
11644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11645 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
11646 }
11647 break;
11648 }
11649 case WDA_EXIT_BMPS_REQ:
11650 {
11651 if(pWDA->wdaState == WDA_READY_STATE)
11652 {
11653 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
11654 }
11655 else
11656 {
11657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11658 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
11659 }
11660 break;
11661 }
11662 case WDA_ENTER_UAPSD_REQ:
11663 {
11664 if(pWDA->wdaState == WDA_READY_STATE)
11665 {
11666 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
11667 }
11668 else
11669 {
11670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11671 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
11672 }
11673 break;
11674 }
11675 case WDA_EXIT_UAPSD_REQ:
11676 {
11677 if(pWDA->wdaState == WDA_READY_STATE)
11678 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011679 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070011680 }
11681 else
11682 {
11683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11684 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
11685 }
11686 break;
11687 }
11688 case WDA_UPDATE_UAPSD_IND:
11689 {
11690 if(pWDA->wdaState == WDA_READY_STATE)
11691 {
11692 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
11693 }
11694 else
11695 {
11696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11697 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
11698 }
11699 break;
11700 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011701 case WDA_REGISTER_PE_CALLBACK :
11702 {
11703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11704 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
11705 /*TODO: store the PE callback */
11706 /* Do Nothing? MSG Body should be freed at here */
11707 if(NULL != pMsg->bodyptr)
11708 {
11709 vos_mem_free(pMsg->bodyptr);
11710 }
11711 break;
11712 }
11713 case WDA_SYS_READY_IND :
11714 {
11715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11716 "Handling msg type WDA_SYS_READY_IND " );
11717 pWDA->wdaState = WDA_READY_STATE;
11718 if(NULL != pMsg->bodyptr)
11719 {
11720 vos_mem_free(pMsg->bodyptr);
11721 }
11722 break;
11723 }
11724 case WDA_BEACON_FILTER_IND :
11725 {
11726 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
11727 break;
11728 }
11729 case WDA_BTC_SET_CFG:
11730 {
11731 /*TODO: handle this while dealing with BTC */
11732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11733 "Handling msg type WDA_BTC_SET_CFG " );
11734 /* Do Nothing? MSG Body should be freed at here */
11735 if(NULL != pMsg->bodyptr)
11736 {
11737 vos_mem_free(pMsg->bodyptr);
11738 }
11739 break;
11740 }
11741 case WDA_SIGNAL_BT_EVENT:
11742 {
11743 /*TODO: handle this while dealing with BTC */
11744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11745 "Handling msg type WDA_SIGNAL_BT_EVENT " );
11746 /* Do Nothing? MSG Body should be freed at here */
11747 if(NULL != pMsg->bodyptr)
11748 {
11749 vos_mem_free(pMsg->bodyptr);
11750 }
11751 break;
11752 }
11753 case WDA_CFG_RXP_FILTER_REQ:
11754 {
11755 WDA_ProcessConfigureRxpFilterReq(pWDA,
11756 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
11757 break;
11758 }
11759 case WDA_SET_HOST_OFFLOAD:
11760 {
11761 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
11762 break;
11763 }
11764 case WDA_SET_KEEP_ALIVE:
11765 {
11766 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
11767 break;
11768 }
11769#ifdef WLAN_NS_OFFLOAD
11770 case WDA_SET_NS_OFFLOAD:
11771 {
11772 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
11773 break;
11774 }
11775#endif //WLAN_NS_OFFLOAD
11776 case WDA_ADD_STA_SELF_REQ:
11777 {
11778 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
11779 break;
11780 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011781 case WDA_DEL_STA_SELF_REQ:
11782 {
11783 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
11784 break;
11785 }
11786 case WDA_WOWL_ADD_BCAST_PTRN:
11787 {
11788 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
11789 break;
11790 }
11791 case WDA_WOWL_DEL_BCAST_PTRN:
11792 {
11793 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
11794 break;
11795 }
11796 case WDA_WOWL_ENTER_REQ:
11797 {
11798 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
11799 break;
11800 }
11801 case WDA_WOWL_EXIT_REQ:
11802 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011803 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070011804 break;
11805 }
11806 case WDA_TL_FLUSH_AC_REQ:
11807 {
11808 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
11809 break;
11810 }
11811 case WDA_SIGNAL_BTAMP_EVENT:
11812 {
11813 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
11814 break;
11815 }
11816#ifdef WDA_UT
11817 case WDA_WDI_EVENT_MSG:
11818 {
11819 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
11820 break ;
11821 }
11822#endif
11823 case WDA_UPDATE_BEACON_IND:
11824 {
11825 WDA_ProcessUpdateBeaconParams(pWDA,
11826 (tUpdateBeaconParams *)pMsg->bodyptr);
11827 break;
11828 }
11829 case WDA_SEND_BEACON_REQ:
11830 {
11831 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
11832 break;
11833 }
11834 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
11835 {
11836 WDA_ProcessUpdateProbeRspTemplate(pWDA,
11837 (tSendProbeRespParams *)pMsg->bodyptr);
11838 break;
11839 }
11840#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
11841 case WDA_SET_MAX_TX_POWER_REQ:
11842 {
11843 WDA_ProcessSetMaxTxPowerReq(pWDA,
11844 (tMaxTxPowerParams *)pMsg->bodyptr);
11845 break;
11846 }
11847#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070011848 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
11849 {
11850 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
11851 pMsg->bodyptr);
11852 break;
11853 }
schang86c22c42013-03-13 18:41:24 -070011854 case WDA_SET_TX_POWER_REQ:
11855 {
11856 WDA_ProcessSetTxPowerReq(pWDA,
11857 (tSirSetTxPowerReq *)pMsg->bodyptr);
11858 break;
11859 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011860 case WDA_SET_P2P_GO_NOA_REQ:
11861 {
11862 WDA_ProcessSetP2PGONOAReq(pWDA,
11863 (tP2pPsParams *)pMsg->bodyptr);
11864 break;
11865 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011866 /* timer related messages */
11867 case WDA_TIMER_BA_ACTIVITY_REQ:
11868 {
11869 WDA_BaCheckActivity(pWDA) ;
11870 break ;
11871 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011872
11873 /* timer related messages */
11874 case WDA_TIMER_TRAFFIC_STATS_IND:
11875 {
11876 WDA_TimerTrafficStatsInd(pWDA);
11877 break;
11878 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011879#ifdef WLAN_FEATURE_VOWIFI_11R
11880 case WDA_AGGR_QOS_REQ:
11881 {
11882 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
11883 break;
11884 }
11885#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070011886 case WDA_FTM_CMD_REQ:
11887 {
11888 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
11889 break ;
11890 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011891#ifdef FEATURE_OEM_DATA_SUPPORT
11892 case WDA_START_OEM_DATA_REQ:
11893 {
11894 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
11895 break;
11896 }
11897#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070011898 /* Tx Complete Time out Indication */
11899 case WDA_TX_COMPLETE_TIMEOUT_IND:
11900 {
11901 WDA_ProcessTxCompleteTimeOutInd(pWDA);
11902 break;
11903 }
11904 case WDA_WLAN_SUSPEND_IND:
11905 {
11906 WDA_ProcessWlanSuspendInd(pWDA,
11907 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
11908 break;
11909 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011910 case WDA_WLAN_RESUME_REQ:
11911 {
11912 WDA_ProcessWlanResumeReq(pWDA,
11913 (tSirWlanResumeParam *)pMsg->bodyptr) ;
11914 break;
11915 }
11916
11917 case WDA_UPDATE_CF_IND:
11918 {
11919 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
11920 pMsg->bodyptr = NULL;
11921 break;
11922 }
11923#ifdef FEATURE_WLAN_SCAN_PNO
11924 case WDA_SET_PNO_REQ:
11925 {
11926 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
11927 break;
11928 }
11929 case WDA_UPDATE_SCAN_PARAMS_REQ:
11930 {
11931 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
11932 break;
11933 }
11934 case WDA_SET_RSSI_FILTER_REQ:
11935 {
11936 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
11937 break;
11938 }
11939#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070011940#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070011941 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070011942 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070011943 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070011944 break;
11945 }
11946#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011947 case WDA_SET_TX_PER_TRACKING_REQ:
11948 {
11949 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
11950 break;
11951 }
11952
11953#ifdef WLAN_FEATURE_PACKET_FILTERING
11954 case WDA_8023_MULTICAST_LIST_REQ:
11955 {
11956 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
11957 break;
11958 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011959 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
11960 {
11961 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
11962 break;
11963 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011964 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
11965 {
11966 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
11967 break;
11968 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011969 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
11970 {
11971 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
11972 break;
11973 }
11974#endif // WLAN_FEATURE_PACKET_FILTERING
11975
11976
11977 case WDA_TRANSMISSION_CONTROL_IND:
11978 {
11979 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
11980 break;
11981 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011982 case WDA_SET_POWER_PARAMS_REQ:
11983 {
11984 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
11985 break;
11986 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011987#ifdef WLAN_FEATURE_GTK_OFFLOAD
11988 case WDA_GTK_OFFLOAD_REQ:
11989 {
11990 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
11991 break;
11992 }
11993
11994 case WDA_GTK_OFFLOAD_GETINFO_REQ:
11995 {
11996 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
11997 break;
11998 }
11999#endif //WLAN_FEATURE_GTK_OFFLOAD
12000
12001 case WDA_SET_TM_LEVEL_REQ:
12002 {
12003 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
12004 break;
12005 }
Mohit Khanna4a70d262012-09-11 16:30:12 -070012006#ifdef WLAN_FEATURE_11AC
12007 case WDA_UPDATE_OP_MODE:
12008 {
12009 if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
12010 {
12011 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
12012 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
12013 else
12014 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012015 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070012016 }
12017 else
12018 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012019 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070012020 break;
12021 }
12022#endif
Chet Lanctot186b5732013-03-18 10:26:30 -070012023#ifdef WLAN_FEATURE_11W
12024 case WDA_EXCLUDE_UNENCRYPTED_IND:
12025 {
12026 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
12027 break;
12028 }
12029#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053012030#ifdef FEATURE_WLAN_TDLS
12031 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
12032 {
12033 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
12034 break;
12035 }
12036#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012037 case WDA_DHCP_START_IND:
12038 {
12039 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
12040 break;
12041 }
12042 case WDA_DHCP_STOP_IND:
12043 {
12044 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
12045 break;
12046 }
Leo Chang9056f462013-08-01 19:21:11 -070012047#ifdef FEATURE_WLAN_LPHB
12048 case WDA_LPHB_CONF_REQ:
12049 {
12050 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
12051 break;
12052 }
12053#endif
Yue Mab9c86f42013-08-14 15:59:08 -070012054 case WDA_ADD_PERIODIC_TX_PTRN_IND:
12055 {
12056 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
12057 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
12058 break;
12059 }
12060 case WDA_DEL_PERIODIC_TX_PTRN_IND:
12061 {
12062 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
12063 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
12064 break;
12065 }
12066
Rajeev79dbe4c2013-10-05 11:03:42 +053012067#ifdef FEATURE_WLAN_BATCH_SCAN
12068 case WDA_SET_BATCH_SCAN_REQ:
12069 {
12070 WDA_ProcessSetBatchScanReq(pWDA,
12071 (tSirSetBatchScanReq *)pMsg->bodyptr);
12072 break;
12073 }
Chittajit Mitraf5413a42013-10-18 14:20:08 -070012074 case WDA_RATE_UPDATE_IND:
12075 {
12076 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
12077 break;
12078 }
Rajeev79dbe4c2013-10-05 11:03:42 +053012079 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
12080 {
12081 WDA_ProcessTriggerBatchScanResultInd(pWDA,
12082 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
12083 break;
12084 }
12085 case WDA_STOP_BATCH_SCAN_IND:
12086 {
12087 WDA_ProcessStopBatchScanInd(pWDA,
12088 (tSirStopBatchScanInd *)pMsg->bodyptr);
12089 break;
12090 }
12091#endif
12092
Jeff Johnson295189b2012-06-20 16:38:30 -070012093 default:
12094 {
12095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12096 "No Handling for msg type %x in WDA "
12097 ,pMsg->type);
12098 /* Do Nothing? MSG Body should be freed at here */
12099 if(NULL != pMsg->bodyptr)
12100 {
12101 vos_mem_free(pMsg->bodyptr);
12102 }
12103 //WDA_VOS_ASSERT(0) ;
12104 }
12105 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012106 return status ;
12107}
12108
Jeff Johnson295189b2012-06-20 16:38:30 -070012109/*
12110 * FUNCTION: WDA_LowLevelIndCallback
12111 * IND API callback from WDI, send Ind to PE
12112 */
12113void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
12114 void* pUserData )
12115{
12116 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
12117#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
12118 tSirRSSINotification rssiNotification;
12119#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012120 if(NULL == pWDA)
12121 {
12122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012123 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012124 VOS_ASSERT(0);
12125 return ;
12126 }
12127
12128 switch(wdiLowLevelInd->wdiIndicationType)
12129 {
12130 case WDI_RSSI_NOTIFICATION_IND:
12131 {
12132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12133 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012134#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
12135 rssiNotification.bReserved =
12136 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
12137 rssiNotification.bRssiThres1NegCross =
12138 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
12139 rssiNotification.bRssiThres1PosCross =
12140 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
12141 rssiNotification.bRssiThres2NegCross =
12142 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
12143 rssiNotification.bRssiThres2PosCross =
12144 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
12145 rssiNotification.bRssiThres3NegCross =
12146 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
12147 rssiNotification.bRssiThres3PosCross =
12148 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080012149 rssiNotification.avgRssi = (v_S7_t)
12150 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070012151 WLANTL_BMPSRSSIRegionChangedNotification(
12152 pWDA->pVosContext,
12153 &rssiNotification);
12154#endif
12155 break ;
12156 }
12157 case WDI_MISSED_BEACON_IND:
12158 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080012159 tpSirSmeMissedBeaconInd pMissBeacInd =
12160 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070012161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12162 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012163 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080012164 if(NULL == pMissBeacInd)
12165 {
12166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12167 "%s: VOS MEM Alloc Failure", __func__);
12168 break;
12169 }
12170 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
12171 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
12172 pMissBeacInd->bssIdx =
12173 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
12174 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012175 break ;
12176 }
12177 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
12178 {
12179 /* TODO: Decode Ind and send Ind to PE */
12180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12181 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
12182 break ;
12183 }
12184
12185 case WDI_MIC_FAILURE_IND:
12186 {
12187 tpSirSmeMicFailureInd pMicInd =
12188 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
12189
12190 if(NULL == pMicInd)
12191 {
12192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012193 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012194 break;
12195 }
12196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12197 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012198 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
12199 pMicInd->length = sizeof(tSirSmeMicFailureInd);
12200 vos_mem_copy(pMicInd->bssId,
12201 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
12202 sizeof(tSirMacAddr));
12203 vos_mem_copy(pMicInd->info.srcMacAddr,
12204 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
12205 sizeof(tSirMacAddr));
12206 vos_mem_copy(pMicInd->info.taMacAddr,
12207 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
12208 sizeof(tSirMacAddr));
12209 vos_mem_copy(pMicInd->info.dstMacAddr,
12210 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
12211 sizeof(tSirMacAddr));
12212 vos_mem_copy(pMicInd->info.rxMacAddr,
12213 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
12214 sizeof(tSirMacAddr));
12215 pMicInd->info.multicast =
12216 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
12217 pMicInd->info.keyId=
12218 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
12219 pMicInd->info.IV1=
12220 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
12221 vos_mem_copy(pMicInd->info.TSC,
12222 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070012223 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
12224 (void *)pMicInd , 0) ;
12225 break ;
12226 }
12227 case WDI_FATAL_ERROR_IND:
12228 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070012229 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070012230 /* TODO: Decode Ind and send Ind to PE */
12231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12232 "Received WDI_FATAL_ERROR_IND from WDI ");
12233 break ;
12234 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012235 case WDI_DEL_STA_IND:
12236 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012237 tpDeleteStaContext pDelSTACtx =
12238 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
12239
12240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12241 "Received WDI_DEL_STA_IND from WDI ");
12242 if(NULL == pDelSTACtx)
12243 {
12244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012245 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012246 break;
12247 }
12248 vos_mem_copy(pDelSTACtx->addr2,
12249 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
12250 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012251 vos_mem_copy(pDelSTACtx->bssId,
12252 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
12253 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012254 pDelSTACtx->assocId =
12255 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
12256 pDelSTACtx->reasonCode =
12257 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
12258 pDelSTACtx->staId =
12259 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070012260 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
12261 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012262 break ;
12263 }
12264 case WDI_COEX_IND:
12265 {
12266 tANI_U32 index;
12267 vos_msg_t vosMsg;
12268 tSirSmeCoexInd *pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
12269 if(NULL == pSmeCoexInd)
12270 {
12271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012272 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012273 break;
12274 }
12275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12276 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012277 /* Message Header */
12278 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
12279 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070012280 /* Info from WDI Indication */
12281 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
12282 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
12283 {
12284 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
12285 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012286 /* VOS message wrapper */
12287 vosMsg.type = eWNI_SME_COEX_IND;
12288 vosMsg.bodyptr = (void *)pSmeCoexInd;
12289 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070012290 /* Send message to SME */
12291 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12292 {
12293 /* free the mem and return */
12294 vos_mem_free((v_VOID_t *)pSmeCoexInd);
12295 }
12296 else
12297 {
12298 /* DEBUG */
12299 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12300 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
12301 pSmeCoexInd->coexIndType,
12302 pSmeCoexInd->coexIndData[0],
12303 pSmeCoexInd->coexIndData[1],
12304 pSmeCoexInd->coexIndData[2],
12305 pSmeCoexInd->coexIndData[3]);
12306 }
12307 break;
12308 }
12309 case WDI_TX_COMPLETE_IND:
12310 {
12311 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
12312 /* Calling TxCompleteAck Indication from wda context*/
12313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12314 "Complete Indication received from HAL");
12315 if( pWDA->pAckTxCbFunc )
12316 {
12317 if( VOS_STATUS_SUCCESS !=
12318 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12319 {
12320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12321 "Tx Complete timeout Timer Stop Failed ");
12322 }
12323 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
12324 pWDA->pAckTxCbFunc = NULL;
12325 }
12326 else
12327 {
12328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12329 "Tx Complete Indication is received after timeout ");
12330 }
12331 break;
12332 }
Viral Modid86bde22012-12-10 13:09:21 -080012333 case WDI_P2P_NOA_START_IND :
12334 {
12335 tSirP2PNoaStart *pP2pNoaStart =
12336 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
12337
12338 if (NULL == pP2pNoaStart)
12339 {
12340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12341 "Memory allocation failure, "
12342 "WDI_P2P_NOA_START_IND not forwarded");
12343 break;
12344 }
12345 pP2pNoaStart->status =
12346 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
12347 pP2pNoaStart->bssIdx =
12348 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
12349 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
12350 (void *)pP2pNoaStart , 0) ;
12351 break;
12352 }
12353
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053012354#ifdef FEATURE_WLAN_TDLS
12355 case WDI_TDLS_IND :
12356 {
12357 tSirTdlsInd *pTdlsInd =
12358 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
12359
12360 if (NULL == pTdlsInd)
12361 {
12362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12363 "Memory allocation failure, "
12364 "WDI_TDLS_IND not forwarded");
12365 break;
12366 }
12367 pTdlsInd->status =
12368 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
12369 pTdlsInd->assocId =
12370 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
12371 pTdlsInd->staIdx =
12372 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
12373 pTdlsInd->reasonCode =
12374 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
12375 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
12376 (void *)pTdlsInd , 0) ;
12377 break;
12378 }
12379#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012380 case WDI_P2P_NOA_ATTR_IND :
12381 {
12382 tSirP2PNoaAttr *pP2pNoaAttr =
12383 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12385 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070012386 if (NULL == pP2pNoaAttr)
12387 {
12388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12389 "Memory allocation failure, "
12390 "WDI_P2P_NOA_ATTR_IND not forwarded");
12391 break;
12392 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012393 pP2pNoaAttr->index =
12394 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
12395 pP2pNoaAttr->oppPsFlag =
12396 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
12397 pP2pNoaAttr->ctWin =
12398 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
12399
12400 pP2pNoaAttr->uNoa1IntervalCnt =
12401 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
12402 pP2pNoaAttr->uNoa1Duration =
12403 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
12404 pP2pNoaAttr->uNoa1Interval =
12405 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
12406 pP2pNoaAttr->uNoa1StartTime =
12407 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070012408 pP2pNoaAttr->uNoa2IntervalCnt =
12409 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
12410 pP2pNoaAttr->uNoa2Duration =
12411 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
12412 pP2pNoaAttr->uNoa2Interval =
12413 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
12414 pP2pNoaAttr->uNoa2StartTime =
12415 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070012416 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
12417 (void *)pP2pNoaAttr , 0) ;
12418 break;
12419 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012420#ifdef FEATURE_WLAN_SCAN_PNO
12421 case WDI_PREF_NETWORK_FOUND_IND:
12422 {
12423 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070012424 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
12425 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
12426 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
12427 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
12428
Jeff Johnson295189b2012-06-20 16:38:30 -070012429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12430 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070012431 if (NULL == pPrefNetworkFoundInd)
12432 {
12433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12434 "Memory allocation failure, "
12435 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053012436 if (NULL !=
12437 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
12438 {
12439 wpalMemoryFree(
12440 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
12441 );
12442 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
12443 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012444 break;
12445 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012446 /* Message Header */
12447 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070012448 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070012449
12450 /* Info from WDI Indication */
12451 pPrefNetworkFoundInd->ssId.length =
12452 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070012453 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070012454 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
12455 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
12456 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070012457 if (NULL !=
12458 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
12459 {
12460 pPrefNetworkFoundInd->frameLength =
12461 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
12462 vos_mem_copy( pPrefNetworkFoundInd->data,
12463 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
12464 pPrefNetworkFoundInd->frameLength);
12465 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
12466 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
12467 }
12468 else
12469 {
12470 pPrefNetworkFoundInd->frameLength = 0;
12471 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012472 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070012473 /* VOS message wrapper */
12474 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
12475 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
12476 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070012477 /* Send message to SME */
12478 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12479 {
12480 /* free the mem and return */
12481 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
12482 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012483 break;
12484 }
12485#endif // FEATURE_WLAN_SCAN_PNO
12486
12487#ifdef WLAN_WAKEUP_EVENTS
12488 case WDI_WAKE_REASON_IND:
12489 {
12490 vos_msg_t vosMsg;
12491 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
12492 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
12493 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
12494
12495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12496 "[WAKE_REASON WDI] WAKE_REASON_IND Type (0x%x) data (ulReason=0x%x, ulReasonArg=0x%x, ulStoredDataLen=0x%x)",
12497 wdiLowLevelInd->wdiIndicationType,
12498 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
12499 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
12500 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
12501
12502 if (NULL == pWakeReasonInd)
12503 {
12504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12505 "Memory allocation failure, "
12506 "WDI_WAKE_REASON_IND not forwarded");
12507 break;
12508 }
12509
12510 vos_mem_zero(pWakeReasonInd, allocSize);
12511
12512 /* Message Header */
12513 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
12514 pWakeReasonInd->mesgLen = allocSize;
12515
12516 /* Info from WDI Indication */
12517 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
12518 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
12519 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
12520 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
12521 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
12522 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
12523 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
12524 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
12525
12526 /* VOS message wrapper */
12527 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
12528 vosMsg.bodyptr = (void *) pWakeReasonInd;
12529 vosMsg.bodyval = 0;
12530
12531 /* Send message to SME */
12532 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12533 {
12534 /* free the mem and return */
12535 vos_mem_free((v_VOID_t *) pWakeReasonInd);
12536 }
12537
12538 break;
12539 }
12540#endif // WLAN_WAKEUP_EVENTS
12541
12542 case WDI_TX_PER_HIT_IND:
12543 {
12544 vos_msg_t vosMsg;
12545 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
12546 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
12547 /* VOS message wrapper */
12548 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
12549 vosMsg.bodyptr = NULL;
12550 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070012551 /* Send message to SME */
12552 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12553 {
12554 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
12555 }
12556 break;
12557 }
12558
Leo Chang9056f462013-08-01 19:21:11 -070012559#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070012560 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070012561 {
Leo Changd9df8aa2013-09-26 13:32:26 -070012562 vos_msg_t vosMsg;
12563 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070012564
Leo Changd9df8aa2013-09-26 13:32:26 -070012565 lphbInd =
12566 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
12567 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070012568 {
12569 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12570 "%s: LPHB IND buffer alloc Fail", __func__);
12571 return ;
12572 }
12573
Leo Changd9df8aa2013-09-26 13:32:26 -070012574 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070012575 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070012576 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070012577 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070012578 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070012579 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
12580
12581 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070012582 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070012583 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
12584
Leo Changd9df8aa2013-09-26 13:32:26 -070012585 vosMsg.type = eWNI_SME_LPHB_IND;
12586 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070012587 vosMsg.bodyval = 0;
12588 /* Send message to SME */
12589 if (VOS_STATUS_SUCCESS !=
12590 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12591 {
12592 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
12593 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070012594 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070012595 }
12596 break;
12597 }
12598#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070012599 case WDI_PERIODIC_TX_PTRN_FW_IND:
12600 {
12601 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12602 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
12603 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
12604 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
12605 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
12606 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
12607 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
12608
12609 break;
12610 }
Leo Chang9056f462013-08-01 19:21:11 -070012611
Ravi Joshid2ca7c42013-07-23 08:37:49 -070012612 case WDI_IBSS_PEER_INACTIVITY_IND:
12613 {
12614 tSirIbssPeerInactivityInd *pIbssInd =
12615 (tSirIbssPeerInactivityInd *)
12616 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
12617
12618 if (NULL == pIbssInd)
12619 {
12620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12621 "Memory allocation failure, "
12622 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
12623 break;
12624 }
12625
12626 pIbssInd->bssIdx =
12627 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
12628 pIbssInd->staIdx =
12629 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
12630 vos_mem_copy(pIbssInd->peerAddr,
12631 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
12632 sizeof(tSirMacAddr));
12633 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
12634 break;
12635 }
12636
Rajeev79dbe4c2013-10-05 11:03:42 +053012637#ifdef FEATURE_WLAN_BATCH_SCAN
12638 case WDI_BATCH_SCAN_RESULT_IND:
12639 {
12640 void *pBatchScanResult;
12641 void *pCallbackContext;
12642 tpAniSirGlobal pMac;
12643
12644 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12645 "Received WDI_BATCHSCAN_RESULT_IND from FW");
12646
12647 /*sanity check*/
12648 if(NULL == pWDA)
12649 {
12650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12651 "%s:pWDA is NULL", __func__);
12652 VOS_ASSERT(0);
12653 return;
12654 }
12655
12656 pBatchScanResult =
12657 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
12658 if (NULL == pBatchScanResult)
12659 {
12660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12661 "%s:Batch scan result from FW is null can't invoke HDD callback",
12662 __func__);
12663 VOS_ASSERT(0);
12664 return;
12665 }
12666
12667 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12668 if (NULL == pMac)
12669 {
12670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12671 "%s:pMac is NULL", __func__);
12672 VOS_ASSERT(0);
12673 return;
12674 }
12675
12676 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
12677 /*call hdd callback with set batch scan response data*/
12678 if(pMac->pmc.batchScanResultCallback)
12679 {
12680 pMac->pmc.batchScanResultCallback(pCallbackContext,
12681 pBatchScanResult);
12682 }
12683 else
12684 {
12685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12686 "%s:HDD callback is null", __func__);
12687 VOS_ASSERT(0);
12688 }
12689 break;
12690 }
12691#endif
12692
Jeff Johnson295189b2012-06-20 16:38:30 -070012693 default:
12694 {
12695 /* TODO error */
12696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12697 "Received UNKNOWN Indication from WDI ");
12698 }
12699 }
12700 return ;
12701}
12702
Jeff Johnson295189b2012-06-20 16:38:30 -070012703/*
12704 * BA related processing in WDA.
12705 */
Jeff Johnson295189b2012-06-20 16:38:30 -070012706void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
12707 void* pUserData)
12708{
12709 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12710 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070012711 if(NULL == pWdaParams)
12712 {
12713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012714 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012715 VOS_ASSERT(0) ;
12716 return ;
12717 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012718 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070012719 vos_mem_free(pWdaParams->wdaMsgParam) ;
12720 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12721 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012723 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012724 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
12725 {
12726 tANI_U8 i = 0 ;
12727 tBaActivityInd *baActivityInd = NULL ;
12728 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
12729 tANI_U8 allocSize = sizeof(tBaActivityInd)
12730 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
12731 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
12732 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012733 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012734 if(NULL == baActivityInd)
12735 {
12736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012737 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012738 VOS_ASSERT(0) ;
12739 return;
12740 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012741 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
12742 sizeof(tSirMacAddr)) ;
12743 baActivityInd->baCandidateCnt = baCandidateCount ;
12744
12745 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
12746 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
12747
12748 for(i = 0 ; i < baCandidateCount ; i++)
12749 {
12750 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012751 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
12752 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012753 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
12754 {
12755 baCandidate->baInfo[tid].fBaEnable =
12756 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
12757 baCandidate->baInfo[tid].startingSeqNum =
12758 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
12759 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070012760 wdiBaCandidate++ ;
12761 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012762 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012763 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
12764 }
12765 else
12766 {
12767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12768 "BA Trigger RSP with Failure received ");
12769 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012770 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012771}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012772
12773
12774/*
12775 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
12776 * during MCC
12777 */
12778void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
12779{
12780 wpt_uint32 enabled;
12781 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
12782 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
12783 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
12784
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012785 if (NULL == pMac )
12786 {
12787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12788 "%s: Invoked with invalid MAC context ", __func__ );
12789 VOS_ASSERT(0);
12790 return;
12791 }
12792
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012793 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
12794 != eSIR_SUCCESS)
12795 {
12796 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12797 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
12798 return;
12799 }
12800
12801 if(!enabled)
12802 {
12803 return;
12804 }
12805
12806 if(NULL == pWDA)
12807 {
12808 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12809 "%s:WDA context is NULL", __func__);
12810 VOS_ASSERT(0);
12811 return;
12812 }
12813
12814 if(activate)
12815 {
12816 if( VOS_STATUS_SUCCESS !=
12817 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
12818 {
12819 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12820 "Traffic Stats Timer Start Failed ");
12821 return;
12822 }
12823 WDI_DS_ActivateTrafficStats();
12824 }
12825 else
12826 {
12827 WDI_DS_DeactivateTrafficStats();
12828 WDI_DS_ClearTrafficStats();
12829
12830 if( VOS_STATUS_SUCCESS !=
12831 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
12832 {
12833 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12834 "Traffic Stats Timer Stop Failed ");
12835 return;
12836 }
12837 }
12838}
12839
12840/*
12841 * Traffic Stats Timer handler
12842 */
12843void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
12844{
12845 WDI_Status wdiStatus;
12846 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
12847 WDI_TrafficStatsIndType trafficStatsIndParams;
12848 wpt_uint32 length, enabled;
12849 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12850
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012851 if (NULL == pMac )
12852 {
12853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12854 "%s: Invoked with invalid MAC context ", __func__ );
12855 VOS_ASSERT(0);
12856 return;
12857 }
12858
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012859 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
12860 != eSIR_SUCCESS)
12861 {
12862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12863 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
12864 return;
12865 }
12866
12867 if(!enabled)
12868 {
12869 WDI_DS_DeactivateTrafficStats();
12870 return;
12871 }
12872
12873 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
12874
12875 if(pWdiTrafficStats != NULL)
12876 {
12877 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
12878 trafficStatsIndParams.length = length;
12879 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080012880 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012881 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
12882 trafficStatsIndParams.pUserData = pWDA;
12883
12884 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
12885
12886 if(WDI_STATUS_PENDING == wdiStatus)
12887 {
12888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12889 "Pending received for %s:%d ",__func__,__LINE__ );
12890 }
12891 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
12892 {
12893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12894 "Failure in %s:%d ",__func__,__LINE__ );
12895 }
12896
12897 WDI_DS_ClearTrafficStats();
12898 }
12899 else
12900 {
12901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
12902 "pWdiTrafficStats is Null");
12903 }
12904
12905 if( VOS_STATUS_SUCCESS !=
12906 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
12907 {
12908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
12909 "Traffic Stats Timer Start Failed ");
12910 return;
12911 }
12912}
12913
Jeff Johnson295189b2012-06-20 16:38:30 -070012914/*
12915 * BA Activity check timer handler
12916 */
12917void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
12918{
12919 tANI_U8 curSta = 0 ;
12920 tANI_U8 tid = 0 ;
12921 tANI_U8 size = 0 ;
12922 tANI_U8 baCandidateCount = 0 ;
12923 tANI_U8 newBaCandidate = 0 ;
12924 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
12925
12926 if(NULL == pWDA)
12927 {
12928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012929 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012930 VOS_ASSERT(0);
12931 return ;
12932 }
12933 if(WDA_MAX_STA < pWDA->wdaMaxSta)
12934 {
12935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12936 "Inconsistent STA entries in WDA");
12937 VOS_ASSERT(0) ;
12938 }
12939 /* walk through all STA entries and find out TX packet count */
12940 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
12941 {
Gopichand Nakkala976e3252013-01-03 15:45:56 -080012942#ifdef WLAN_SOFTAP_VSTA_FEATURE
12943 // We can only do BA on "hard" STAs.
12944 if (!(IS_HWSTA_IDX(curSta)))
12945 {
12946 continue;
12947 }
12948#endif //WLAN_SOFTAP_VSTA_FEATURE
12949 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
12950 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070012951 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012952 tANI_U32 txPktCount = 0 ;
12953 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012954 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070012955 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
12956 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070012957 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
12958 curSta, tid, &txPktCount)))
12959 {
12960#if 0
12961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
12962 "************* %d:%d, %d ",curSta, txPktCount,
12963 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
12964#endif
12965 if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070012966 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Jeff Johnson295189b2012-06-20 16:38:30 -070012967 && (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
12968 curSta, tid)))
12969 {
12970 /* get prepare for sending message to HAL */
12971 //baCandidate[baCandidateCount].staIdx = curSta ;
12972 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
12973 newBaCandidate = WDA_ENABLE_BA ;
12974 }
12975 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
12976 }
12977 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012978 /* fill the entry for all the sta with given TID's */
12979 if(WDA_ENABLE_BA == newBaCandidate)
12980 {
12981 /* move to next BA candidate */
12982 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
12983 size += sizeof(WDI_TriggerBAReqCandidateType) ;
12984 baCandidateCount++ ;
12985 newBaCandidate = WDA_DISABLE_BA ;
12986 }
12987 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012988 /* prepare and send message to hal */
12989 if( 0 < baCandidateCount)
12990 {
12991 WDI_Status status = WDI_STATUS_SUCCESS ;
12992 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
12993 tWDA_ReqParams *pWdaParams =
12994 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012995 if(NULL == pWdaParams)
12996 {
12997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012998 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012999 VOS_ASSERT(0) ;
13000 return;
13001 }
13002 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
13003 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
13004 if(NULL == wdiTriggerBaReq)
13005 {
13006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013007 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013008 VOS_ASSERT(0) ;
13009 vos_mem_free(pWdaParams);
13010 return;
13011 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013012 do
13013 {
13014 WDI_TriggerBAReqinfoType *triggerBaInfo =
13015 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
13016 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
13017 /* TEMP_FIX: Need to see if WDI need check for assoc session for
13018 * for each request */
13019 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
13020 triggerBaInfo->ucBASessionID = 0;
13021 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
13022 } while(0) ;
13023 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
13024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013025 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013026 pWdaParams->pWdaContext = pWDA;
13027 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
13028 pWdaParams->wdaMsgParam = NULL;
13029 status = WDI_TriggerBAReq(wdiTriggerBaReq,
13030 WDA_TriggerBaReqCallback, pWdaParams) ;
13031 if(IS_WDI_STATUS_FAILURE(status))
13032 {
13033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13034 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
13035 vos_mem_free(pWdaParams->wdaMsgParam) ;
13036 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13037 vos_mem_free(pWdaParams) ;
13038 }
13039 }
13040 else
13041 {
13042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
13043 "There is no TID for initiating BA");
13044 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013045 if( VOS_STATUS_SUCCESS !=
13046 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
13047 {
13048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13049 "BA Activity Timer Stop Failed ");
13050 return ;
13051 }
13052 if( VOS_STATUS_SUCCESS !=
13053 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
13054 {
13055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13056 "BA Activity Timer Start Failed ");
13057 return;
13058 }
13059 return ;
13060}
Jeff Johnson295189b2012-06-20 16:38:30 -070013061/*
13062 * WDA common routine to create timer used by WDA.
13063 */
13064static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
13065{
Jeff Johnson295189b2012-06-20 16:38:30 -070013066 VOS_STATUS status = VOS_STATUS_SUCCESS ;
13067 tANI_U32 val = 0 ;
13068 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13069
13070 if(NULL == pMac)
13071 {
13072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013073 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013074 VOS_ASSERT(0);
13075 return VOS_STATUS_E_FAILURE;
13076 }
13077 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
13078 != eSIR_SUCCESS)
13079 {
13080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13081 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
13082 return VOS_STATUS_E_FAILURE;
13083 }
13084 val = SYS_MS_TO_TICKS(val) ;
13085
13086 /* BA activity check timer */
13087 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
13088 "BA Activity Check timer", WDA_TimerHandler,
13089 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
13090 if(status != TX_SUCCESS)
13091 {
13092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13093 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013094 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013095 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013096 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013097 /* Tx Complete Timeout timer */
13098 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
13099 "Tx Complete Check timer", WDA_TimerHandler,
13100 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013101 if(status != TX_SUCCESS)
13102 {
13103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13104 "Unable to create Tx Complete Timeout timer");
13105 /* Destroy timer of BA activity check timer */
13106 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
13107 if(status != TX_SUCCESS)
13108 {
13109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13110 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013111 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013112 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013113 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013114 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013115
13116 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
13117
13118 /* Traffic Stats timer */
13119 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
13120 "Traffic Stats timer", WDA_TimerHandler,
13121 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
13122 if(status != TX_SUCCESS)
13123 {
13124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13125 "Unable to create traffic stats timer");
13126 /* Destroy timer of BA activity check timer */
13127 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
13128 if(status != TX_SUCCESS)
13129 {
13130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13131 "Unable to Destroy BA activity timer");
13132 }
13133 /* Destroy timer of tx complete timer */
13134 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
13135 if(status != TX_SUCCESS)
13136 {
13137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13138 "Unable to Tx complete timer");
13139 }
13140 return VOS_STATUS_E_FAILURE ;
13141 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013142 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013143}
Jeff Johnson295189b2012-06-20 16:38:30 -070013144/*
13145 * WDA common routine to destroy timer used by WDA.
13146 */
13147static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
13148{
13149 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013150 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
13151 if(status != TX_SUCCESS)
13152 {
13153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13154 "Unable to Destroy Tx Complete Timeout timer");
13155 return eSIR_FAILURE ;
13156 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013157 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
13158 if(status != TX_SUCCESS)
13159 {
13160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13161 "Unable to Destroy BA activity timer");
13162 return eSIR_FAILURE ;
13163 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013164 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
13165 if(status != TX_SUCCESS)
13166 {
13167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13168 "Unable to Destroy traffic stats timer");
13169 return eSIR_FAILURE ;
13170 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013171 return eSIR_SUCCESS ;
13172}
Jeff Johnson295189b2012-06-20 16:38:30 -070013173/*
13174 * WDA timer handler.
13175 */
13176void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
13177{
13178 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
13179 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013180 /*
13181 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
13182 */
13183 wdaMsg.type = timerInfo ;
13184 wdaMsg.bodyptr = NULL;
13185 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013186 /* post the message.. */
13187 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
13188 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
13189 {
13190 vosStatus = VOS_STATUS_E_BADMSG;
13191 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013192}
Jeff Johnson295189b2012-06-20 16:38:30 -070013193/*
13194 * WDA Tx Complete timeout Indication.
13195 */
13196void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
13197{
13198 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013199 if( pWDA->pAckTxCbFunc )
13200 {
13201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013202 "TxComplete timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070013203 pWDA->pAckTxCbFunc( pMac, 0);
13204 pWDA->pAckTxCbFunc = NULL;
13205 }
13206 else
13207 {
13208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013209 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070013210 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013211}
Jeff Johnson295189b2012-06-20 16:38:30 -070013212/*
13213 * WDA Set REG Domain to VOS NV
13214 */
Abhishek Singha306a442013-11-07 18:39:01 +053013215eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
13216 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070013217{
Abhishek Singha306a442013-11-07 18:39:01 +053013218 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070013219 {
13220 return eHAL_STATUS_INVALID_PARAMETER;
13221 }
13222 return eHAL_STATUS_SUCCESS;
13223}
Jeff Johnson295189b2012-06-20 16:38:30 -070013224
Jeff Johnson295189b2012-06-20 16:38:30 -070013225#ifdef FEATURE_WLAN_SCAN_PNO
13226/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013227 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013228 *
13229 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013230void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013231{
13232 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013234 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013235 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070013236 {
13237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013238 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013239 VOS_ASSERT(0) ;
13240 return ;
13241 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013242
Yue Ma7f44bbe2013-04-12 11:47:39 -070013243 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13244 vos_mem_free(pWdaParams->wdaMsgParam);
13245 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013246
13247 return ;
13248}
Jeff Johnson295189b2012-06-20 16:38:30 -070013249/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013250 * FUNCTION: WDA_PNOScanReqCallback
13251 * Free memory.
13252 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
13253 */
13254void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013255{
Yue Ma7f44bbe2013-04-12 11:47:39 -070013256 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13257
13258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13259 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13260
13261 if(NULL == pWdaParams)
13262 {
13263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13264 "%s: pWdaParams received NULL", __func__);
13265 VOS_ASSERT(0);
13266 return;
13267 }
13268
13269 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13270 {
13271 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13272 vos_mem_free(pWdaParams->wdaMsgParam);
13273 vos_mem_free(pWdaParams);
13274 }
13275
13276 return;
13277}
13278/*
13279 * FUNCTION: WDA_UpdateScanParamsRespCallback
13280 *
13281 */
13282void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
13283{
13284 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013286 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013287 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070013288 {
13289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013290 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013291 VOS_ASSERT(0) ;
13292 return ;
13293 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013294
13295 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13296 vos_mem_free(pWdaParams->wdaMsgParam);
13297 vos_mem_free(pWdaParams);
13298
Jeff Johnson295189b2012-06-20 16:38:30 -070013299 return ;
13300}
Jeff Johnson295189b2012-06-20 16:38:30 -070013301/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013302 * FUNCTION: WDA_UpdateScanParamsReqCallback
13303 * Free memory.
13304 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
13305 */
13306void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
13307{
13308 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13309
13310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13311 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13312
13313 if(NULL == pWdaParams)
13314 {
13315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13316 "%s: pWdaParams received NULL", __func__);
13317 VOS_ASSERT(0);
13318 return;
13319 }
13320
13321 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13322 {
13323 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13324 vos_mem_free(pWdaParams->wdaMsgParam);
13325 vos_mem_free(pWdaParams);
13326 }
13327
13328 return;
13329}
13330/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013331 * FUNCTION: WDA_ProcessSetPreferredNetworkList
13332 * Request to WDI to set Preferred Network List.Offload
13333 */
13334VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
13335 tSirPNOScanReq *pPNOScanReqParams)
13336{
Jeff Johnson43971f52012-07-17 12:26:56 -070013337 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013338 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
13339 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
13340 tWDA_ReqParams *pWdaParams ;
13341 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070013342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013343 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013344 if(NULL == pwdiPNOScanReqInfo)
13345 {
13346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013347 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013348 VOS_ASSERT(0);
13349 return VOS_STATUS_E_NOMEM;
13350 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013351 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13352 if(NULL == pWdaParams)
13353 {
13354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013355 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013356 VOS_ASSERT(0);
13357 vos_mem_free(pwdiPNOScanReqInfo);
13358 return VOS_STATUS_E_NOMEM;
13359 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013360 //
13361 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
13362 //
13363 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
13364 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070013365 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
13366 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
13367 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013368 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
13369 {
13370 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
13371 &pPNOScanReqParams->aNetworks[i],
13372 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
13373 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013374 /*Scan timer intervals*/
13375 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
13376 &pPNOScanReqParams->scanTimers,
13377 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070013378 /*Probe template for 2.4GHz band*/
13379 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
13380 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
13381 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013382 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
13383 pPNOScanReqParams->p24GProbeTemplate,
13384 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070013385 /*Probe template for 5GHz band*/
13386 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
13387 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
13388 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013389 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
13390 pPNOScanReqParams->p5GProbeTemplate,
13391 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013392 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
13393 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013394
Jeff Johnson295189b2012-06-20 16:38:30 -070013395 /* Store Params pass it to WDI */
13396 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
13397 pWdaParams->pWdaContext = pWDA;
13398 /* Store param pointer as passed in by caller */
13399 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013400 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013401 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013402 if(IS_WDI_STATUS_FAILURE(status))
13403 {
13404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13405 "Failure in Set PNO REQ WDI API, free all the memory " );
13406 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13407 vos_mem_free(pWdaParams->wdaMsgParam);
13408 pWdaParams->wdaWdiApiMsgParam = NULL;
13409 pWdaParams->wdaMsgParam = NULL;
13410 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013411 return CONVERT_WDI2VOS_STATUS(status) ;
13412}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013413
13414#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
13415
13416void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
13417{
13418 /*Convert the CSR Auth types to WDI Auth types */
13419 switch (csrAuthType)
13420 {
13421 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
13422 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
13423 break;
13424#ifdef FEATURE_WLAN_CCX
13425 case eCSR_AUTH_TYPE_CCKM_WPA:
13426 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
13427 break;
13428#endif
13429 case eCSR_AUTH_TYPE_WPA:
13430 *AuthType = eWDA_AUTH_TYPE_WPA;
13431 break;
13432 case eCSR_AUTH_TYPE_WPA_PSK:
13433 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
13434 break;
13435#ifdef FEATURE_WLAN_CCX
13436 case eCSR_AUTH_TYPE_CCKM_RSN:
13437 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
13438 break;
13439#endif
13440 case eCSR_AUTH_TYPE_RSN:
13441 *AuthType = eWDA_AUTH_TYPE_RSN;
13442 break;
13443 case eCSR_AUTH_TYPE_RSN_PSK:
13444 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
13445 break;
13446#if defined WLAN_FEATURE_VOWIFI_11R
13447 case eCSR_AUTH_TYPE_FT_RSN:
13448 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
13449 break;
13450 case eCSR_AUTH_TYPE_FT_RSN_PSK:
13451 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
13452 break;
13453#endif
13454#ifdef FEATURE_WLAN_WAPI
13455 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
13456 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
13457 break;
13458 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
13459 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
13460 break;
13461#endif /* FEATURE_WLAN_WAPI */
13462 case eCSR_AUTH_TYPE_SHARED_KEY:
13463 case eCSR_AUTH_TYPE_AUTOSWITCH:
13464 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
13465 break;
13466#if 0
13467 case eCSR_AUTH_TYPE_SHARED_KEY:
13468 *AuthType = eWDA_AUTH_TYPE_SHARED_KEY;
13469 break;
13470 case eCSR_AUTH_TYPE_AUTOSWITCH:
13471 *AuthType = eWDA_AUTH_TYPE_AUTOSWITCH;
13472#endif
13473 default:
13474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13475 "%s: Unknown Auth Type", __func__);
13476 break;
13477 }
13478}
13479void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
13480{
13481 switch (csrEncrType)
13482 {
13483 case eCSR_ENCRYPT_TYPE_NONE:
13484 *EncrType = WDI_ED_NONE;
13485 break;
13486 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
13487 case eCSR_ENCRYPT_TYPE_WEP40:
13488 *EncrType = WDI_ED_WEP40;
13489 break;
13490 case eCSR_ENCRYPT_TYPE_WEP104:
13491 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
13492 *EncrType = WDI_ED_WEP104;
13493 break;
13494 case eCSR_ENCRYPT_TYPE_TKIP:
13495 *EncrType = WDI_ED_TKIP;
13496 break;
13497 case eCSR_ENCRYPT_TYPE_AES:
13498 *EncrType = WDI_ED_CCMP;
13499 break;
13500#ifdef WLAN_FEATURE_11W
13501 case eCSR_ENCRYPT_TYPE_AES_CMAC:
13502 *EncrType = WDI_ED_AES_128_CMAC;
13503 break;
13504#endif
13505#ifdef FEATURE_WLAN_WAPI
13506 case eCSR_ENCRYPT_TYPE_WPI:
13507 *EncrType = WDI_ED_WPI;
13508 break;
13509#endif
13510 case eCSR_ENCRYPT_TYPE_ANY:
13511 *EncrType = WDI_ED_ANY;
13512 break;
13513
13514 default:
13515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13516 "%s: Unknown Encryption Type", __func__);
13517 break;
13518 }
13519}
13520
13521/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013522 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013523 * Request to WDI to set Roam Offload Scan
13524 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013525VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013526 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
13527{
13528 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013529 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
13530 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013531 tWDA_ReqParams *pWdaParams ;
13532 v_U8_t csrAuthType;
13533 WDI_RoamNetworkType *pwdiRoamNetworkType;
13534 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
13535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13536 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013537 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013538 {
13539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13540 "%s: VOS MEM Alloc Failure", __func__);
13541 VOS_ASSERT(0);
13542 return VOS_STATUS_E_NOMEM;
13543 }
13544 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13545 if (NULL == pWdaParams)
13546 {
13547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13548 "%s: VOS MEM Alloc Failure", __func__);
13549 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013550 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013551 return VOS_STATUS_E_NOMEM;
13552 }
13553
13554 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013555 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013556 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013557 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
13558 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013559 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
13560 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
13561 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
13562 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
13563 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
13564 sizeof(pwdiRoamNetworkType->currAPbssid));
13565 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
13566 csrAuthType);
13567 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
13568 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
13569 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
13570 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
13571 pwdiRoamOffloadScanInfo->LookupThreshold =
13572 pRoamOffloadScanReqParams->LookupThreshold ;
13573 pwdiRoamOffloadScanInfo->RoamRssiDiff =
13574 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080013575 pwdiRoamOffloadScanInfo->MAWCEnabled =
13576 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013577 pwdiRoamOffloadScanInfo->Command =
13578 pRoamOffloadScanReqParams->Command ;
13579 pwdiRoamOffloadScanInfo->StartScanReason =
13580 pRoamOffloadScanReqParams->StartScanReason ;
13581 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
13582 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
13583 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
13584 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
13585 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
13586 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
13587 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
13588 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
13589 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
13590 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
13591 pwdiRoamOffloadScanInfo->IsCCXEnabled =
13592 pRoamOffloadScanReqParams->IsCCXEnabled ;
13593 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
13594 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
13595 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
13596 pwdiRoamNetworkType->ssId.ucLength =
13597 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
13598 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
13599 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
13600 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
13601 pwdiRoamNetworkType->ChannelCount =
13602 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
13603 pwdiRoamOffloadScanInfo->ChannelCacheType =
13604 pRoamOffloadScanReqParams->ChannelCacheType;
13605 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
13606 pRoamOffloadScanReqParams->ValidChannelList,
13607 pRoamOffloadScanReqParams->ValidChannelCount);
13608 pwdiRoamOffloadScanInfo->ValidChannelCount =
13609 pRoamOffloadScanReqParams->ValidChannelCount;
13610 pwdiRoamOffloadScanInfo->us24GProbeSize =
13611 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
13612 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
13613 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
13614 pRoamOffloadScanReqParams->p24GProbeTemplate,
13615 pwdiRoamOffloadScanInfo->us24GProbeSize);
13616 pwdiRoamOffloadScanInfo->us5GProbeSize =
13617 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
13618 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
13619 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
13620 pRoamOffloadScanReqParams->p5GProbeTemplate,
13621 pwdiRoamOffloadScanInfo->us5GProbeSize);
13622 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
13623 pRoamOffloadScanReqParams->MDID.mdiePresent;
13624 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
13625 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013626 pwdiRoamOffloadScanInfo->nProbes =
13627 pRoamOffloadScanReqParams->nProbes;
13628 pwdiRoamOffloadScanInfo->HomeAwayTime =
13629 pRoamOffloadScanReqParams->HomeAwayTime;
13630 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013631 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013632 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013633 pWdaParams->pWdaContext = pWDA;
13634 /* Store param pointer as passed in by caller */
13635 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013636 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013637 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
13638 if(IS_WDI_STATUS_FAILURE(status))
13639 {
13640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13641 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
13642 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13643 vos_mem_free(pWdaParams->wdaMsgParam);
13644 pWdaParams->wdaWdiApiMsgParam = NULL;
13645 pWdaParams->wdaMsgParam = NULL;
13646 }
13647 return CONVERT_WDI2VOS_STATUS(status) ;
13648}
13649#endif
13650
Jeff Johnson295189b2012-06-20 16:38:30 -070013651/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013652 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013653 *
13654 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013655void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013656{
13657 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13658
13659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013660 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013661
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053013662 if(NULL == pWdaParams)
13663 {
13664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013665 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053013666 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013667 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053013668 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013669
Jeff Johnson295189b2012-06-20 16:38:30 -070013670 vos_mem_free(pWdaParams->wdaMsgParam) ;
13671 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13672 vos_mem_free(pWdaParams) ;
13673
13674 return ;
13675}
13676/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013677 * FUNCTION: WDA_RssiFilterReqCallback
13678 * Free memory.
13679 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
13680 */
13681void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
13682{
13683 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13684
13685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13686 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13687
13688 if(NULL == pWdaParams)
13689 {
13690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13691 "%s: pWdaParams received NULL", __func__);
13692 VOS_ASSERT(0);
13693 return;
13694 }
13695
13696 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13697 {
13698 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13699 vos_mem_free(pWdaParams->wdaMsgParam);
13700 vos_mem_free(pWdaParams);
13701 }
13702
13703 return;
13704}
13705/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013706 * FUNCTION: WDA_ProcessSetPreferredNetworkList
13707 * Request to WDI to set Preferred Network List.Offload
13708 */
13709VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
13710 tSirSetRSSIFilterReq* pRssiFilterParams)
13711{
Jeff Johnson43971f52012-07-17 12:26:56 -070013712 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013713 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
13714 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
13715 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013717 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013718 if(NULL == pwdiSetRssiFilterReqInfo)
13719 {
13720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013721 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013722 VOS_ASSERT(0);
13723 return VOS_STATUS_E_NOMEM;
13724 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013725 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13726 if(NULL == pWdaParams)
13727 {
13728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013729 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013730 VOS_ASSERT(0);
13731 vos_mem_free(pwdiSetRssiFilterReqInfo);
13732 return VOS_STATUS_E_NOMEM;
13733 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013734 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013735 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
13736 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013737
Jeff Johnson295189b2012-06-20 16:38:30 -070013738 /* Store Params pass it to WDI */
13739 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
13740 pWdaParams->pWdaContext = pWDA;
13741 /* Store param pointer as passed in by caller */
13742 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013743 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013744 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013745 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013746 if(IS_WDI_STATUS_FAILURE(status))
13747 {
13748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13749 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
13750 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13751 vos_mem_free(pWdaParams->wdaMsgParam);
13752 pWdaParams->wdaWdiApiMsgParam = NULL;
13753 pWdaParams->wdaMsgParam = NULL;
13754 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013755 return CONVERT_WDI2VOS_STATUS(status) ;
13756}
13757
Jeff Johnson295189b2012-06-20 16:38:30 -070013758/*
13759 * FUNCTION: WDA_ProcessUpdateScanParams
13760 * Request to WDI to update Scan Parameters
13761 */
13762VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
13763 tSirUpdateScanParams *pUpdateScanParams)
13764{
Jeff Johnson43971f52012-07-17 12:26:56 -070013765 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013766 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
13767 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
13768 sizeof(WDI_UpdateScanParamsInfoType)) ;
13769 tWDA_ReqParams *pWdaParams ;
13770 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070013771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013772 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013773 if(NULL == wdiUpdateScanParamsInfoType)
13774 {
13775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013776 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013777 VOS_ASSERT(0);
13778 return VOS_STATUS_E_NOMEM;
13779 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013780 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13781 if ( NULL == pWdaParams )
13782 {
13783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013784 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013785 VOS_ASSERT(0);
13786 vos_mem_free(wdiUpdateScanParamsInfoType);
13787 return VOS_STATUS_E_NOMEM;
13788 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013789 //
13790 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
13791 //
Jeff Johnson295189b2012-06-20 16:38:30 -070013792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13793 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
13794 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
13795 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080013796 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070013797 pUpdateScanParams->b11dEnabled,
13798 pUpdateScanParams->b11dResolved,
13799 pUpdateScanParams->ucChannelCount,
13800 pUpdateScanParams->usPassiveMinChTime,
13801 pUpdateScanParams->usPassiveMaxChTime,
13802 pUpdateScanParams->usActiveMinChTime,
13803 pUpdateScanParams->usActiveMaxChTime,
13804 sizeof(tSirUpdateScanParams),
13805 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
13806
Jeff Johnson295189b2012-06-20 16:38:30 -070013807 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
13808 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070013809 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
13810 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070013811 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
13812 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070013813 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
13814 pUpdateScanParams->usActiveMaxChTime;
13815 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
13816 pUpdateScanParams->usActiveMinChTime;
13817 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
13818 pUpdateScanParams->usPassiveMaxChTime;
13819 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
13820 pUpdateScanParams->usPassiveMinChTime;
13821
Jeff Johnson295189b2012-06-20 16:38:30 -070013822 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053013823 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
13824 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070013825
Jeff Johnson295189b2012-06-20 16:38:30 -070013826 for ( i = 0; i <
13827 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
13828 i++)
13829 {
13830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13831 "Update Scan Parameters channel: %d",
13832 pUpdateScanParams->aChannels[i]);
13833
13834 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
13835 pUpdateScanParams->aChannels[i];
13836 }
13837
Yue Ma7f44bbe2013-04-12 11:47:39 -070013838 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
13839 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013840
Jeff Johnson295189b2012-06-20 16:38:30 -070013841 /* Store Params pass it to WDI */
13842 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
13843 pWdaParams->pWdaContext = pWDA;
13844 /* Store param pointer as passed in by caller */
13845 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070013846
Jeff Johnson295189b2012-06-20 16:38:30 -070013847
13848
13849 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013850 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013851 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013852 if(IS_WDI_STATUS_FAILURE(status))
13853 {
13854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13855 "Failure in Update Scan Params EQ WDI API, free all the memory " );
13856 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13857 vos_mem_free(pWdaParams->wdaMsgParam);
13858 vos_mem_free(pWdaParams);
13859 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013860 return CONVERT_WDI2VOS_STATUS(status) ;
13861}
13862#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013863
13864#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
13865/*
13866 * FUNCTION: WDA_RoamOffloadScanReqCallback
13867 *
13868 */
13869void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
13870{
13871 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070013872 vos_msg_t vosMsg;
13873 wpt_uint8 reason = 0;
13874
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070013875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013876 "<------ %s " ,__func__);
13877 if (NULL == pWdaParams)
13878 {
13879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13880 "%s: pWdaParams received NULL", __func__);
13881 VOS_ASSERT(0) ;
13882 return ;
13883 }
13884 if ( pWdaParams != NULL )
13885 {
13886 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
13887 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070013888 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013889 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13890 }
13891 if ( pWdaParams->wdaMsgParam != NULL)
13892 {
13893 vos_mem_free(pWdaParams->wdaMsgParam);
13894 }
13895
13896 vos_mem_free(pWdaParams) ;
13897 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070013898 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
13899 vosMsg.bodyptr = NULL;
13900 if (WDI_STATUS_SUCCESS != status)
13901 {
13902 reason = 0;
13903 }
13904 vosMsg.bodyval = reason;
13905 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13906 {
13907 /* free the mem and return */
13908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070013909 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070013910 }
13911
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013912 return ;
13913}
13914#endif
13915
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013916/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013917 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013918 *
13919 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013920void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013921{
13922 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13923
13924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13925 "<------ %s " ,__func__);
13926
13927 if(NULL == pWdaParams)
13928 {
13929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13930 "%s: pWdaParams received NULL", __func__);
13931 VOS_ASSERT(0);
13932 return;
13933 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013934
13935 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13936 vos_mem_free(pWdaParams->wdaMsgParam);
13937 vos_mem_free(pWdaParams);
13938
13939 return;
13940}
13941/*
13942 * FUNCTION: WDA_SetPowerParamsReqCallback
13943 * Free memory.
13944 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
13945 */
13946void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
13947{
13948 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13949
13950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13951 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13952
13953 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013954 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070013955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13956 "%s: pWdaParams received NULL", __func__);
13957 VOS_ASSERT(0);
13958 return;
13959 }
13960
13961 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13962 {
13963 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13964 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013965 vos_mem_free(pWdaParams);
13966 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013967
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013968 return;
13969}
13970
Jeff Johnson295189b2012-06-20 16:38:30 -070013971#ifdef WLAN_FEATURE_PACKET_FILTERING
13972/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013973 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013974 *
13975 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013976void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013977 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
13978 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013979{
13980 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013982 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013983 if(NULL == pWdaParams)
13984 {
13985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013986 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013987 VOS_ASSERT(0) ;
13988 return ;
13989 }
13990
13991 vos_mem_free(pWdaParams->wdaMsgParam) ;
13992 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13993 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013994 //print a msg, nothing else to do
13995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013996 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070013997 return ;
13998}
Jeff Johnson295189b2012-06-20 16:38:30 -070013999/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014000 * FUNCTION: WDA_8023MulticastListReqCallback
14001 * Free memory.
14002 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
14003 */
14004void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
14005{
14006 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14007
14008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14009 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14010
14011 if(NULL == pWdaParams)
14012 {
14013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14014 "%s: pWdaParams received NULL", __func__);
14015 VOS_ASSERT(0);
14016 return;
14017 }
14018
14019 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14020 {
14021 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14022 vos_mem_free(pWdaParams->wdaMsgParam);
14023 vos_mem_free(pWdaParams);
14024 }
14025
14026 return;
14027}
14028/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014029 * FUNCTION: WDA_Process8023MulticastListReq
14030 * Request to WDI to add 8023 Multicast List
14031 */
14032VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
14033 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
14034{
Jeff Johnson43971f52012-07-17 12:26:56 -070014035 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014036 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
14037 tWDA_ReqParams *pWdaParams ;
14038 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014040 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014041 pwdiFltPktSetMcListReqParamsType =
14042 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
14043 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
14044 ) ;
14045 if(NULL == pwdiFltPktSetMcListReqParamsType)
14046 {
14047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014048 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014049 return VOS_STATUS_E_NOMEM;
14050 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014051 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14052 if(NULL == pWdaParams)
14053 {
14054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014055 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014056 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
14057 return VOS_STATUS_E_NOMEM;
14058 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014059
Jeff Johnson295189b2012-06-20 16:38:30 -070014060 //
14061 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
14062 //
14063 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070014064 pRcvFltMcAddrList->ulMulticastAddrCnt;
14065
14066 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
14067 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
14068 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
14069 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
14070
Jeff Johnson295189b2012-06-20 16:38:30 -070014071 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
14072 {
14073 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
14074 &(pRcvFltMcAddrList->multicastAddr[i]),
14075 sizeof(tSirMacAddr));
14076 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014077 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
14078 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014079
Jeff Johnson295189b2012-06-20 16:38:30 -070014080 /* Store Params pass it to WDI */
14081 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
14082 pWdaParams->pWdaContext = pWDA;
14083 /* Store param pointer as passed in by caller */
14084 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070014085 status = WDI_8023MulticastListReq(
14086 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014087 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014088 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014089 if(IS_WDI_STATUS_FAILURE(status))
14090 {
14091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14092 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
14093 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14094 vos_mem_free(pWdaParams->wdaMsgParam);
14095 vos_mem_free(pWdaParams);
14096 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014097 return CONVERT_WDI2VOS_STATUS(status) ;
14098}
Jeff Johnson295189b2012-06-20 16:38:30 -070014099/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014100 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014101 *
14102 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014103void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014104 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
14105 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014106{
14107 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014109 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014110 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070014111 if(NULL == pWdaParams)
14112 {
14113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014114 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014115 VOS_ASSERT(0) ;
14116 return ;
14117 }
14118
14119 vos_mem_free(pWdaParams->wdaMsgParam) ;
14120 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14121 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014122 //print a msg, nothing else to do
14123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014124 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070014125 return ;
14126}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014127
14128/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014129 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
14130 * Free memory.
14131 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014132 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014133void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014134 void* pUserData)
14135{
14136 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14137
14138 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14139 "<------ %s, wdiStatus: %d",
14140 __func__, wdiStatus);
14141
14142 if (NULL == pWdaParams)
14143 {
14144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14145 "%s: Invalid pWdaParams pointer", __func__);
14146 VOS_ASSERT(0);
14147 return;
14148 }
14149
14150 if (IS_WDI_STATUS_FAILURE(wdiStatus))
14151 {
14152 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14153 vos_mem_free(pWdaParams->wdaMsgParam);
14154 vos_mem_free(pWdaParams);
14155 }
14156
14157 return;
14158}
14159
Jeff Johnson295189b2012-06-20 16:38:30 -070014160/*
14161 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
14162 * Request to WDI to set Receive Filters
14163 */
14164VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
14165 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
14166{
Jeff Johnson43971f52012-07-17 12:26:56 -070014167 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014168 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
14169 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
14170 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
14171 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
14172 tWDA_ReqParams *pWdaParams ;
14173 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014175 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014176 if(NULL == pwdiSetRcvPktFilterReqParamsType)
14177 {
14178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014179 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014180 VOS_ASSERT(0);
14181 return VOS_STATUS_E_NOMEM;
14182 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014183 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14184 if(NULL == pWdaParams)
14185 {
14186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014187 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014188 VOS_ASSERT(0);
14189 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
14190 return VOS_STATUS_E_NOMEM;
14191 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014192 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
14193 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
14194 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
14195 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070014196 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
14197 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
14198
14199 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
14200 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014201
14202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14203 "FID %d FT %d NParams %d CT %d",
14204 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
14205 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
14206 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
14207 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070014208 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
14209 {
14210 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
14211 &pRcvPktFilterCfg->paramsData[i],
14212 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070014213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014214 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070014215 pwdiSetRcvPktFilterReqParamsType->
14216 wdiPktFilterCfg.paramsData[i].protocolLayer,
14217 pwdiSetRcvPktFilterReqParamsType->
14218 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070014219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014220 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070014221 pwdiSetRcvPktFilterReqParamsType->
14222 wdiPktFilterCfg.paramsData[i].dataOffset,
14223 pwdiSetRcvPktFilterReqParamsType->
14224 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070014225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014226 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070014227 pwdiSetRcvPktFilterReqParamsType->
14228 wdiPktFilterCfg.paramsData[i].compareData[0],
14229 pwdiSetRcvPktFilterReqParamsType->
14230 wdiPktFilterCfg.paramsData[i].compareData[1],
14231 pwdiSetRcvPktFilterReqParamsType->
14232 wdiPktFilterCfg.paramsData[i].compareData[2],
14233 pwdiSetRcvPktFilterReqParamsType->
14234 wdiPktFilterCfg.paramsData[i].compareData[3],
14235 pwdiSetRcvPktFilterReqParamsType->
14236 wdiPktFilterCfg.paramsData[i].compareData[4],
14237 pwdiSetRcvPktFilterReqParamsType->
14238 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070014239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014240 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070014241 pwdiSetRcvPktFilterReqParamsType->
14242 wdiPktFilterCfg.paramsData[i].dataMask[0],
14243 pwdiSetRcvPktFilterReqParamsType->
14244 wdiPktFilterCfg.paramsData[i].dataMask[1],
14245 pwdiSetRcvPktFilterReqParamsType->
14246 wdiPktFilterCfg.paramsData[i].dataMask[2],
14247 pwdiSetRcvPktFilterReqParamsType->
14248 wdiPktFilterCfg.paramsData[i].dataMask[3],
14249 pwdiSetRcvPktFilterReqParamsType->
14250 wdiPktFilterCfg.paramsData[i].dataMask[4],
14251 pwdiSetRcvPktFilterReqParamsType->
14252 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070014253 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014254 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014255 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014256 /* Store Params pass it to WDI */
14257 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
14258 pWdaParams->pWdaContext = pWDA;
14259 /* Store param pointer as passed in by caller */
14260 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070014261 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014262 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014263 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014264 if(IS_WDI_STATUS_FAILURE(status))
14265 {
14266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14267 "Failure in SetFilter(),free all the memory,status %d ",status);
14268 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14269 vos_mem_free(pWdaParams->wdaMsgParam);
14270 vos_mem_free(pWdaParams);
14271 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014272 return CONVERT_WDI2VOS_STATUS(status) ;
14273}
Jeff Johnson295189b2012-06-20 16:38:30 -070014274/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014275 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014276 *
14277 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014278void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014279 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
14280 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014281{
14282 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14283 tWDA_CbContext *pWDA;
14284 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
14285 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
14286 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
14287 tANI_U8 i;
14288 vos_msg_t vosMsg;
14289
14290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014291 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014292 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
14293
Jeff Johnsone7245742012-09-05 17:12:55 -070014294 if(NULL == pRcvFltPktMatchCntRsp)
14295 {
14296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014297 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070014298 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014299 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070014300 return ;
14301 }
14302
Jeff Johnson295189b2012-06-20 16:38:30 -070014303 if(NULL == pWdaParams)
14304 {
14305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014306 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014307 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014308 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070014309 return ;
14310 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014311 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
14312 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070014313 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
14314 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
14315
14316 /* Message Header */
14317 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
14318 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
14319
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014320 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070014321
14322 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
14323 {
14324 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
14325 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
14326 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014327 /* VOS message wrapper */
14328 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
14329 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
14330 vosMsg.bodyval = 0;
14331 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14332 {
14333 /* free the mem and return */
14334 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
14335 }
14336
14337 vos_mem_free(pWdaParams->wdaMsgParam) ;
14338 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14339 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070014340
14341 return;
14342}
14343/*
14344 * FUNCTION: WDA_FilterMatchCountReqCallback
14345 * Free memory and send RSP back to SME.
14346 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
14347 */
14348void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
14349{
14350 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14351 vos_msg_t vosMsg;
14352
14353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14354 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14355
14356 if(NULL == pWdaParams)
14357 {
14358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14359 "%s: pWdaParams received NULL", __func__);
14360 VOS_ASSERT(0);
14361 return;
14362 }
14363
14364 /* VOS message wrapper */
14365 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
14366 vosMsg.bodyptr = NULL;
14367 vosMsg.bodyval = 0;
14368
14369 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14370 {
14371 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14372 vos_mem_free(pWdaParams->wdaMsgParam);
14373 vos_mem_free(pWdaParams);
14374 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
14375 }
14376
14377 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070014378}
Jeff Johnson295189b2012-06-20 16:38:30 -070014379/*
14380 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
14381 * Request to WDI to get PC Filter Match Count
14382 */
14383VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
14384{
Jeff Johnson43971f52012-07-17 12:26:56 -070014385 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014386 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
14387 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
14388 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014390 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014391 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
14392 {
14393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014394 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014395 VOS_ASSERT(0);
14396 return VOS_STATUS_E_NOMEM;
14397 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014398 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14399 if(NULL == pWdaParams)
14400 {
14401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014402 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014403 VOS_ASSERT(0);
14404 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
14405 return VOS_STATUS_E_NOMEM;
14406 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014407
Yue Ma7f44bbe2013-04-12 11:47:39 -070014408 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
14409 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014410
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014411 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
14412 pRcvFltPktMatchRsp->bssId,
14413 sizeof(wpt_macAddr));
14414
Jeff Johnson295189b2012-06-20 16:38:30 -070014415 /* Store Params pass it to WDI */
14416 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
14417 pWdaParams->pWdaContext = pWDA;
14418 /* Store param pointer as passed in by caller */
14419 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070014420 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014421 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014422 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014423 if(IS_WDI_STATUS_FAILURE(status))
14424 {
14425 /* failure returned by WDI API */
14426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14427 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
14428 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14429 vos_mem_free(pWdaParams) ;
14430 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
14431 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
14432 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014433 return CONVERT_WDI2VOS_STATUS(status) ;
14434}
Jeff Johnson295189b2012-06-20 16:38:30 -070014435/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014436 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014437 *
14438 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014439void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014440 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
14441 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014442{
14443 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014445 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014446/* WDA_VOS_ASSERT(NULL != pWdaParams); */
14447 if(NULL == pWdaParams)
14448 {
14449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014450 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014451 VOS_ASSERT(0) ;
14452 return ;
14453 }
14454
14455 vos_mem_free(pWdaParams->wdaMsgParam) ;
14456 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14457 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014458 //print a msg, nothing else to do
14459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014460 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070014461 return ;
14462}
Jeff Johnson295189b2012-06-20 16:38:30 -070014463/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014464 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
14465 * Free memory.
14466 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
14467 */
14468void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
14469{
14470 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14471
14472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14473 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14474
14475 if(NULL == pWdaParams)
14476 {
14477 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14478 "%s: Invalid pWdaParams pointer", __func__);
14479 VOS_ASSERT(0);
14480 return;
14481 }
14482
14483 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14484 {
14485 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14486 vos_mem_free(pWdaParams->wdaMsgParam);
14487 vos_mem_free(pWdaParams);
14488 }
14489
14490 return;
14491}
14492/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014493 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
14494 * Request to WDI to clear Receive Filters
14495 */
14496VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
14497 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
14498{
Jeff Johnson43971f52012-07-17 12:26:56 -070014499 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014500 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
14501 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
14502 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014504 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014505 if(NULL == pwdiRcvFltPktClearReqParamsType)
14506 {
14507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014508 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014509 VOS_ASSERT(0);
14510 return VOS_STATUS_E_NOMEM;
14511 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014512 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14513 if(NULL == pWdaParams)
14514 {
14515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014516 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014517 VOS_ASSERT(0);
14518 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
14519 return VOS_STATUS_E_NOMEM;
14520 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014521 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
14522 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070014523 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
14524 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
14525 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
14526 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014527
Yue Ma7f44bbe2013-04-12 11:47:39 -070014528 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014529 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014530 /* Store Params pass it to WDI */
14531 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
14532 pWdaParams->pWdaContext = pWDA;
14533 /* Store param pointer as passed in by caller */
14534 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070014535 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014536 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014537 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014538 if(IS_WDI_STATUS_FAILURE(status))
14539 {
14540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14541 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
14542 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080014543 vos_mem_free(pWdaParams->wdaMsgParam);
14544 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014545 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014546 return CONVERT_WDI2VOS_STATUS(status) ;
14547}
14548#endif // WLAN_FEATURE_PACKET_FILTERING
14549
Jeff Johnson295189b2012-06-20 16:38:30 -070014550/*
14551 * FUNCTION: WDA_ProcessSetPowerParamsReq
14552 * Request to WDI to set power params
14553 */
14554VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
14555 tSirSetPowerParamsReq *pPowerParams)
14556{
Jeff Johnson43971f52012-07-17 12:26:56 -070014557 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014558 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
14559 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014560 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014562 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014563 if(NULL == pwdiSetPowerParamsReqInfo)
14564 {
14565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014566 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014567 VOS_ASSERT(0);
14568 return VOS_STATUS_E_NOMEM;
14569 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014570 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14571 if(NULL == pWdaParams)
14572 {
14573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014574 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014575 VOS_ASSERT(0);
14576 vos_mem_free(pwdiSetPowerParamsReqInfo);
14577 return VOS_STATUS_E_NOMEM;
14578 }
Jeff Johnsone7245742012-09-05 17:12:55 -070014579
Jeff Johnson295189b2012-06-20 16:38:30 -070014580
14581 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
14582 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070014583 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
14584 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070014585 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
14586 pPowerParams->uListenInterval;
14587 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
14588 pPowerParams->uBcastMcastFilter;
14589 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
14590 pPowerParams->uEnableBET;
14591 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
14592 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070014593 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
14594 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070014595 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
14596 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014597
Jeff Johnson295189b2012-06-20 16:38:30 -070014598 /* Store Params pass it to WDI */
14599 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
14600 pWdaParams->pWdaContext = pWDA;
14601 /* Store param pointer as passed in by caller */
14602 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014603 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014604 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014605 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014606 if(IS_WDI_STATUS_FAILURE(status))
14607 {
14608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14609 "Failure in Set power params REQ WDI API, free all the memory " );
14610 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14611 vos_mem_free(pWdaParams->wdaMsgParam);
14612 pWdaParams->wdaWdiApiMsgParam = NULL;
14613 pWdaParams->wdaMsgParam = NULL;
14614 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014615 return CONVERT_WDI2VOS_STATUS(status) ;
14616}
14617
14618/*
14619 * FUNCTION: WDA_SetTmLevelRspCallback
14620 * Set TM Level response
14621 */
14622void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
14623{
14624 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14625
14626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014627 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014628
14629 if(NULL == pWdaParams)
14630 {
14631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014632 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014633 VOS_ASSERT(0) ;
14634 return ;
14635 }
14636
14637 /* Dose not need to send notification to upper layer
14638 * Just free allocated resources */
14639 if( pWdaParams != NULL )
14640 {
14641 if( pWdaParams->wdaWdiApiMsgParam != NULL )
14642 {
14643 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14644 }
14645 vos_mem_free(pWdaParams->wdaMsgParam) ;
14646 vos_mem_free(pWdaParams) ;
14647 }
14648}
14649
14650/*
14651 * FUNCTION: WDA_ProcessSetTmLevelReq
14652 * Set TM Level request
14653 */
14654VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
14655 tAniSetTmLevelReq *setTmLevelReq)
14656{
14657 WDI_Status status = WDI_STATUS_SUCCESS ;
14658 tWDA_ReqParams *pWdaParams ;
14659 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
14660 (WDI_SetTmLevelReqType *)vos_mem_malloc(
14661 sizeof(WDI_SetTmLevelReqType)) ;
14662 if(NULL == wdiSetTmLevelReq)
14663 {
14664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014665 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014666 VOS_ASSERT(0);
14667 return VOS_STATUS_E_NOMEM;
14668 }
14669
14670 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14671 if(NULL == pWdaParams)
14672 {
14673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014674 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014675 VOS_ASSERT(0);
14676 vos_mem_free(wdiSetTmLevelReq);
14677 return VOS_STATUS_E_NOMEM;
14678 }
14679
14680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014681 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014682
14683 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
14684 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
14685
14686 pWdaParams->pWdaContext = pWDA;
14687 pWdaParams->wdaMsgParam = setTmLevelReq;
14688 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
14689
14690 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
14691 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
14692
14693 if(IS_WDI_STATUS_FAILURE(status))
14694 {
14695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080014696 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070014697 vos_mem_free(pWdaParams->wdaMsgParam) ;
14698 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14699 vos_mem_free(pWdaParams) ;
14700 }
14701
14702 return CONVERT_WDI2VOS_STATUS(status) ;
14703}
14704
14705VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
14706 tpTxControlParams pTxCtrlParam)
14707{
14708 VOS_STATUS wdaStatus;
14709
14710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014711 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014712 if( pTxCtrlParam == NULL )
14713 {
14714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014715 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014716 return VOS_STATUS_E_FAILURE;
14717 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014718 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
14719 {
14720 wdaStatus = WDA_SuspendDataTx(pWDA);
14721 }
14722 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
14723 {
14724 wdaStatus = WDA_ResumeDataTx(pWDA);
14725 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014726 return wdaStatus;
14727}
14728
14729 /* FUNCTION WDA_featureCapsExchange
14730 * WDA API to invoke capability exchange between host and FW.
14731 */
14732void WDA_featureCapsExchange(v_PVOID_t pVosContext)
14733{
14734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014735 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070014736 WDI_featureCapsExchangeReq( NULL, pVosContext);
14737}
14738
Yathish9f22e662012-12-10 14:21:35 -080014739/* FUNCTION WDA_disableCapablityFeature
14740 * WDA API to diable Active mode offload in host.
14741 */
14742void WDA_disableCapablityFeature(tANI_U8 feature_index)
14743{
14744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14745 "%s:enter", __func__ );
14746 WDI_disableCapablityFeature(feature_index);
14747}
14748
Jeff Johnson295189b2012-06-20 16:38:30 -070014749 /* FUNCTION WDA_getHostWlanFeatCaps
14750 * Wrapper for WDI API, that will return if the feature (enum value).passed
14751 * to this API is supported or not in Host
14752 * return value
14753 * 0 - implies feature is NOT Supported
14754 * any non zero value - implies feature is SUPPORTED
14755 */
14756tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
14757{
14758 return WDI_getHostWlanFeatCaps(featEnumValue);
14759}
14760
14761 /* FUNCTION WDA_getFwWlanFeatCaps
14762 * Wrapper for WDI API, that will return if the feature (enum value).passed
14763 * to this API is supported or not in FW
14764 * return value
14765 * 0 - implies feature is NOT Supported
14766 * any non zero value - implies feature is SUPPORTED
14767 */
14768tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
14769{
14770 return WDI_getFwWlanFeatCaps(featEnumValue);
14771}
14772
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014773
Jeff Johnson295189b2012-06-20 16:38:30 -070014774/*
14775 * FUNCTION: WDA_shutdown
14776 * Shutdown WDA/WDI without handshaking with Riva.
14777 * Synchronous function.
14778 */
14779VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
14780{
14781 WDI_Status wdiStatus;
14782 //tANI_U8 eventIdx = 0;
14783 VOS_STATUS status = VOS_STATUS_SUCCESS;
14784 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070014785 if (NULL == pWDA)
14786 {
14787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014788 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070014789 VOS_ASSERT(0);
14790 return VOS_STATUS_E_FAILURE;
14791 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014792 /* FTM mode stay START_STATE */
14793 if( (WDA_READY_STATE != pWDA->wdaState) &&
14794 (WDA_INIT_STATE != pWDA->wdaState) &&
14795 (WDA_START_STATE != pWDA->wdaState) )
14796 {
14797 VOS_ASSERT(0);
14798 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014799
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014800 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
14801 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070014802 {
14803 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014804 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014805 }
Leo Chang9d76f622013-08-23 16:34:52 -070014806 else
14807 {
14808 vos_event_destroy(&pWDA->ftmStopDoneEvent);
14809 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014810
Jeff Johnson295189b2012-06-20 16:38:30 -070014811 /* call WDI shutdown */
14812 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070014813 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
14814 {
14815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14816 "error in WDA Stop" );
14817 status = VOS_STATUS_E_FAILURE;
14818 }
14819 /* WDI stop is synchrnous, shutdown is complete when it returns */
14820 pWDA->wdaState = WDA_STOP_STATE;
14821
Jeff Johnson295189b2012-06-20 16:38:30 -070014822 /* shutdown should perform the stop & close actions. */
14823 /* Destroy the event */
14824 status = vos_event_destroy(&pWDA->txFrameEvent);
14825 if(!VOS_IS_STATUS_SUCCESS(status))
14826 {
14827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014828 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014829 status = VOS_STATUS_E_FAILURE;
14830 }
14831 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
14832 if(!VOS_IS_STATUS_SUCCESS(status))
14833 {
14834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014835 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014836 status = VOS_STATUS_E_FAILURE;
14837 }
14838 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
14839 if(!VOS_IS_STATUS_SUCCESS(status))
14840 {
14841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014842 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014843 status = VOS_STATUS_E_FAILURE;
14844 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014845 /* free WDA context */
14846 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
14847 if ( !VOS_IS_STATUS_SUCCESS(status) )
14848 {
14849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14850 "error in WDA close " );
14851 status = VOS_STATUS_E_FAILURE;
14852 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014853 return status;
14854}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080014855
Jeff Johnsone7245742012-09-05 17:12:55 -070014856/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080014857 * FUNCTION: WDA_setNeedShutdown
14858 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070014859 */
14860
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080014861void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070014862{
14863 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070014864 if(pWDA == NULL)
14865 {
14866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14867 "Could not get the WDA Context pointer" );
14868 return;
14869 }
Jeff Johnsone7245742012-09-05 17:12:55 -070014870 pWDA->needShutdown = TRUE;
14871}
14872/*
14873 * FUNCTION: WDA_needShutdown
14874 * WDA needs a shutdown
14875 */
14876
14877v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
14878{
14879 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070014880 if(pWDA == NULL)
14881 {
14882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14883 "Could not get the WDA Context pointer" );
14884 return 0;
14885 }
14886 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070014887}
14888
Mohit Khanna4a70d262012-09-11 16:30:12 -070014889#ifdef WLAN_FEATURE_11AC
14890/*
14891 * FUNCTION: WDA_SetBeaconFilterReqCallback
14892 *
14893 */
14894void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
14895{
14896 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014898 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070014899 if(NULL == pWdaParams)
14900 {
14901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014902 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070014903 VOS_ASSERT(0) ;
14904 return ;
14905 }
Jeff Johnsone7245742012-09-05 17:12:55 -070014906
Mohit Khanna4a70d262012-09-11 16:30:12 -070014907 vos_mem_free(pWdaParams->wdaMsgParam) ;
14908 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14909 vos_mem_free(pWdaParams) ;
14910 /*
14911 * No respone required for SetBeaconFilter req so just free the request
14912 * param here
14913 */
14914
14915 return ;
14916}
14917
14918VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
14919 tUpdateVHTOpMode *pData)
14920{
14921 WDI_Status status = WDI_STATUS_SUCCESS ;
14922 tWDA_ReqParams *pWdaParams ;
14923 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
14924 sizeof(WDI_UpdateVHTOpMode)) ;
14925 if(NULL == wdiTemp)
14926 {
14927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014928 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070014929 VOS_ASSERT(0);
14930 return VOS_STATUS_E_NOMEM;
14931 }
14932 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14933 if(NULL == pWdaParams)
14934 {
14935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014936 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070014937 VOS_ASSERT(0);
14938 vos_mem_free(wdiTemp);
14939 return VOS_STATUS_E_NOMEM;
14940 }
14941
14942 wdiTemp->opMode = pData->opMode;
14943 wdiTemp->staId = pData->staId;
14944
14945 pWdaParams->pWdaContext = pWDA;
14946 /* Store Req pointer, as this will be used for response */
14947 pWdaParams->wdaMsgParam = (void *)pData;
14948 /* store Params pass it to WDI */
14949 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
14950
14951 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
14952
14953 if(IS_WDI_STATUS_FAILURE(status))
14954 {
14955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14956 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
14957 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14958 vos_mem_free(pWdaParams->wdaMsgParam);
14959 vos_mem_free(pWdaParams);
14960 }
14961 return CONVERT_WDI2VOS_STATUS(status) ;
14962}
14963#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014964
14965/*==========================================================================
14966 FUNCTION WDA_TransportChannelDebug
14967
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070014968 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014969 Display Transport Channel debugging information
14970 User may request to display DXE channel snapshot
14971 Or if host driver detects any abnormal stcuk may display
14972
14973 PARAMETERS
schang6295e542013-03-12 15:31:23 -070014974 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080014975 displaySnapshot : Display DXE snapshot option
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014976 enableStallDetect : Enable stall detect feature
14977 This feature will take effect to data performance
14978 Not integrate till fully verification
14979
14980 RETURN VALUE
14981 NONE
14982
14983===========================================================================*/
14984void WDA_TransportChannelDebug
14985(
schang6295e542013-03-12 15:31:23 -070014986 tpAniSirGlobal pMac,
14987 v_BOOL_t displaySnapshot,
14988 v_BOOL_t toggleStallDetect
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014989)
14990{
Madan Mohan Koyyalamudi24a00f92012-10-22 15:21:02 -070014991 WDI_TransportChannelDebug(displaySnapshot, toggleStallDetect);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014992 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070014993}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070014994
14995/*==========================================================================
14996 FUNCTION WDA_SetEnableSSR
14997
14998 DESCRIPTION
14999 API to enable/disable SSR on WDI timeout
15000
15001 PARAMETERS
15002 enableSSR : enable/disable SSR
15003
15004 RETURN VALUE
15005 NONE
15006
15007===========================================================================*/
15008void WDA_SetEnableSSR(v_BOOL_t enableSSR)
15009{
15010 WDI_SetEnableSSR(enableSSR);
15011}
Leo Chang9056f462013-08-01 19:21:11 -070015012
15013#ifdef FEATURE_WLAN_LPHB
15014/*
15015 * FUNCTION: WDA_LPHBconfRspCallback
15016 *
15017 */
15018void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
15019{
15020 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15021
15022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15023 "<------ %s " ,__func__);
15024 if (NULL == pWdaParams)
15025 {
15026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15027 "%s: pWdaParams received NULL", __func__);
15028 VOS_ASSERT(0) ;
15029 return ;
15030 }
15031
15032 /* Do not need to send notification to upper layer
15033 * Just free allocated resources */
15034 if (pWdaParams != NULL)
15035 {
15036 if (pWdaParams->wdaWdiApiMsgParam != NULL)
15037 {
15038 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15039 }
15040 vos_mem_free(pWdaParams->wdaMsgParam) ;
15041 vos_mem_free(pWdaParams) ;
15042 }
15043
15044 return;
15045}
15046
15047/*
15048 * FUNCTION: WDA_ProcessLPHBConfReq
15049 *
15050 */
15051VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
15052 tSirLPHBReq *pData)
15053{
15054 WDI_Status wdiStatus;
15055 tWDA_ReqParams *pWdaParams ;
15056
15057 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15058 "------> %s " , __func__);
15059
15060 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15061 if (NULL == pWdaParams)
15062 {
15063 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15064 "%s: VOS MEM Alloc Failure", __func__);
15065 VOS_ASSERT(0);
15066 vos_mem_free(pData);
15067 return VOS_STATUS_E_NOMEM;
15068 }
15069
15070 pWdaParams->pWdaContext = pWDA;
15071 pWdaParams->wdaMsgParam = (void *)pData;
15072 pWdaParams->wdaWdiApiMsgParam = NULL;
15073
15074 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
15075 if (WDI_STATUS_PENDING == wdiStatus)
15076 {
15077 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15078 "Pending received for %s:%d ", __func__, __LINE__);
15079 }
15080 else if (WDI_STATUS_SUCCESS != wdiStatus)
15081 {
15082 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15083 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
15084 vos_mem_free(pWdaParams->wdaMsgParam);
15085 vos_mem_free(pWdaParams);
15086 }
15087
15088 return CONVERT_WDI2VOS_STATUS(wdiStatus);
15089}
15090#endif /* FEATURE_WLAN_LPHB */
15091