blob: 203a28917442b15e91a5f1ad3691125073fb40bf [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -08002 * Copyright (c) 2012-2014, The Linux Foundation. All rights reserved.
Gopichand Nakkala92f07d82013-01-08 21:16:34 -08003 *
4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5 *
6 *
7 * Permission to use, copy, modify, and/or distribute this software for
8 * any purpose with or without fee is hereby granted, provided that the
9 * above copyright notice and this permission notice appear in all
10 * copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
13 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
14 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
15 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 * PERFORMANCE OF THIS SOFTWARE.
20 */
21/*
Jeff Johnson32d95a32012-09-10 13:15:23 -070022 * Copyright (c) 2012, The Linux Foundation. All rights reserved.
Jeff Johnson295189b2012-06-20 16:38:30 -070023 *
24 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
25 *
26 *
27 * Permission to use, copy, modify, and/or distribute this software for
28 * any purpose with or without fee is hereby granted, provided that the
29 * above copyright notice and this permission notice appear in all
30 * copies.
31 *
32 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
33 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
34 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
35 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
36 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
37 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
38 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
39 * PERFORMANCE OF THIS SOFTWARE.
40 */
41
42/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070043 W L A N _ Q C T _ WDA . C
Jeff Johnson295189b2012-06-20 16:38:30 -070044 OVERVIEW:
Jeff Johnson295189b2012-06-20 16:38:30 -070045 This software unit holds the implementation of the WLAN Transport Layer.
Jeff Johnson295189b2012-06-20 16:38:30 -070046 The functions externalized by this module are to be called ONLY by other
47 WLAN modules that properly register with the Transport Layer initially.
Jeff Johnson295189b2012-06-20 16:38:30 -070048 DEPENDENCIES:
Jeff Johnson295189b2012-06-20 16:38:30 -070049 Are listed for each API below.
50
Jeff Johnson295189b2012-06-20 16:38:30 -070051 Copyright (c) 2010-2011 QUALCOMM Incorporated.
52 All Rights Reserved.
53 Qualcomm Confidential and Proprietary
54===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070055/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070056 EDIT HISTORY FOR FILE
57
Jeff Johnson295189b2012-06-20 16:38:30 -070058 This section contains comments describing changes made to the module.
59 Notice that changes are listed in reverse chronological order.
60
Jeff Johnson295189b2012-06-20 16:38:30 -070061 $Header$$DateTime$$Author$
62
Jeff Johnson295189b2012-06-20 16:38:30 -070063 when who what, where, why
64---------- --- -------------------------------------------------
6510/05/2011 haparna Adding support for Keep Alive Feature
662010-12-30 smiryala UMAC convergence changes
672010-08-19 adwivedi WLAN DAL AL(WDA) layer for Prima
68===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070069#include "vos_mq.h"
70#include "vos_api.h"
71#include "vos_packet.h"
72#include "vos_nvitem.h"
73#include "sirApi.h"
74#include "wlan_qct_pal_packet.h"
75#include "wlan_qct_wda.h"
76#include "wlan_qct_wda_msg.h"
77#include "wlan_qct_wdi_cfg.h"
78#include "wlan_qct_wdi.h"
79#include "wlan_qct_wdi_ds.h"
80#include "wlan_hal_cfg.h"
81/**********************/
82#include "wniApi.h"
83#include "cfgApi.h"
84#include "limApi.h"
85#include "wlan_qct_tl.h"
86#include "wlan_qct_tli_ba.h"
87#include "limUtils.h"
88#include "btcApi.h"
89#include "vos_sched.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070090#include "pttMsgApi.h"
91#include "wlan_qct_sys.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070092/* Used MACRO's */
93/* Get WDA context from vOSS module */
94#define VOS_GET_WDA_CTXT(a) vos_get_context(VOS_MODULE_ID_WDA, a)
95#define VOS_GET_MAC_CTXT(a) vos_get_context(VOS_MODULE_ID_PE, a)
96#define OFFSET_OF(structType,fldName) (&((structType*)0)->fldName)
97#define WDA_BA_TX_FRM_THRESHOLD (5)
Jeff Johnson295189b2012-06-20 16:38:30 -070098#define CONVERT_WDI2SIR_STATUS(x) \
99 ((WDI_STATUS_SUCCESS != (x)) ? eSIR_FAILURE : eSIR_SUCCESS)
100
101#define IS_WDI_STATUS_FAILURE(status) \
102 ((WDI_STATUS_SUCCESS != (status)) && (WDI_STATUS_PENDING != (status)))
Jeff Johnson295189b2012-06-20 16:38:30 -0700103#define CONVERT_WDI2VOS_STATUS(x) \
104 ((IS_WDI_STATUS_FAILURE(x)) ? VOS_STATUS_E_FAILURE : VOS_STATUS_SUCCESS)
105
106/* macro's for acessing TL API/data structures */
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -0700107#define WDA_TL_GET_STA_STATE(a, b, c) WLANTL_GetSTAState(a, b, c)
Jeff Johnson295189b2012-06-20 16:38:30 -0700108#define WDA_TL_GET_TX_PKTCOUNT(a, b, c, d) WLANTL_GetTxPktCount(a, b, c, d)
Jeff Johnson295189b2012-06-20 16:38:30 -0700109#define WDA_GET_BA_TXFLAG(a, b, c) \
110 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) & (1 << (c)))
111
112#define WDA_SET_BA_TXFLAG(a, b, c) \
113 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) |= (1 << (c)))
114
115#define WDA_CLEAR_BA_TXFLAG(a, b, c) \
116 (((a)->wdaStaInfo[b].ucUseBaBitmap) &= ~(1 << c))
Jeff Johnson295189b2012-06-20 16:38:30 -0700117#define WDA_TL_BA_SESSION_ADD(a, b, c, d, e, f, g) \
118 WLANTL_BaSessionAdd(a, b, c, d, e, f, g)
Jeff Johnson295189b2012-06-20 16:38:30 -0700119/* timer related Macros */
120#define WDA_CREATE_TIMER(a, b, c, d, e, f, g) \
121 tx_timer_create(a, b, c, d, e, f, g)
122#define WDA_START_TIMER(a) tx_timer_activate(a)
123#define WDA_STOP_TIMER(a) tx_timer_deactivate(a)
124#define WDA_DESTROY_TIMER(a) tx_timer_delete(a)
Jeff Johnson32d95a32012-09-10 13:15:23 -0700125#define WDA_WDI_START_TIMEOUT (WDI_RESPONSE_TIMEOUT + 5000)
Jeff Johnson295189b2012-06-20 16:38:30 -0700126
127#define WDA_LAST_POLLED_THRESHOLD(a, curSta, tid) \
128 ((a)->wdaStaInfo[curSta].framesTxed[tid] + WDA_BA_TX_FRM_THRESHOLD)
Jeff Johnson295189b2012-06-20 16:38:30 -0700129#define WDA_BA_MAX_WINSIZE (64)
Jeff Johnson295189b2012-06-20 16:38:30 -0700130#define WDA_INVALID_KEY_INDEX 0xFF
Jeff Johnson295189b2012-06-20 16:38:30 -0700131#define WDA_NUM_PWR_SAVE_CFG 11
Jeff Johnson295189b2012-06-20 16:38:30 -0700132#define WDA_TX_COMPLETE_TIME_OUT_VALUE 1000
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800133#define WDA_TRAFFIC_STATS_TIME_OUT_VALUE 1000
Jeff Johnson295189b2012-06-20 16:38:30 -0700134
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700135#define WDA_MAX_RETRIES_TILL_RING_EMPTY 1000 /* MAX 10000 msec = 10 seconds wait */
Jeff Johnson295189b2012-06-20 16:38:30 -0700136
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700137#define WDA_WAIT_MSEC_TILL_RING_EMPTY 10 /* 10 msec wait per cycle */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700138#define WDA_IS_NULL_MAC_ADDRESS(mac_addr) \
139 ((mac_addr[0] == 0x00) && (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) &&\
140 (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) && (mac_addr[3] == 0x00))
141
142#define WDA_MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
143#define WDA_MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x"
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -0800144#define WDA_DUMPCMD_WAIT_TIMEOUT 10000
145
Jeff Johnson295189b2012-06-20 16:38:30 -0700146/* extern declarations */
147extern void vos_WDAComplete_cback(v_PVOID_t pVosContext);
Hoonki Lee9af07cf2013-04-24 01:21:58 -0700148extern wpt_uint8 WDI_GetActiveSessionsCount (void *pWDICtx, wpt_macAddr macBSSID, wpt_boolean skipBSSID);
149
Jeff Johnson295189b2012-06-20 16:38:30 -0700150/* forward declarations */
151void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
152 void *pBodyptr, tANI_U32 bodyVal) ;
153VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
154 WDI_StartReqParamsType *wdiStartParams ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700155VOS_STATUS WDA_wdiCompleteCB(v_PVOID_t pVosContext) ;
156VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams);
157
158extern v_BOOL_t sys_validateStaConfig( void *pImage, unsigned long cbFile,
159 void **ppStaConfig, v_SIZE_t *pcbStaConfig ) ;
160void processCfgDownloadReq(tpAniSirGlobal pMac, tANI_U16 length,
161 tANI_U32 *pConfig) ;
162void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
163 WDI_ConfigBSSReqInfoType *wdiBssParams, tAddBssParams *wdaBssParams) ;
164void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
165 WDI_ConfigStaReqInfoType *wdiStaParams, tAddStaParams *wdaStaParams) ;
166void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
167 void* pUserData ) ;
168static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA) ;
169static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA);
170void WDA_BaCheckActivity(tWDA_CbContext *pWDA) ;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800171void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700172void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams, void* pUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -0700173#ifdef WLAN_FEATURE_VOWIFI_11R
174VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA, tAggrAddTsParams *pAggrAddTsReqParams);
175#endif /* WLAN_FEATURE_VOWIFI_11R */
176
Jeff Johnson295189b2012-06-20 16:38:30 -0700177void WDA_TimerHandler(v_VOID_t *pWDA, tANI_U32 timerInfo) ;
178void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pContext) ;
179VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700180#ifdef FEATURE_WLAN_SCAN_PNO
181static VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA, tSirPNOScanReq *pPNOScanReqParams);
182static VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA, tSirSetRSSIFilterReq* pRssiFilterParams);
183static VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA, tSirUpdateScanParams *pUpdateScanParams);
184#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700185#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -0700186VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,tSirRoamOffloadScanReq *pRoamOffloadScanReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700187void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData);
188void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType);
189void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType);
190#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700191#ifdef WLAN_FEATURE_PACKET_FILTERING
192static VOS_STATUS WDA_Process8023MulticastListReq (
193 tWDA_CbContext *pWDA,
194 tSirRcvFltMcAddrList *pRcvFltMcAddrLis
195 );
196static VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (
197 tWDA_CbContext *pWDA,
198 tSirRcvPktFilterCfgType *pRcvPktFilterCfg
199 );
200static VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (
201 tWDA_CbContext *pWDA,
202 tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp
203 );
204static VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (
205 tWDA_CbContext *pWDA,
206 tSirRcvFltPktClearParam *pRcvFltPktClearParam
207 );
208#endif // WLAN_FEATURE_PACKET_FILTERING
Jeff Johnson295189b2012-06-20 16:38:30 -0700209VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA, tSirSetPowerParamsReq *pPowerParams);
Jeff Johnson295189b2012-06-20 16:38:30 -0700210static VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
211 tpTxControlParams pTxCtrlParam);
Jeff Johnson295189b2012-06-20 16:38:30 -0700212VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
213 v_U8_t *pDefaultKeyId,
214 v_U8_t *pNumKeys,
215 WDI_KeysType *pWdiKeys );
216
217#ifdef WLAN_FEATURE_GTK_OFFLOAD
218static VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA, tpSirGtkOffloadParams pGtkOffloadParams);
219static VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA, tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp);
220#endif // WLAN_FEATURE_GTK_OFFLOAD
221
222VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
223 tAniSetTmLevelReq *setTmLevelReq);
Mohit Khanna4a70d262012-09-11 16:30:12 -0700224#ifdef WLAN_FEATURE_11AC
225VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
226 tUpdateVHTOpMode *pData);
227#endif
Leo Chang9056f462013-08-01 19:21:11 -0700228
229#ifdef FEATURE_WLAN_LPHB
230VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
231 tSirLPHBReq *pData);
232#endif /* FEATURE_WLAN_LPHB */
Jeff Johnson295189b2012-06-20 16:38:30 -0700233/*
234 * FUNCTION: WDA_open
235 * Allocate the WDA context
236 */
237VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t pOSContext,
238 tMacOpenParameters *pMacParams )
239{
240 tWDA_CbContext *wdaContext;
241 VOS_STATUS status;
242 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700243 /* Allocate WDA context */
244 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
245 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
246 if(!VOS_IS_STATUS_SUCCESS(status))
247 {
248 return VOS_STATUS_E_NOMEM;
249 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700250 /*__asm int 3;*/
251 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
252
253 /* Initialize data structures */
254 wdaContext->pVosContext = pVosContext;
255 wdaContext->wdaState = WDA_INIT_STATE;
256 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
257
258 /* Initialize WDA-WDI synchronization event */
259 status = vos_event_init(&wdaContext->wdaWdiEvent);
260 if(!VOS_IS_STATUS_SUCCESS(status))
261 {
262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800263 "WDI Sync Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800264 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700265 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700266 /* Init Frame transfer event */
267 status = vos_event_init(&wdaContext->txFrameEvent);
268 if(!VOS_IS_STATUS_SUCCESS(status))
269 {
270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800271 "VOS Mgmt Frame Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800272 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700273 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700274 status = vos_event_init(&wdaContext->suspendDataTxEvent);
275 if(!VOS_IS_STATUS_SUCCESS(status))
276 {
277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800278 "VOS suspend data tx Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800279 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700280 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700281 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
282 if(!VOS_IS_STATUS_SUCCESS(status))
283 {
284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800285 "VOS wait On Wdi Ind Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800286 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700287 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700288 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700289 wdaContext->driverMode = pMacParams->driverType;
290 if(WDI_STATUS_SUCCESS != WDI_Init(pOSContext, &wdaContext->pWdiContext,
291 &wdiDevCapability, pMacParams->driverType))
292 {
293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
294 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800295 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700296 }
297 else
298 {
299 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
300 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
301 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700302 /* update max STA in WDA used for BA */
303 wdaContext->wdaMaxSta = pMacParams->maxStation;
304 /* store the frameTransRequired flag in wdaContext, to send this to HAL
305 * in WDA_Start
306 */
307 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
308 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700309 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800310
311error:
312 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
313 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700314}
315
Jeff Johnson295189b2012-06-20 16:38:30 -0700316/*
317 * FUNCTION: WDA_preStart
318 * Trigger DAL-AL to start CFG download
319 */
320VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
321{
322 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
323 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700324 /*
325 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
326 */
327 wdaMsg.type = WNI_CFG_DNLD_REQ ;
328 wdaMsg.bodyptr = NULL;
329 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700330 /* post the message.. */
331 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
332 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
333 {
334 vosStatus = VOS_STATUS_E_BADMSG;
335 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700336 return( vosStatus );
337}
Jeff Johnson295189b2012-06-20 16:38:30 -0700338/*
339 * FUNCTION: WDA_wdiStartCallback
340 * Once WDI_Start is finished, WDI start callback will be called by WDI
341 * to indicate completion of WDI_Start.
342 */
343void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
344 void *pVosContext)
345{
346 tWDA_CbContext *wdaContext;
347 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700348 if (NULL == pVosContext)
349 {
350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700351 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700352 return;
353 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700354 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
355 if (NULL == wdaContext)
356 {
357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700358 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700359 return;
360 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700361 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
362 {
363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700364 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700365 }
366 else
367 {
368 wdaContext->wdaState = WDA_START_STATE;
369 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700370 /* extract and save version information from the Start Response */
371 wdaContext->wcnssWlanCompiledVersion.major =
372 wdiRspParams->wlanCompiledVersion.major;
373 wdaContext->wcnssWlanCompiledVersion.minor =
374 wdiRspParams->wlanCompiledVersion.minor;
375 wdaContext->wcnssWlanCompiledVersion.version =
376 wdiRspParams->wlanCompiledVersion.version;
377 wdaContext->wcnssWlanCompiledVersion.revision =
378 wdiRspParams->wlanCompiledVersion.revision;
379 wdaContext->wcnssWlanReportedVersion.major =
380 wdiRspParams->wlanReportedVersion.major;
381 wdaContext->wcnssWlanReportedVersion.minor =
382 wdiRspParams->wlanReportedVersion.minor;
383 wdaContext->wcnssWlanReportedVersion.version =
384 wdiRspParams->wlanReportedVersion.version;
385 wdaContext->wcnssWlanReportedVersion.revision =
386 wdiRspParams->wlanReportedVersion.revision;
387 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
388 wdiRspParams->wcnssSoftwareVersion,
389 sizeof(wdaContext->wcnssSoftwareVersionString));
390 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
391 wdiRspParams->wcnssHardwareVersion,
392 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700393 /* Notify WDA_start that WDI_Start has completed */
394 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700395 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700396 {
397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700398 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700399 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700400 return;
401}
402
Jeff Johnson295189b2012-06-20 16:38:30 -0700403/*
404 * FUNCTION: WDA_start
405 * Prepare TLV configuration and call WDI_Start.
406 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700407VOS_STATUS WDA_start(v_PVOID_t pVosContext)
408{
409 tWDA_CbContext *wdaContext;
410 VOS_STATUS status;
411 WDI_Status wdiStatus;
412 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700413 if (NULL == pVosContext)
414 {
415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700416 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700417 return VOS_STATUS_E_FAILURE;
418 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700419 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
420 if (NULL == wdaContext)
421 {
422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700423 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700424 return VOS_STATUS_E_FAILURE;
425 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700426 /* Non-FTM mode, WDA status for START must be INIT
427 * FTM mode, WDA Status for START can be INIT or STOP */
428 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
429 (WDA_STOP_STATE != wdaContext->wdaState) )
430 {
431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
432 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700433 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700434 return VOS_STATUS_E_FAILURE;
435 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700436 /* initialize the wdiStartParam. Note that we can create this on
437 the stack since we won't exit until WDI_Start() completes or
438 times out */
439 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700440 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700441 /* prepare the config TLV for the WDI */
442 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
443 if ( !VOS_IS_STATUS_SUCCESS(status) )
444 {
445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700446 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700447 return VOS_STATUS_E_FAILURE;
448 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700449 /* note from here onwards if an error occurs we must
450 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700451 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
452 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
453 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700454 /* initialize the WDA-WDI synchronization event */
455 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700456 /* call WDI start */
457 wdiStatus = WDI_Start(&wdiStartParam,
458 (WDI_StartRspCb)WDA_wdiStartCallback,
459 (v_VOID_t *)pVosContext);
460 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
461 {
462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700463 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700464 vos_mem_free(wdiStartParam.pConfigBuffer);
465 return VOS_STATUS_E_FAILURE;
466 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700467 /* wait for WDI start to invoke our callback */
468 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
469 WDA_WDI_START_TIMEOUT );
470 if ( !VOS_IS_STATUS_SUCCESS(status) )
471 {
472 if ( VOS_STATUS_E_TIMEOUT == status )
473 {
474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700475 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700476 }
477 else
478 {
479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
480 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700481 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700482 }
483 vos_mem_free(wdiStartParam.pConfigBuffer);
484 return VOS_STATUS_E_FAILURE;
485 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700486 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700487 /* we no longer need the config TLV */
488 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700489 /* if we are not in the START state then WDI_Start() failed */
490 if (WDA_START_STATE != wdaContext->wdaState)
491 {
492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700493 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700494 return VOS_STATUS_E_FAILURE;
495 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700496 /* FTM mode does not need to monitor BA activity */
497 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
498 {
499 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800500 if(VOS_STATUS_SUCCESS == status)
501 {
502 wdaContext->wdaTimersCreated = VOS_TRUE;
503 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700504 }
Leo Chang9d76f622013-08-23 16:34:52 -0700505 else
506 {
507 vos_event_init(&wdaContext->ftmStopDoneEvent);
508 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700509 return status;
510}
511
Jeff Johnson295189b2012-06-20 16:38:30 -0700512/*
513 * FUNCTION: WDA_prepareConfigTLV
514 * Function to prepare CFG for DAL(WDA)
515 */
516VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
517 WDI_StartReqParamsType *wdiStartParams )
518{
519 /* get pMac to acess CFG data base */
520 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
521 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
522 tHalCfg *tlvStruct = NULL ;
523 tANI_U8 *tlvStructStart = NULL ;
524 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
525 v_PVOID_t *configParam;
526 tANI_U32 configParamSize;
527 tANI_U32 *configDataValue;
528 WDI_WlanVersionType wcnssCompiledApiVersion;
Wilson Tsaof8b37942013-09-06 10:49:00 -0700529 tANI_U8 i;
530
Jeff Johnson295189b2012-06-20 16:38:30 -0700531 if ((NULL == pMac)||(NULL == wdaContext))
532 {
533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700534 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700535 VOS_ASSERT(0);
536 return VOS_STATUS_E_FAILURE;
537 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700538 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
539 WNI_CFG_STA_ID_LEN +
540 WNI_CFG_EDCA_WME_ACBK_LEN +
541 WNI_CFG_EDCA_WME_ACBE_LEN +
542 WNI_CFG_EDCA_WME_ACVI_LEN +
543 WNI_CFG_EDCA_WME_ACVO_LEN +
544 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700545 /* malloc memory for all configs in one shot */
546 configParam = vos_mem_malloc(configParamSize);
547
548 if(NULL == configParam )
549 {
550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700551 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700552 VOS_ASSERT(0) ;
553 return VOS_STATUS_E_NOMEM;
554 }
555 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700556 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700557 tlvStruct = (tHalCfg *)configParam;
558 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700559 /* TODO: Remove Later */
560 /* QWLAN_HAL_CFG_STA_ID */
561 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
562 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
563 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
564 eSIR_SUCCESS)
565 {
566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
567 "Failed to get value for WNI_CFG_STA_ID");
568 goto handle_failure;
569 }
570 tlvStruct->length = strLength ;
571 /* calculate the pad bytes to have the CFG in aligned format */
572 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
573 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700574 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
575 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700576 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
577 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
578 tlvStruct->length = sizeof(tANI_U32);
579 configDataValue = (tANI_U32 *)(tlvStruct + 1);
580 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
581 != eSIR_SUCCESS)
582 {
583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
584 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
585 goto handle_failure;
586 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700587 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
588 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700589 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
590 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
591 tlvStruct->length = sizeof(tANI_U32);
592 configDataValue = (tANI_U32 *)(tlvStruct + 1);
593 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
594 eSIR_SUCCESS)
595 {
596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
597 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
598 goto handle_failure;
599 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700600 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
601 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700602 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
603 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
604 tlvStruct->length = sizeof(tANI_U32);
605 configDataValue = (tANI_U32 *)(tlvStruct + 1);
606 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
607 != eSIR_SUCCESS)
608 {
609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
610 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
611 goto handle_failure;
612 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700613 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
614 + sizeof(tHalCfg) + tlvStruct->length)) ;
615
616 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
617 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
618 tlvStruct->length = sizeof(tANI_U32);
619 configDataValue = (tANI_U32 *)(tlvStruct + 1);
620 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
621 configDataValue ) != eSIR_SUCCESS)
622 {
623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
624 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
625 goto handle_failure;
626 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700627 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
628 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700629 /* QWLAN_HAL_CFG_CAL_PERIOD */
630 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
631 tlvStruct->length = sizeof(tANI_U32);
632 configDataValue = (tANI_U32 *)(tlvStruct + 1);
633 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
634 != eSIR_SUCCESS)
635 {
636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
637 "Failed to get value for WNI_CFG_CAL_PERIOD");
638 goto handle_failure;
639 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700640 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
641 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700642 /* QWLAN_HAL_CFG_CAL_CONTROL */
643 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
644 tlvStruct->length = sizeof(tANI_U32);
645 configDataValue = (tANI_U32 *)(tlvStruct + 1);
646 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
647 != eSIR_SUCCESS)
648 {
649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
650 "Failed to get value for WNI_CFG_CAL_CONTROL");
651 goto handle_failure;
652 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700653 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
654 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700655 /* QWLAN_HAL_CFG_PROXIMITY */
656 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
657 tlvStruct->length = sizeof(tANI_U32);
658 configDataValue = (tANI_U32 *)(tlvStruct + 1);
659 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
660 != eSIR_SUCCESS)
661 {
662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
663 "Failed to get value for WNI_CFG_PROXIMITY");
664 goto handle_failure;
665 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700666 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
667 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700668 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
669 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
670 tlvStruct->length = sizeof(tANI_U32);
671 configDataValue = (tANI_U32 *)(tlvStruct + 1);
672 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
673 != eSIR_SUCCESS)
674 {
675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
676 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
677 goto handle_failure;
678 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700679 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
680 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700681 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
682 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
683 tlvStruct->length = sizeof(tANI_U32);
684 configDataValue = (tANI_U32 *)(tlvStruct + 1);
685 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
686 eSIR_SUCCESS)
687 {
688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
689 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
690 goto handle_failure;
691 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700692 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
693 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700694 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
695 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
696 tlvStruct->length = sizeof(tANI_U32);
697 configDataValue = (tANI_U32 *)(tlvStruct + 1);
698 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
699 configDataValue ) != eSIR_SUCCESS)
700 {
701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
702 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
703 goto handle_failure;
704 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700705 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
706 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700707 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
708 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
709 tlvStruct->length = sizeof(tANI_U32);
710 configDataValue = (tANI_U32 *)(tlvStruct + 1);
711 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
712 eSIR_SUCCESS)
713 {
714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
715 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
716 goto handle_failure;
717 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700718 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
719 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700720 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
721 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
722 tlvStruct->length = sizeof(tANI_U32);
723 configDataValue = (tANI_U32 *)(tlvStruct + 1);
724 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
725 eSIR_SUCCESS)
726 {
727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
728 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
729 goto handle_failure;
730 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700731 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
732 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700733 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
734 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
735 tlvStruct->length = sizeof(tANI_U32);
736 configDataValue = (tANI_U32 *)(tlvStruct + 1);
737 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
738 eSIR_SUCCESS)
739 {
740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
741 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
742 goto handle_failure;
743 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700744 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
745 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700746 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
747 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
748 tlvStruct->length = sizeof(tANI_U32);
749 configDataValue = (tANI_U32 *)(tlvStruct + 1);
750 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
751 configDataValue ) != eSIR_SUCCESS)
752 {
753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
754 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
755 goto handle_failure;
756 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700757 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
758 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700759 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
760 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
761 tlvStruct->length = sizeof(tANI_U32);
762 configDataValue = (tANI_U32 *)(tlvStruct + 1);
763 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
764 configDataValue ) != eSIR_SUCCESS)
765 {
766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
767 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
768 goto handle_failure;
769 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700770 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
771 + sizeof(tHalCfg) + tlvStruct->length));
772
773 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
774 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
775 tlvStruct->length = sizeof(tANI_U32);
776 configDataValue = (tANI_U32 *)(tlvStruct + 1);
777 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
778 configDataValue ) != eSIR_SUCCESS)
779 {
780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
781 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
782 goto handle_failure;
783 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700784 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
785 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700786 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
787 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
788 tlvStruct->length = sizeof(tANI_U32);
789 configDataValue = (tANI_U32 *)(tlvStruct + 1);
790 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
791 configDataValue ) != eSIR_SUCCESS)
792 {
793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
794 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
795 goto handle_failure;
796 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700797 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
798 + sizeof(tHalCfg) + tlvStruct->length));
799
800 /* QWLAN_HAL_CFG_FIXED_RATE */
801 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
802 tlvStruct->length = sizeof(tANI_U32);
803 configDataValue = (tANI_U32 *)(tlvStruct + 1);
804 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
805 != eSIR_SUCCESS)
806 {
807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
808 "Failed to get value for WNI_CFG_FIXED_RATE");
809 goto handle_failure;
810 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700811 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
812 + sizeof(tHalCfg) + tlvStruct->length));
813
814 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
815 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
816 tlvStruct->length = sizeof(tANI_U32);
817 configDataValue = (tANI_U32 *)(tlvStruct + 1);
818 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
819 != eSIR_SUCCESS)
820 {
821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
822 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
823 goto handle_failure;
824 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700825 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
826 + sizeof(tHalCfg) + tlvStruct->length));
827
828 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
829 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
830 tlvStruct->length = sizeof(tANI_U32);
831 configDataValue = (tANI_U32 *)(tlvStruct + 1);
832 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
833 configDataValue ) != eSIR_SUCCESS)
834 {
835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
836 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
837 goto handle_failure;
838 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700839 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
840 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700841 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
842 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
843 tlvStruct->length = sizeof(tANI_U32);
844 configDataValue = (tANI_U32 *)(tlvStruct + 1);
845 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
846 configDataValue ) != eSIR_SUCCESS)
847 {
848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
849 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
850 goto handle_failure;
851 }
852 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
853 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700854 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
855 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
856 tlvStruct->length = sizeof(tANI_U32);
857 configDataValue = (tANI_U32 *)(tlvStruct + 1);
858 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
859 configDataValue ) != eSIR_SUCCESS)
860 {
861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
862 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
863 goto handle_failure;
864 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700865 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
866 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700867 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
868 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
869 tlvStruct->length = sizeof(tANI_U32);
870 configDataValue = (tANI_U32 *)(tlvStruct + 1);
871 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
872 configDataValue ) != eSIR_SUCCESS)
873 {
874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
875 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
876 goto handle_failure;
877 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700878 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
879 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700880 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
881 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
882 tlvStruct->length = sizeof(tANI_U32);
883 configDataValue = (tANI_U32 *)(tlvStruct + 1);
884 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
885 configDataValue ) != eSIR_SUCCESS)
886 {
887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
888 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
889 goto handle_failure;
890 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700891 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
892 + sizeof(tHalCfg) + tlvStruct->length);
893
894#if 0 /*FIXME_PRIMA : Enable this after the RA is enabled in HAL*/
895 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
896 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
897 tlvStruct->length = sizeof(tANI_U32);
898 configDataValue = (tANI_U32 *)(tlvStruct + 1);
899 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
900 configDataValue ) != eSIR_SUCCESS)
901 {
902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
903 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
904 goto handle_failure;
905 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700906 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
907 + sizeof(tHalCfg) + tlvStruct->length);
908#endif
909 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
910 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
911 tlvStruct->length = sizeof(tANI_U32);
912 configDataValue = (tANI_U32 *)(tlvStruct + 1);
913 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
914 configDataValue ) != eSIR_SUCCESS)
915 {
916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
917 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
918 goto handle_failure;
919 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700920 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
921 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700922 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
923 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
924 tlvStruct->length = sizeof(tANI_U32);
925 configDataValue = (tANI_U32 *)(tlvStruct + 1);
926 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
927 eSIR_SUCCESS)
928 {
929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
930 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
931 goto handle_failure;
932 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700933 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
934 + sizeof(tHalCfg) + tlvStruct->length);
935
936 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
937 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
938 tlvStruct->length = sizeof(tANI_U32);
939 configDataValue = (tANI_U32 *)(tlvStruct + 1);
940 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
941 configDataValue ) != eSIR_SUCCESS)
942 {
943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
944 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
945 goto handle_failure;
946 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700947 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
948 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700949 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
950 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
951 tlvStruct->length = sizeof(tANI_U32);
952 configDataValue = (tANI_U32 *)(tlvStruct + 1);
953 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
954 configDataValue ) != eSIR_SUCCESS)
955 {
956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
957 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
958 goto handle_failure;
959 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700960 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
961 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700962 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
963 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
964 tlvStruct->length = sizeof(tANI_U32);
965 configDataValue = (tANI_U32 *)(tlvStruct + 1);
966 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
967 configDataValue ) != eSIR_SUCCESS)
968 {
969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
970 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
971 goto handle_failure;
972 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700973 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
974 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700975 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
976 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
977 tlvStruct->length = sizeof(tANI_U32);
978 configDataValue = (tANI_U32 *)(tlvStruct + 1);
979 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
980 configDataValue ) != eSIR_SUCCESS)
981 {
982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
983 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
984 goto handle_failure;
985 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700986 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
987 + sizeof(tHalCfg) + tlvStruct->length);
988
989 /* QWLAN_HAL_CFG_STATS_PERIOD */
990 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
991 tlvStruct->length = sizeof(tANI_U32);
992 configDataValue = (tANI_U32 *)(tlvStruct + 1);
993 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
994 eSIR_SUCCESS)
995 {
996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
997 "Failed to get value for WNI_CFG_STATS_PERIOD");
998 goto handle_failure;
999 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001000 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1001 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001002 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
1003 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
1004 tlvStruct->length = sizeof(tANI_U32);
1005 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1006 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
1007 eSIR_SUCCESS)
1008 {
1009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1010 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
1011 goto handle_failure;
1012 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001013 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1014 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001015 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1016 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1017 tlvStruct->length = sizeof(tANI_U32);
1018 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1019 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1020 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001021 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1022 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001023 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1024 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1025 tlvStruct->length = sizeof(tANI_U32);
1026 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1027 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1028 != eSIR_SUCCESS)
1029 {
1030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1031 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1032 goto handle_failure;
1033 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001034 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1035 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001036 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1037 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1038 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1039 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1040 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1041 &strLength) != eSIR_SUCCESS)
1042 {
1043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1044 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1045 goto handle_failure;
1046 }
1047 tlvStruct->length = strLength;
1048 /* calculate the pad bytes to have the CFG in aligned format */
1049 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1050 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001051 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1052 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001053 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1054 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1055 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1056 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1057 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1058 &strLength) != eSIR_SUCCESS)
1059 {
1060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1061 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1062 goto handle_failure;
1063 }
1064 tlvStruct->length = strLength;
1065 /* calculate the pad bytes to have the CFG in aligned format */
1066 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1067 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001068 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1069 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001070 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1071 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1072 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1073 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1074 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1075 &strLength) != eSIR_SUCCESS)
1076 {
1077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1078 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1079 goto handle_failure;
1080 }
1081 tlvStruct->length = strLength;
1082 /* calculate the pad bytes to have the CFG in aligned format */
1083 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1084 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001085 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1086 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001087 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1088 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1089 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1090 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1091 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1092 &strLength) != eSIR_SUCCESS)
1093 {
1094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1095 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1096 goto handle_failure;
1097 }
1098 tlvStruct->length = strLength;
1099 /* calculate the pad bytes to have the CFG in aligned format */
1100 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1101 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001102 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1103 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001104 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1105 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1106 tlvStruct->length = sizeof(tANI_U32);
1107 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1108 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1109 != eSIR_SUCCESS)
1110 {
1111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1112 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1113 goto handle_failure;
1114 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001115 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1116 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001117 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1118 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1119 tlvStruct->length = sizeof(tANI_U32);
1120 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1121 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1122 != eSIR_SUCCESS)
1123 {
1124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1125 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1126 goto handle_failure;
1127 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001128 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1129 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001130 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1131 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1132 tlvStruct->length = sizeof(tANI_U32);
1133 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1134 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1135 != eSIR_SUCCESS)
1136 {
1137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1138 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1139 goto handle_failure;
1140 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001141 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1142 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001143 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1144 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1145 tlvStruct->length = sizeof(tANI_U32);
1146 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1147 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1148 != eSIR_SUCCESS)
1149 {
1150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1151 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1152 goto handle_failure;
1153 }
1154 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1155 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001156 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1157 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1158 tlvStruct->length = sizeof(tANI_U32);
1159 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1160 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1161 != eSIR_SUCCESS)
1162 {
1163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1164 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1165 goto handle_failure;
1166 }
1167 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1168 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001169 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1170 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1171 tlvStruct->length = sizeof(tANI_U32);
1172 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1173 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1174 != eSIR_SUCCESS)
1175 {
1176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1177 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1178 goto handle_failure;
1179 }
1180 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1181 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001182 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1183 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1184 tlvStruct->length = sizeof(tANI_U32);
1185 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1186 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1187 != eSIR_SUCCESS)
1188 {
1189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1190 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1191 goto handle_failure;
1192 }
1193 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1194 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001195 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1196 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1197 tlvStruct->length = sizeof(tANI_U32);
1198 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1199 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1200 != eSIR_SUCCESS)
1201 {
1202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1203 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1204 goto handle_failure;
1205 }
1206 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1207 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001208 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1209 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1210 tlvStruct->length = sizeof(tANI_U32);
1211 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1212 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1213 != eSIR_SUCCESS)
1214 {
1215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1216 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1217 goto handle_failure;
1218 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001219 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1220 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001221 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1222 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1223 tlvStruct->length = sizeof(tANI_U32);
1224 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1225 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1226 != eSIR_SUCCESS)
1227 {
1228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1229 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1230 goto handle_failure;
1231 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001232 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1233 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001234 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1235 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1236 tlvStruct->length = sizeof(tANI_U32);
1237 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1238 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1239 != eSIR_SUCCESS)
1240 {
1241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1242 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1243 goto handle_failure;
1244 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001245 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1246 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001247 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1248 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1249 * into FW, so the parameters are added here.
1250 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001251 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1252 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1253 tlvStruct->length = sizeof(tANI_U32);
1254 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1255 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1256 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1257 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001258 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1259 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1260 tlvStruct->length = sizeof(tANI_U32);
1261 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1262 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1263 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1264 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001265 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1266 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1267 tlvStruct->length = sizeof(tANI_U32);
1268 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1269 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1270 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1271 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001272 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1273 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1274 tlvStruct->length = sizeof(tANI_U32);
1275 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1276 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1277 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1278 + sizeof(tHalCfg) + tlvStruct->length) ;
1279
1280 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1281 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1282 tlvStruct->length = sizeof(tANI_U32);
1283 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1284 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1285 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1286 + sizeof(tHalCfg) + tlvStruct->length) ;
1287
1288 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1289 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1290 tlvStruct->length = sizeof(tANI_U32);
1291 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1292 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1293 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1294 + sizeof(tHalCfg) + tlvStruct->length) ;
1295
1296 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1297 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1298 tlvStruct->length = sizeof(tANI_U32);
1299 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1300 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1301 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1302 + sizeof(tHalCfg) + tlvStruct->length) ;
1303
1304 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1305 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1306 tlvStruct->length = sizeof(tANI_U32);
1307 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1308 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1309 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1310 + sizeof(tHalCfg) + tlvStruct->length) ;
1311
1312 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1313 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1314 tlvStruct->length = sizeof(tANI_U32);
1315 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1316 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1317 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1318 + sizeof(tHalCfg) + tlvStruct->length) ;
1319
1320 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1321 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1322 tlvStruct->length = sizeof(tANI_U32);
1323 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1324 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1325 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1326 + sizeof(tHalCfg) + tlvStruct->length) ;
1327
1328 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1329 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1330 tlvStruct->length = sizeof(tANI_U32);
1331 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1332 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1333 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1334 + sizeof(tHalCfg) + tlvStruct->length) ;
1335
1336 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1337 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1338 tlvStruct->length = sizeof(tANI_U32);
1339 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1340 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1341 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1342 + sizeof(tHalCfg) + tlvStruct->length) ;
1343
1344 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1345 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1346 tlvStruct->length = sizeof(tANI_U32);
1347 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1348 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1349 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1350 + sizeof(tHalCfg) + tlvStruct->length) ;
1351
1352 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1353 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1354 tlvStruct->length = sizeof(tANI_U32);
1355 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1356 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1357 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1358 + sizeof(tHalCfg) + tlvStruct->length) ;
1359
1360 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1361 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1362 tlvStruct->length = sizeof(tANI_U32);
1363 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1364 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1365 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1366 + sizeof(tHalCfg) + tlvStruct->length) ;
1367
1368 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1369 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1370 tlvStruct->length = sizeof(tANI_U32);
1371 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1372 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1373 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1374 + sizeof(tHalCfg) + tlvStruct->length) ;
1375
Wilson Tsaof8b37942013-09-06 10:49:00 -07001376 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM; i++)
1377 {
1378 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WAN_FREQ */
1379 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ + i*4;
1380 tlvStruct->length = sizeof(tANI_U32);
1381 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1382 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWANFreq[i];
1383 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1384 + sizeof(tHalCfg) + tlvStruct->length) ;
1385
1386 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WLAN_FREQ */
1387 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ + i*4;
1388 tlvStruct->length = sizeof(tANI_U32);
1389 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1390 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWLANFreq[i];
1391 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1392 + sizeof(tHalCfg) + tlvStruct->length) ;
1393
1394 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG */
1395 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG + i*4;
1396 tlvStruct->length = sizeof(tANI_U32);
1397 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1398 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig[i];
1399 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1400 + sizeof(tHalCfg) + tlvStruct->length) ;
1401
1402 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG2 */
1403 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 + i*4;
1404 tlvStruct->length = sizeof(tANI_U32);
1405 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1406 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig2[i];
1407 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1408 + sizeof(tHalCfg) + tlvStruct->length) ;
1409 }
1410
1411 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF */
1412 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF ;
1413 tlvStruct->length = sizeof(tANI_U32);
1414 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1415 *configDataValue = pMac->btc.btcConfig.mwsCoexModemBackoff;
1416 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1417 + sizeof(tHalCfg) + tlvStruct->length) ;
1418
1419 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG; i++)
1420 {
1421 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_CONFIGX */
1422 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_CONFIG1 + i;
1423 tlvStruct->length = sizeof(tANI_U32);
1424 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1425 *configDataValue = pMac->btc.btcConfig.mwsCoexConfig[i];
1426 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1427 + sizeof(tHalCfg) + tlvStruct->length) ;
1428 }
1429
1430 /* [COEX] QWLAN_HAL_CFG_SAR_POWER_BACKOFF */
1431 tlvStruct->type = QWLAN_HAL_CFG_SAR_POWER_BACKOFF ;
1432 tlvStruct->length = sizeof(tANI_U32);
1433 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1434 *configDataValue = pMac->btc.btcConfig.SARPowerBackoff;
1435 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1436 + sizeof(tHalCfg) + tlvStruct->length) ;
1437
Jeff Johnson32d95a32012-09-10 13:15:23 -07001438 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001439 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1440 tlvStruct->length = sizeof(tANI_U32);
1441 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1442 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1443 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1444 wcnssCompiledApiVersion.minor,
1445 wcnssCompiledApiVersion.version,
1446 wcnssCompiledApiVersion.revision);
1447 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1448 + sizeof(tHalCfg) + tlvStruct->length) ;
1449
Jeff Johnsond13512a2012-07-17 11:42:19 -07001450 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1451 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1452 tlvStruct->length = sizeof(tANI_U32);
1453 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1454 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1455 configDataValue ) != eSIR_SUCCESS)
1456 {
1457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1458 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1459 goto handle_failure;
1460 }
1461
1462 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1463 + sizeof(tHalCfg) + tlvStruct->length) ;
1464 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1465 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1466 tlvStruct->length = sizeof(tANI_U32);
1467 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1468 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1469 configDataValue ) != eSIR_SUCCESS)
1470 {
1471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1472 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1473 goto handle_failure;
1474 }
1475
1476 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1477 + sizeof(tHalCfg) + tlvStruct->length) ;
1478
1479 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1480 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1481 tlvStruct->length = sizeof(tANI_U32);
1482 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1483 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1484 != eSIR_SUCCESS)
1485 {
1486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1487 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1488 goto handle_failure;
1489 }
1490
1491 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1492 + sizeof(tHalCfg) + tlvStruct->length) ;
1493
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001494 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1495 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1496 tlvStruct->length = sizeof(tANI_U32);
1497 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1498 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1499 != eSIR_SUCCESS)
1500 {
1501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1502 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1503 goto handle_failure;
1504 }
1505
1506 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1507 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001508#ifdef WLAN_SOFTAP_VSTA_FEATURE
1509 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1510 tlvStruct->length = sizeof(tANI_U32);
1511 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1512 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1513 != eSIR_SUCCESS)
1514 {
1515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1516 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1517 goto handle_failure;
1518 }
1519
1520 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1521 + sizeof(tHalCfg) + tlvStruct->length) ;
1522#endif
1523
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001524 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1525 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1526 tlvStruct->length = sizeof(tANI_U32);
1527 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1528
1529 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1530 != eSIR_SUCCESS)
1531 {
1532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1533 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1534 goto handle_failure;
1535 }
1536
1537 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1538 + sizeof(tHalCfg) + tlvStruct->length) ;
1539
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301540/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1541 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1542 tlvStruct->length = sizeof(tANI_U32);
1543 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1544 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1545 configDataValue ) != eSIR_SUCCESS)
1546 {
1547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1548 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1549 goto handle_failure;
1550 }
1551
1552 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1553 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301554#ifdef FEATURE_WLAN_TDLS
1555 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1556 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1557 tlvStruct->length = sizeof(tANI_U32);
1558 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1559 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1560 configDataValue ) != eSIR_SUCCESS)
1561 {
1562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1563 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1564 goto handle_failure;
1565 }
1566 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1567 + sizeof(tHalCfg) + tlvStruct->length) ;
1568
1569 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1570 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1571 tlvStruct->length = sizeof(tANI_U32);
1572 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1573 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1574 configDataValue ) != eSIR_SUCCESS)
1575 {
1576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1577 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1578 goto handle_failure;
1579 }
1580 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1581 + sizeof(tHalCfg) + tlvStruct->length) ;
1582 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1583 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1584 tlvStruct->length = sizeof(tANI_U32);
1585 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1586 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1587 configDataValue ) != eSIR_SUCCESS)
1588 {
1589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1590 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1591 goto handle_failure;
1592 }
1593 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1594 + sizeof(tHalCfg) + tlvStruct->length) ;
1595 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1596 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1597 tlvStruct->length = sizeof(tANI_U32);
1598 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1599 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1600 configDataValue ) != eSIR_SUCCESS)
1601 {
1602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1603 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1604 goto handle_failure;
1605 }
1606 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1607 + sizeof(tHalCfg) + tlvStruct->length) ;
Naresh Jayaramf73f3762014-02-04 16:13:20 +05301608 /* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */
1609 tlvStruct->type = QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE;
1610 tlvStruct->length = sizeof(tANI_U32);
1611 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1612 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_OFF_CHANNEL_ENABLED,
1613 configDataValue ) != eSIR_SUCCESS)
1614 {
1615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1616 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1617 goto handle_failure;
1618 }
1619 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1620 + sizeof(tHalCfg) + tlvStruct->length) ;
1621
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301622#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301623
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001624 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1625 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1626 tlvStruct->length = sizeof(tANI_U32);
1627 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1628 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1629 configDataValue ) != eSIR_SUCCESS)
1630 {
1631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1632 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1633 goto handle_failure;
1634 }
1635
1636 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1637 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001638
1639 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1640 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1641 tlvStruct->length = sizeof(tANI_U32);
1642 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1643 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1644 != eSIR_SUCCESS)
1645 {
1646 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1647 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1648 goto handle_failure;
1649 }
1650 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1651 + sizeof(tHalCfg) + tlvStruct->length));
1652
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301653 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1654 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1655 tlvStruct->length = sizeof(tANI_U32);
1656 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1657 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1658 configDataValue ) != eSIR_SUCCESS)
1659 {
1660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1661 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1662 goto handle_failure;
1663 }
1664
1665 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1666 + sizeof(tHalCfg) + tlvStruct->length) ;
1667
Madan Mohan Koyyalamudi2558bc92013-08-24 16:54:31 +05301668 /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
1669 tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
1670 tlvStruct->length = sizeof(tANI_U32);
1671 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1672 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
1673 configDataValue ) != eSIR_SUCCESS)
1674 {
1675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1676 "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
1677 goto handle_failure;
1678 }
1679 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1680 + sizeof(tHalCfg) + tlvStruct->length) ;
1681
Kiet Lam4bbd3cb2013-11-07 20:03:49 +05301682 /* QWLAN_HAL_CFG_ATH_DISABLE */
1683 tlvStruct->type = QWLAN_HAL_CFG_ATH_DISABLE ;
1684 tlvStruct->length = sizeof(tANI_U32);
1685 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1686 if(wlan_cfgGetInt(pMac, WNI_CFG_ATH_DISABLE,
1687 configDataValue ) != eSIR_SUCCESS)
1688 {
1689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1690 "Failed to get value for WNI_CFG_ATH_DISABLE");
1691 goto handle_failure;
1692 }
1693 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1694 + sizeof(tHalCfg) + tlvStruct->length) ;
1695
c_hpothu6d7dc922013-12-02 12:36:41 +05301696 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_WLAN_LEN */
1697 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1698 tlvStruct->length = sizeof(tANI_U32);
1699 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1700 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_WLAN_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_WLAN_LEN");
1705 goto handle_failure;
1706 }
1707 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1708 + sizeof(tHalCfg) + tlvStruct->length) ;
1709
1710 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1711 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1712 tlvStruct->length = sizeof(tANI_U32);
1713 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1714 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_BT_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_ACTIVE_BT_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_WLAN_ACTIVE_WLAN_LEN */
1725 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1726 tlvStruct->length = sizeof(tANI_U32);
1727 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1728 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_WLAN_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_WLAN_LEN");
1733 goto handle_failure;
1734 }
1735 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1736 + sizeof(tHalCfg) + tlvStruct->length) ;
1737
1738 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1739 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1740 tlvStruct->length = sizeof(tANI_U32);
1741 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1742 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_BT_LEN,
1743 configDataValue ) != eSIR_SUCCESS)
1744 {
1745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1746 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_BT_LEN");
1747 goto handle_failure;
1748 }
1749 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1750 + sizeof(tHalCfg) + tlvStruct->length) ;
1751
AnjaneeDevi Kapparapu50239e32014-01-07 18:09:33 +05301752 /* QWLAN_HAL_CFG_ASD_PROBE_INTERVAL */
1753 tlvStruct->type = QWLAN_HAL_CFG_ASD_PROBE_INTERVAL ;
1754 tlvStruct->length = sizeof(tANI_U32);
1755 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1756 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_PROBE_INTERVAL,
1757 configDataValue ) != eSIR_SUCCESS)
1758 {
1759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1760 "Failed to get value for WNI_CFG_ASD_PROBE_INTERVAL");
1761 goto handle_failure;
1762 }
1763 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1764 + sizeof(tHalCfg) + tlvStruct->length) ;
1765
1766 /* QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD */
1767 tlvStruct->type = QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD ;
1768 tlvStruct->length = sizeof(tANI_U32);
1769 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1770 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_TRIGGER_THRESHOLD,
1771 configDataValue ) != eSIR_SUCCESS)
1772 {
1773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1774 "Failed to get value for WNI_CFG_ASD_TRIGGER_THRESHOLD");
1775 goto handle_failure;
1776 }
1777 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1778 + sizeof(tHalCfg) + tlvStruct->length) ;
1779
1780 /* QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD */
1781 tlvStruct->type = QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD ;
1782 tlvStruct->length = sizeof(tANI_U32);
1783 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1784 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD,
1785 configDataValue ) != eSIR_SUCCESS)
1786 {
1787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1788 "Failed to get value for WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD");
1789 goto handle_failure;
1790 }
1791 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1792 + sizeof(tHalCfg) + tlvStruct->length) ;
1793
Leela Venkata Kiran Kumar Reddy Chirala22c159b2013-12-23 18:19:13 -08001794 /* QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO */
1795 tlvStruct->type = QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO ;
1796 tlvStruct->length = sizeof(tANI_U32);
1797 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1798 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CTS2S_DURING_SCO,
1799 configDataValue ) != eSIR_SUCCESS)
1800 {
1801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1802 "Failed to get value for WNI_CFG_BTC_CTS2S_DURING_SCO");
1803 goto handle_failure;
1804 }
1805 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1806 + sizeof(tHalCfg) + tlvStruct->length) ;
1807
Jeff Johnson295189b2012-06-20 16:38:30 -07001808 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001809#ifdef WLAN_DEBUG
1810 {
1811 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07001812 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1813 "****** Dumping CFG TLV ***** ");
1814 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
1815 {
1816 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1817 "%02x %02x %02x %02x %02x %02x %02x %02x",
1818 tlvStructStart[i],
1819 tlvStructStart[i+1],
1820 tlvStructStart[i+2],
1821 tlvStructStart[i+3],
1822 tlvStructStart[i+4],
1823 tlvStructStart[i+5],
1824 tlvStructStart[i+6],
1825 tlvStructStart[i+7]);
1826 }
1827 /* Dump the bytes in the last line*/
1828 for (; i < wdiStartParams->usConfigBufferLen; i++)
1829 {
1830 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1831 "%02x ",tlvStructStart[i]);
1832 }
1833 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1834 "**************************** ");
1835 }
1836#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001837 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001838handle_failure:
1839 vos_mem_free(configParam);
1840 return VOS_STATUS_E_FAILURE;
1841}
Jeff Johnson295189b2012-06-20 16:38:30 -07001842/*
1843 * FUNCTION: WDA_wdiCompleteCB
1844 * call the voss call back function
1845 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001846void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07001847{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001848 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
1849 tWDA_CbContext *wdaContext;
1850
1851 if(NULL == pWdaParams)
1852 {
1853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001854 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001855 VOS_ASSERT(0) ;
1856 return ;
1857 }
1858
1859 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
1860
Jeff Johnson295189b2012-06-20 16:38:30 -07001861 if (NULL == wdaContext)
1862 {
1863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001864 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001865 return ;
1866 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001867
Jeff Johnson295189b2012-06-20 16:38:30 -07001868 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001869 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07001870 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001871 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07001872 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001873 vos_mem_free(pWdaParams);
1874
Jeff Johnson295189b2012-06-20 16:38:30 -07001875 if(WDI_STATUS_SUCCESS != status)
1876 {
1877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1878 "WDI stop callback returned failure" );
1879 VOS_ASSERT(0) ;
1880 }
1881 else
1882 {
1883 wdaContext->wdaState = WDA_STOP_STATE;
1884 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001885
Leo Chang9d76f622013-08-23 16:34:52 -07001886 /* FTM Driver stop procedure should be synced.
1887 * Stop and Close will happen on same context */
1888 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
1889 {
1890 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
1891 {
1892 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
1893 "%s: FTM Stop Event Set Fail", __func__);
1894 VOS_ASSERT(0);
1895 }
1896 }
1897
Jeff Johnson295189b2012-06-20 16:38:30 -07001898 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001899 vos_WDAComplete_cback(wdaContext->pVosContext);
1900
Jeff Johnson295189b2012-06-20 16:38:30 -07001901 return ;
1902}
Jeff Johnson295189b2012-06-20 16:38:30 -07001903/*
1904 * FUNCTION: WDA_stop
1905 * call WDI_stop
1906 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001907VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
1908{
1909 WDI_Status wdiStatus;
1910 VOS_STATUS status = VOS_STATUS_SUCCESS;
1911 WDI_StopReqParamsType *wdiStopReq;
1912 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001913 tWDA_ReqParams *pWdaParams ;
1914
Jeff Johnson295189b2012-06-20 16:38:30 -07001915 if (NULL == pWDA)
1916 {
1917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001918 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001919 VOS_ASSERT(0);
1920 return VOS_STATUS_E_FAILURE;
1921 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001922 if (pWDA->wdiFailed == true)
1923 {
1924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001925 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001926 return VOS_STATUS_E_ALREADY;
1927 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001928
Jeff Johnson295189b2012-06-20 16:38:30 -07001929 /* FTM mode stay START_STATE */
1930 if( (WDA_READY_STATE != pWDA->wdaState) &&
1931 (WDA_INIT_STATE != pWDA->wdaState) &&
1932 (WDA_START_STATE != pWDA->wdaState) )
1933 {
1934 VOS_ASSERT(0);
1935 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001936 wdiStopReq = (WDI_StopReqParamsType *)
1937 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
1938 if(NULL == wdiStopReq)
1939 {
1940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001941 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001942 VOS_ASSERT(0);
1943 return VOS_STATUS_E_NOMEM;
1944 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001945
Jeff Johnson295189b2012-06-20 16:38:30 -07001946 wdiStopReq->wdiStopReason = reason;
1947 wdiStopReq->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001948
1949 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
1950 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07001951 {
1952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001953 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001954 VOS_ASSERT(0);
1955 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001956 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07001957 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001958
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001959 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
1960 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07001961 {
1962 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001963 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001964 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001965
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001966 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
1967 pWdaParams->wdaMsgParam = NULL;
1968 pWdaParams->pWdaContext = pWDA;
1969
Jeff Johnson295189b2012-06-20 16:38:30 -07001970 /* call WDI stop */
1971 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001972 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
1973
Jeff Johnson295189b2012-06-20 16:38:30 -07001974 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
1975 {
1976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1977 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001978 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
1979 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07001980 status = VOS_STATUS_E_FAILURE;
1981 }
Leo Chang9d76f622013-08-23 16:34:52 -07001982
1983 /* FTM Driver stop procedure should be synced.
1984 * Stop and Close will happen on same context */
1985 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
1986 {
1987 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
1988 WDI_RESPONSE_TIMEOUT);
1989 if (status != VOS_STATUS_SUCCESS)
1990 {
1991 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
1992 "%s: FTM Stop Timepoout", __func__);
1993 VOS_ASSERT(0);
1994 vos_event_reset(&pWDA->ftmStopDoneEvent);
1995 }
1996 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001997 return status;
1998}
Jeff Johnson295189b2012-06-20 16:38:30 -07001999/*
2000 * FUNCTION: WDA_close
2001 * call WDI_close and free the WDA context
2002 */
2003VOS_STATUS WDA_close(v_PVOID_t pVosContext)
2004{
Jeff Johnson43971f52012-07-17 12:26:56 -07002005 VOS_STATUS status = VOS_STATUS_SUCCESS;
2006 WDI_Status wstatus;
2007 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002008 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002009 if (NULL == wdaContext)
2010 {
2011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002012 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002013 return VOS_STATUS_E_FAILURE;
2014 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002015 if((WDA_INIT_STATE != wdaContext->wdaState) &&
2016 (WDA_STOP_STATE != wdaContext->wdaState))
2017 {
2018 VOS_ASSERT(0);
2019 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002020 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07002021 wstatus = WDI_Close();
2022 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07002023 {
2024 status = VOS_STATUS_E_FAILURE;
2025 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002026 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002027 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07002028 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
2029 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002030 {
2031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002032 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002033 status = VOS_STATUS_E_FAILURE;
2034 }
2035
Jeff Johnson43971f52012-07-17 12:26:56 -07002036 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002037 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002038 {
2039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002040 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002041 status = VOS_STATUS_E_FAILURE;
2042 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002043 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002044 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002045 {
2046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002047 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002048 status = VOS_STATUS_E_FAILURE;
2049 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002050 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07002051 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002052 {
2053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002054 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002055 status = VOS_STATUS_E_FAILURE;
2056 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002057 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07002058 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07002059 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07002060 {
2061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2062 "error in WDA close " );
2063 status = VOS_STATUS_E_FAILURE;
2064 }
2065 return status;
2066}
Jeff Johnson295189b2012-06-20 16:38:30 -07002067/*
2068 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
2069 * returns 1 if the compiled version is greater than or equal to the input version
2070 */
2071
2072uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2073{
2074 VOS_STATUS status = VOS_STATUS_SUCCESS;
2075 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2076 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002077 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002078 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
2079 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
2080 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
2081 (compiledVersion.revision >= revision)))
2082 return 1;
2083 else
2084 return 0;
2085}
Jeff Johnson295189b2012-06-20 16:38:30 -07002086/*
2087 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
2088 * returns 1 if the compiled version is greater than or equal to the input version
2089 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002090uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2091{
2092 VOS_STATUS status = VOS_STATUS_SUCCESS;
2093 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2094 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002095 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002096 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
2097 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
2098 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
2099 (reportedVersion.revision >= revision)))
2100 return 1;
2101 else
2102 return 0;
2103}
Jeff Johnson295189b2012-06-20 16:38:30 -07002104/*
2105 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
2106 * Returns the version of the WCNSS WLAN API with which the HOST
2107 * device driver was compiled
2108 */
2109VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
2110 tSirVersionType *pVersion)
2111{
2112 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002113 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002114 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002115 if ((NULL == pvosGCtx) || (NULL == pVersion))
2116 {
2117 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002118 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002119 VOS_ASSERT(0);
2120 return VOS_STATUS_E_FAILURE;
2121 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002122 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2123 if (NULL == pWDA )
2124 {
2125 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002126 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002127 VOS_ASSERT(0);
2128 return VOS_STATUS_E_FAILURE;
2129 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002130 *pVersion = pWDA->wcnssWlanCompiledVersion;
2131 return VOS_STATUS_SUCCESS;
2132}
Jeff Johnson295189b2012-06-20 16:38:30 -07002133/*
2134 * FUNCTION: WDA_GetWcnssWlanReportedVersion
2135 * Returns the version of the WCNSS WLAN API with which the WCNSS
2136 * device driver was compiled
2137 */
2138VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
2139 tSirVersionType *pVersion)
2140{
2141 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002142 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002143 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002144 if ((NULL == pvosGCtx) || (NULL == pVersion))
2145 {
2146 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002147 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002148 VOS_ASSERT(0);
2149 return VOS_STATUS_E_FAILURE;
2150 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002151 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2152 if (NULL == pWDA )
2153 {
2154 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002155 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002156 VOS_ASSERT(0);
2157 return VOS_STATUS_E_FAILURE;
2158 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002159 *pVersion = pWDA->wcnssWlanReportedVersion;
2160 return VOS_STATUS_SUCCESS;
2161}
Jeff Johnson295189b2012-06-20 16:38:30 -07002162/*
2163 * FUNCTION: WDA_GetWcnssSoftwareVersion
2164 * Returns the WCNSS Software version string
2165 */
2166VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
2167 tANI_U8 *pVersion,
2168 tANI_U32 versionBufferSize)
2169{
2170 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002171 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002172 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002173 if ((NULL == pvosGCtx) || (NULL == pVersion))
2174 {
2175 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002176 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002177 VOS_ASSERT(0);
2178 return VOS_STATUS_E_FAILURE;
2179 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002180 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2181 if (NULL == pWDA )
2182 {
2183 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002184 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002185 VOS_ASSERT(0);
2186 return VOS_STATUS_E_FAILURE;
2187 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002188 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
2189 return VOS_STATUS_SUCCESS;
2190}
Jeff Johnson295189b2012-06-20 16:38:30 -07002191/*
2192 * FUNCTION: WDA_GetWcnssHardwareVersion
2193 * Returns the WCNSS Hardware version string
2194 */
2195VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
2196 tANI_U8 *pVersion,
2197 tANI_U32 versionBufferSize)
2198{
2199 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002200 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002201 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002202 if ((NULL == pvosGCtx) || (NULL == pVersion))
2203 {
2204 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002205 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002206 VOS_ASSERT(0);
2207 return VOS_STATUS_E_FAILURE;
2208 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002209 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2210 if (NULL == pWDA )
2211 {
2212 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002213 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002214 VOS_ASSERT(0);
2215 return VOS_STATUS_E_FAILURE;
2216 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002217 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
2218 return VOS_STATUS_SUCCESS;
2219}
Jeff Johnson295189b2012-06-20 16:38:30 -07002220/*
2221 * FUNCTION: WDA_WniCfgDnld
2222 * Trigger CFG Download
2223 */
2224VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
2225{
2226 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002227 VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002228 v_VOID_t *pFileImage = NULL;
2229 v_SIZE_t cbFileImageSize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002230 v_VOID_t *pCfgBinary = NULL;
2231 v_SIZE_t cbCfgBinarySize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002232 v_BOOL_t bStatus = VOS_FALSE;
Jeff Johnsonab81a082013-04-03 16:00:31 -07002233
Jeff Johnson295189b2012-06-20 16:38:30 -07002234 if (NULL == pMac )
2235 {
2236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002237 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002238 VOS_ASSERT(0);
2239 return VOS_STATUS_E_FAILURE;
2240 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002241 /* get the number of bytes in the CFG Binary... */
2242 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, NULL,
2243 &cbFileImageSize );
2244 if ( VOS_STATUS_E_NOMEM != vosStatus )
2245 {
2246 VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR,
2247 "Error obtaining binary size" );
2248 goto fail;
2249 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002250 // malloc a buffer to read in the Configuration binary file.
2251 pFileImage = vos_mem_malloc( cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07002252 if ( NULL == pFileImage )
2253 {
2254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2255 "Unable to allocate memory for the CFG binary [size= %d bytes]",
2256 cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07002257 vosStatus = VOS_STATUS_E_NOMEM;
2258 goto fail;
2259 }
2260
2261 /* Get the entire CFG file image... */
2262 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, pFileImage,
2263 &cbFileImageSize );
2264 if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) )
2265 {
2266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2267 "Error: Cannot retrieve CFG file image from vOSS. [size= %d bytes]",
2268 cbFileImageSize );
2269 goto fail;
2270 }
2271
2272 /*
2273 * Validate the binary image. This function will return a pointer
2274 * and length where the CFG binary is located within the binary image file.
2275 */
2276 bStatus = sys_validateStaConfig( pFileImage, cbFileImageSize,
2277 &pCfgBinary, &cbCfgBinarySize );
2278 if ( VOS_FALSE == bStatus )
2279 {
2280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2281 "Error: Cannot find STA CFG in binary image file" );
2282 vosStatus = VOS_STATUS_E_FAILURE;
2283 goto fail;
2284 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002285 /*
2286 * TODO: call the config download function
2287 * for now calling the existing cfg download API
2288 */
2289 processCfgDownloadReq(pMac,cbCfgBinarySize,pCfgBinary);
Jeff Johnsonab81a082013-04-03 16:00:31 -07002290 vosStatus = VOS_STATUS_SUCCESS;
2291
2292 /* fall through to clean up and return success */
Jeff Johnson295189b2012-06-20 16:38:30 -07002293
2294fail:
Jeff Johnsonab81a082013-04-03 16:00:31 -07002295 vos_mem_free( pFileImage );
Jeff Johnson295189b2012-06-20 16:38:30 -07002296 return vosStatus;
2297}
Jeff Johnson295189b2012-06-20 16:38:30 -07002298/* -----------------------------------------------------------------
2299 * WDI interface
2300 * -----------------------------------------------------------------
2301 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002302/*
2303 * FUNCTION: WDA_suspendDataTxCallback
2304 * call back function called from TL after suspend Transmission
2305 */
2306VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2307 v_U8_t* ucSTAId,
2308 VOS_STATUS vosStatus)
2309{
2310 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002312 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002313 if (NULL == pWDA )
2314 {
2315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002316 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002317 VOS_ASSERT(0);
2318 return VOS_STATUS_E_FAILURE;
2319 }
2320 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2321 {
2322 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2323 }
2324 else
2325 {
2326 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2327 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002328 /* Trigger the event to bring the WDA TL suspend function to come
2329 * out of wait*/
2330 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2331 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2332 {
2333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002334 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002335 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002336 /* If TL suspended had timedout before this callback was called, resume back
2337 * TL.*/
2338 if (pWDA->txSuspendTimedOut)
2339 {
2340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002341 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07002342 WDA_ResumeDataTx(pWDA);
2343 pWDA->txSuspendTimedOut = FALSE;
2344 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002345 return VOS_STATUS_SUCCESS;
2346}
Jeff Johnson295189b2012-06-20 16:38:30 -07002347/*
2348 * FUNCTION: WDA_suspendDataTx
2349 * Update TL to suspend the data Transmission
2350 */
2351VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2352{
2353 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2354 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002355
2356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002357 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002358 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002359 if (pWDA->txSuspendTimedOut)
2360 {
2361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002362 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07002363 return status;
2364 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002365 /* Reset the event to be not signalled */
2366 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2367 if(!VOS_IS_STATUS_SUCCESS(status))
2368 {
2369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002370 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002371 return VOS_STATUS_E_FAILURE;
2372 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002373 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002374 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002375 WDA_SuspendDataTxCallback);
2376 if(status != VOS_STATUS_SUCCESS)
2377 {
2378 return status;
2379 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002380 /* Wait for the event to be set by the TL, to get the response of
2381 * suspending the TX queues, this event should be set by the Callback
2382 * function called by TL*/
2383 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2384 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2385 if(!VOS_IS_STATUS_SUCCESS(status))
2386 {
2387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2388 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002389 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002390 /* Set this flag to true when TL suspend times out, so that when TL
2391 * suspend eventually happens and calls the callback, TL can be resumed
2392 * right away by looking at this flag when true.*/
2393 pWDA->txSuspendTimedOut = TRUE;
2394 }
2395 else
2396 {
2397 pWDA->txSuspendTimedOut = FALSE;
2398 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002399 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2400 {
2401 status = VOS_STATUS_SUCCESS;
2402 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002403 return status;
2404}
Jeff Johnson295189b2012-06-20 16:38:30 -07002405/*
2406 * FUNCTION: WDA_resumeDataTx
2407 * Update TL to resume the data Transmission
2408 */
2409VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2410{
2411 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002412
2413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002414 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002415
2416 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002417 return status;
2418}
Jeff Johnson295189b2012-06-20 16:38:30 -07002419/*
2420 * FUNCTION: WDA_InitScanReqCallback
2421 * Trigger Init SCAN callback
2422 */
2423void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2424{
2425 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2426 tWDA_CbContext *pWDA;
2427 tInitScanParams *pWDA_ScanParam ;
2428 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002430 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002431 if(NULL == pWdaParams)
2432 {
2433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002434 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002435 VOS_ASSERT(0) ;
2436 return ;
2437 }
2438 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2439 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002440 if(NULL == pWDA_ScanParam)
2441 {
2442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002443 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002444 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002445 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2446 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002447 return ;
2448 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002449 if(WDI_STATUS_SUCCESS != wdiStatus)
2450 {
2451 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002452 if(VOS_STATUS_SUCCESS != status)
2453 {
2454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002455 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002456 }
2457 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002458 /* free WDI command buffer */
2459 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002460 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002461
Jeff Johnson295189b2012-06-20 16:38:30 -07002462
2463 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002464 /* without converting the Status to Failure or Success Just
2465 pass the same status to lim */
2466 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002467 /* send SCAN RSP message back to PE */
2468 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002469 return ;
2470}
2471
2472/*
2473 * FUNCTION: WDA_ProcessInitScanReq
2474 * Trigger Init SCAN in DAL
2475 */
2476VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2477 tInitScanParams *initScanParams)
2478{
2479 WDI_Status status = WDI_STATUS_SUCCESS ;
2480 WDI_InitScanReqParamsType *wdiInitScanParam =
2481 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2482 sizeof(WDI_InitScanReqParamsType)) ;
2483 tWDA_ReqParams *pWdaParams;
2484 tANI_U8 i = 0;
2485
2486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002487 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002488 if(NULL == wdiInitScanParam)
2489 {
2490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002491 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002492 VOS_ASSERT(0);
2493 return VOS_STATUS_E_NOMEM;
2494 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002495 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2496 if(NULL == pWdaParams)
2497 {
2498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002499 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002500 VOS_ASSERT(0);
2501 vos_mem_free(wdiInitScanParam);
2502 return VOS_STATUS_E_NOMEM;
2503 }
2504
2505 /* Copy init Scan params to WDI structure */
2506 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2507 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2508 sizeof(tSirMacAddr)) ;
2509 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2510 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2511 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002512 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2513 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07002514 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2515 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002516 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2517 {
2518 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2519 initScanParams->scanEntry.bssIdx[i] ;
2520 }
2521
2522 /* if Frame length, copy macMgmtHdr or WDI structure */
2523 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2524 {
2525 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2526 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2527 }
2528 wdiInitScanParam->wdiReqStatusCB = NULL ;
2529
Jeff Johnson295189b2012-06-20 16:38:30 -07002530 /* Store Init Req pointer, as this will be used for response */
2531 pWdaParams->pWdaContext = pWDA;
2532 pWdaParams->wdaMsgParam = initScanParams;
2533 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002534 /* first try to suspend TX */
2535 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002536 if(WDI_STATUS_SUCCESS != status)
2537 {
2538 goto handleWdiFailure;
2539 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002540 /* call DAL API to pass init scan request to DAL */
2541 status = WDI_InitScanReq(wdiInitScanParam,
2542 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002543 if(IS_WDI_STATUS_FAILURE(status))
2544 {
2545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2546 "error in WDA Init Scan, Resume Tx " );
2547 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002548 VOS_ASSERT(0) ;
2549
2550 goto handleWdiFailure;
2551 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002552 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002553handleWdiFailure:
2554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2555 "Failure in WDI Api, free all the memory " );
2556 /* free WDI command buffer */
2557 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2558 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002559 /* send Failure to PE */
2560 initScanParams->status = eSIR_FAILURE ;
2561 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002562 return CONVERT_WDI2VOS_STATUS(status) ;
2563}
2564
Jeff Johnson295189b2012-06-20 16:38:30 -07002565/*
2566 * FUNCTION: WDA_StartScanReqCallback
2567 * send Start SCAN RSP back to PE
2568 */
2569void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2570 void* pUserData)
2571{
2572 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2573 tWDA_CbContext *pWDA;
2574 tStartScanParams *pWDA_ScanParam;
2575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002576 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002577 if(NULL == pWdaParams)
2578 {
2579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002580 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002581 VOS_ASSERT(0) ;
2582 return ;
2583 }
2584 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2585 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002586 if(NULL == pWDA_ScanParam)
2587 {
2588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002589 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002590 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002591 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002592 return ;
2593 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002594 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2595 {
2596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002597 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002598 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002599 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002600 return ;
2601 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002602 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2603 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002604
Jeff Johnson295189b2012-06-20 16:38:30 -07002605
2606 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002607 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002608 /* send SCAN RSP message back to PE */
2609 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002610 return ;
2611}
2612
Jeff Johnson295189b2012-06-20 16:38:30 -07002613/*
2614 * FUNCTION: WDA_ProcessStartScanReq
2615 * Trigger start SCAN in WDI
2616 */
2617VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2618 tStartScanParams *startScanParams)
2619{
2620 WDI_Status status = WDI_STATUS_SUCCESS;
2621 WDI_StartScanReqParamsType *wdiStartScanParams =
2622 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2623 sizeof(WDI_StartScanReqParamsType)) ;
2624 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002626 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002627 if(NULL == wdiStartScanParams)
2628 {
2629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002630 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002631 VOS_ASSERT(0);
2632 return VOS_STATUS_E_NOMEM;
2633 }
2634 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2635 if(NULL == pWdaParams)
2636 {
2637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002638 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002639 VOS_ASSERT(0);
2640 vos_mem_free(wdiStartScanParams);
2641 return VOS_STATUS_E_NOMEM;
2642 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002643 /* Copy init Scan params to WDI structure */
2644 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2645 wdiStartScanParams->wdiReqStatusCB = NULL ;
2646
Jeff Johnson295189b2012-06-20 16:38:30 -07002647 /* Store Init Req pointer, as this will be used for response */
2648 /* store Params pass it to WDI */
2649 pWdaParams->pWdaContext = pWDA;
2650 pWdaParams->wdaMsgParam = startScanParams;
2651 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002652 /* call DAL API to pass init scan request to DAL */
2653 status = WDI_StartScanReq(wdiStartScanParams,
2654 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002655 /* failure returned by WDI API */
2656 if(IS_WDI_STATUS_FAILURE(status))
2657 {
2658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2659 "Failure in Start Scan WDI API, free all the memory "
2660 "It should be due to previous abort scan." );
2661 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2662 vos_mem_free(pWdaParams) ;
2663 startScanParams->status = eSIR_FAILURE ;
2664 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2665 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002666 return CONVERT_WDI2VOS_STATUS(status) ;
2667}
Jeff Johnson295189b2012-06-20 16:38:30 -07002668/*
2669 * FUNCTION: WDA_EndScanReqCallback
2670 * END SCAN callback
2671 */
2672void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2673{
2674 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2675 tWDA_CbContext *pWDA;
2676 tEndScanParams *endScanParam;
2677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002678 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002679 if(NULL == pWdaParams)
2680 {
2681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002682 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002683 VOS_ASSERT(0) ;
2684 return ;
2685 }
2686 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2687 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002688 if(NULL == endScanParam)
2689 {
2690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002691 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002692 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002693 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2694 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002695 return ;
2696 }
2697
2698 /* Free WDI command buffer */
2699 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2700 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002701 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002702 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002703 /* send response back to PE */
2704 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2705 return ;
2706}
2707
Jeff Johnson295189b2012-06-20 16:38:30 -07002708/*
2709 * FUNCTION: WDA_ProcessEndScanReq
2710 * Trigger END SCAN in WDI
2711 */
2712VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2713 tEndScanParams *endScanParams)
2714{
2715 WDI_Status status = WDI_STATUS_SUCCESS;
2716 WDI_EndScanReqParamsType *wdiEndScanParams =
2717 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2718 sizeof(WDI_EndScanReqParamsType)) ;
2719 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002721 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002722 if(NULL == wdiEndScanParams)
2723 {
2724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002725 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002726 VOS_ASSERT(0);
2727 return VOS_STATUS_E_NOMEM;
2728 }
2729 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2730 if(NULL == pWdaParams)
2731 {
2732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002733 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002734 VOS_ASSERT(0);
2735 vos_mem_free(wdiEndScanParams);
2736 return VOS_STATUS_E_NOMEM;
2737 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002738 /* Copy init Scan params to WDI structure */
2739 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2740 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002741 /* Store Init Req pointer, as this will be used for response */
2742 /* store Params pass it to WDI */
2743 pWdaParams->pWdaContext = pWDA;
2744 pWdaParams->wdaMsgParam = endScanParams;
2745 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002746 /* call DAL API to pass init scan request to DAL */
2747 status = WDI_EndScanReq(wdiEndScanParams,
2748 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002749 if(IS_WDI_STATUS_FAILURE(status))
2750 {
2751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2752 "Failure in End Scan WDI API, free all the memory "
2753 "It should be due to previous abort scan." );
2754 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2755 vos_mem_free(pWdaParams) ;
2756 endScanParams->status = eSIR_FAILURE ;
2757 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2758 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002759 return CONVERT_WDI2VOS_STATUS(status) ;
2760}
Jeff Johnson295189b2012-06-20 16:38:30 -07002761/*
2762 * FUNCTION: WDA_FinishScanReqCallback
2763 * Trigger Finish SCAN callback
2764 */
2765void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2766{
2767 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2768 tWDA_CbContext *pWDA;
2769 tFinishScanParams *finishScanParam;
2770 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002772 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002773 if(NULL == pWdaParams)
2774 {
2775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002776 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002777 VOS_ASSERT(0) ;
2778 return ;
2779 }
2780
2781 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2782 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002783 if(NULL == finishScanParam)
2784 {
2785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002786 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002787 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002788 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2789 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002790 return ;
2791 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002792 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2793 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002794 /*
2795 * Now Resume TX, if we reached here means, TX is already suspended, we
2796 * have to resume it unconditionaly
2797 */
2798 status = WDA_ResumeDataTx(pWDA) ;
2799
2800 if(VOS_STATUS_SUCCESS != status)
2801 {
2802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002803 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002804 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002805 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002806 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
2807 return ;
2808}
Jeff Johnson295189b2012-06-20 16:38:30 -07002809/*
2810 * FUNCTION: WDA_ProcessFinshScanReq
2811 * Trigger Finish SCAN in WDI
2812 */
2813VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
2814 tFinishScanParams *finishScanParams)
2815{
2816 WDI_Status status = WDI_STATUS_SUCCESS;
2817 WDI_FinishScanReqParamsType *wdiFinishScanParams =
2818 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
2819 sizeof(WDI_FinishScanReqParamsType)) ;
2820 tWDA_ReqParams *pWdaParams ;
2821 tANI_U8 i = 0;
2822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002823 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002824 if(NULL == wdiFinishScanParams)
2825 {
2826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002827 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002828 VOS_ASSERT(0);
2829 return VOS_STATUS_E_NOMEM;
2830 }
2831 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2832 if(NULL == pWdaParams)
2833 {
2834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002835 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002836 VOS_ASSERT(0);
2837 vos_mem_free(wdiFinishScanParams);
2838 return VOS_STATUS_E_NOMEM;
2839 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002840 /* Copy init Scan params to WDI structure */
2841 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
2842 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
2843 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002844 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
2845 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
2846 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
2847 finishScanParams->frameLength ;
2848 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
2849 finishScanParams->currentOperChannel ;
2850 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
2851 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
2852 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002853 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
2854 {
2855 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2856 finishScanParams->scanEntry.bssIdx[i] ;
2857 }
2858
2859
Jeff Johnson295189b2012-06-20 16:38:30 -07002860 /* if Frame length, copy macMgmtHdr ro WDI structure */
2861 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
2862 {
2863 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
2864 &finishScanParams->macMgmtHdr,
2865 sizeof(WDI_MacMgmtHdr)) ;
2866 }
2867 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002868 /* Store Init Req pointer, as this will be used for response */
2869 /* store Params pass it to WDI */
2870 pWdaParams->pWdaContext = pWDA;
2871 pWdaParams->wdaMsgParam = finishScanParams;
2872 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002873 /* call DAL API to pass init scan request to DAL */
2874 status = WDI_FinishScanReq(wdiFinishScanParams,
2875 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002876
Jeff Johnson295189b2012-06-20 16:38:30 -07002877
2878 /*
2879 * WDI API returns failure..
2880 */
2881 if(IS_WDI_STATUS_FAILURE( status))
2882 {
2883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2884 "Failure in Finish Scan WDI API, free all the memory " );
2885 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2886 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002887 finishScanParams->status = eSIR_FAILURE ;
2888 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
2889 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002890 return CONVERT_WDI2VOS_STATUS(status) ;
2891}
Jeff Johnson295189b2012-06-20 16:38:30 -07002892/*---------------------------------------------------------------------
2893 * ASSOC API's
2894 *---------------------------------------------------------------------
2895 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002896/*
2897 * FUNCTION: WDA_JoinReqCallback
2898 * Trigger Init SCAN callback
2899 */
2900void WDA_JoinReqCallback(WDI_Status status, void* pUserData)
2901{
2902 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2903 tWDA_CbContext *pWDA;
2904 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002906 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002907 if(NULL == pWdaParams)
2908 {
2909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002910 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002911 VOS_ASSERT(0) ;
2912 return ;
2913 }
2914 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2915 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002916 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
2917 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002918 /* reset macBSSID */
2919 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07002920 /* reset macSTASelf */
2921 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002922 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002923 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002924 return ;
2925}
Jeff Johnson295189b2012-06-20 16:38:30 -07002926/*
2927 * FUNCTION: WDA_ProcessJoinReq
2928 * Trigger Join REQ in WDI
2929 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002930VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
2931 tSwitchChannelParams* joinReqParam)
2932{
2933 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002934 WDI_JoinReqParamsType *wdiJoinReqParam =
2935 (WDI_JoinReqParamsType *)vos_mem_malloc(
2936 sizeof(WDI_JoinReqParamsType)) ;
2937 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002939 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002940 if(NULL == wdiJoinReqParam)
2941 {
2942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002943 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002944 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002945 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002946 return VOS_STATUS_E_NOMEM;
2947 }
2948 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2949 if(NULL == pWdaParams)
2950 {
2951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002952 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002953 VOS_ASSERT(0);
2954 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002955 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002956 return VOS_STATUS_E_NOMEM;
2957 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002958
2959 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
2960 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
2961 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
2962 {
2963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
2964 "%s: received join request when BSSID or self-STA is NULL "
2965 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002966 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002967 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
2968 VOS_ASSERT(0);
2969 vos_mem_free(wdiJoinReqParam);
2970 vos_mem_free(pWdaParams);
2971 joinReqParam->status = eSIR_FAILURE ;
2972 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2973 return VOS_STATUS_E_INVAL;
2974 }
2975
Jeff Johnson295189b2012-06-20 16:38:30 -07002976 /* copy the BSSID for pWDA */
2977 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
2978 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002979 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
2980 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002981 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
2982 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07002983#ifdef WLAN_FEATURE_VOWIFI
2984 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
2985 joinReqParam->maxTxPower ;
2986#else
Jeff Johnson295189b2012-06-20 16:38:30 -07002987 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
2988 joinReqParam->localPowerConstraint ;
2989#endif
2990 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
2991 joinReqParam->secondaryChannelOffset ;
2992 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
2993
2994 wdiJoinReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002995 /* Store Init Req pointer, as this will be used for response */
2996 /* store Params pass it to WDI */
2997 pWdaParams->pWdaContext = pWDA;
2998 pWdaParams->wdaMsgParam = joinReqParam;
2999 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003000 status = WDI_JoinReq(wdiJoinReqParam,
3001 (WDI_JoinRspCb )WDA_JoinReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003002 if(IS_WDI_STATUS_FAILURE(status))
3003 {
3004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3005 "Failure in Join WDI API, free all the memory " );
3006 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3007 vos_mem_free(pWdaParams) ;
3008 joinReqParam->status = eSIR_FAILURE ;
3009 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3010 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003011 return CONVERT_WDI2VOS_STATUS(status) ;
3012}
Jeff Johnson295189b2012-06-20 16:38:30 -07003013/*
3014 * FUNCTION: WDA_SwitchChannelReqCallback
3015 * send Switch channel RSP back to PE
3016 */
3017void WDA_SwitchChannelReqCallback(
3018 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
3019{
3020 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3021 tWDA_CbContext *pWDA;
3022 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003024 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003025 if(NULL == pWdaParams)
3026 {
3027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003028 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003029 VOS_ASSERT(0) ;
3030 return ;
3031 }
3032 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3033 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3034
3035#ifdef WLAN_FEATURE_VOWIFI
3036 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
3037#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003038 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3039 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003040 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003041 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003042 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003043 return ;
3044}
Jeff Johnson295189b2012-06-20 16:38:30 -07003045/*
3046 * FUNCTION: WDA_ProcessChannelSwitchReq
3047 * Request to WDI to switch channel REQ params.
3048 */
3049VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
3050 tSwitchChannelParams *pSwitchChanParams)
3051{
3052 WDI_Status status = WDI_STATUS_SUCCESS ;
3053 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
3054 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
3055 sizeof(WDI_SwitchChReqParamsType)) ;
3056 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003058 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003059 if(NULL == wdiSwitchChanParam)
3060 {
3061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003062 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003063 VOS_ASSERT(0);
3064 return VOS_STATUS_E_NOMEM;
3065 }
3066 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3067 if(NULL == pWdaParams)
3068 {
3069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003070 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003071 VOS_ASSERT(0);
3072 vos_mem_free(wdiSwitchChanParam);
3073 return VOS_STATUS_E_NOMEM;
3074 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003075 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
3076#ifndef WLAN_FEATURE_VOWIFI
3077 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3078 pSwitchChanParams->localPowerConstraint;
3079#endif
3080 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3081 pSwitchChanParams->secondaryChannelOffset;
3082 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003083 /* Store req pointer, as this will be used for response */
3084 /* store Params pass it to WDI */
3085 pWdaParams->pWdaContext = pWDA;
3086 pWdaParams->wdaMsgParam = pSwitchChanParams;
3087 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003088#ifdef WLAN_FEATURE_VOWIFI
3089 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
3090 = pSwitchChanParams->maxTxPower;
3091 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3092 pSwitchChanParams ->selfStaMacAddr,
3093 sizeof(tSirMacAddr));
3094#endif
3095 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3096 pSwitchChanParams->bssId,
3097 sizeof(tSirMacAddr));
3098
3099 status = WDI_SwitchChReq(wdiSwitchChanParam,
3100 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003101 if(IS_WDI_STATUS_FAILURE(status))
3102 {
3103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3104 "Failure in process channel switch Req WDI API, free all the memory " );
3105 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3106 vos_mem_free(pWdaParams) ;
3107 pSwitchChanParams->status = eSIR_FAILURE ;
3108 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
3109 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003110 return CONVERT_WDI2VOS_STATUS(status) ;
3111}
Jeff Johnson295189b2012-06-20 16:38:30 -07003112/*
3113 * FUNCTION: WDA_ConfigBssReqCallback
3114 * config BSS Req Callback, called by WDI
3115 */
3116void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
3117 ,void* pUserData)
3118{
3119 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3120 tWDA_CbContext *pWDA;
3121 tAddBssParams *configBssReqParam;
3122 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003124 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003125 if(NULL == pWdaParams)
3126 {
3127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003128 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003129 VOS_ASSERT(0) ;
3130 return ;
3131 }
3132 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3133 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
3134 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003135 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003136 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003137 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
3138 {
3139 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
3140 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003141 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
3142 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
3143 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
3144
3145 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
3146 {
3147 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
3148 {
3149 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
3150 staConfigBssParam->staType = STA_ENTRY_BSSID;
3151 }
3152 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
3153 (staConfigBssParam->staType == STA_ENTRY_SELF))
3154 {
3155 /* This is the 1st add BSS Req for the BTAMP STA */
3156 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3157 staConfigBssParam->staType = STA_ENTRY_BSSID;
3158 }
3159 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3160 (staConfigBssParam->staType == STA_ENTRY_PEER))
3161 {
3162 /* This is the 2nd ADD BSS Request that is sent
3163 * on the BTAMP STA side. The Sta type is
3164 * set to STA_ENTRY_PEER here.*/
3165 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3166 }
3167 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3168 (staConfigBssParam->staType == STA_ENTRY_SELF))
3169 {
3170 /* statype is already set by PE.
3171 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
3172 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
3173 staConfigBssParam->staType = STA_ENTRY_BSSID;
3174 }
3175 else
3176 {
3177 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
3178 staConfigBssParam->staType = STA_ENTRY_PEER;
3179 }
3180 }
3181 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
3182 {
3183 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
3184 staConfigBssParam->staType = STA_ENTRY_SELF;
3185 }
3186 else
3187 {
3188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3189 "Invalid operation mode specified");
3190 VOS_ASSERT(0);
3191 }
3192
3193 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003194 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003195 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003196 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003197 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
3198 sizeof(tSirMacAddr));
3199 staConfigBssParam->txChannelWidthSet =
3200 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07003201 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
3202 staConfigBssParam->htCapable)
3203 {
3204 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
3205 wdiConfigBssRsp->ucBSSIdx;
3206 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
3207 WDA_VALID_STA_INDEX ;
3208 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003209 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
3210 wdiConfigBssRsp->ucBSSIdx,
3211 wdiConfigBssRsp->ucSTAIdx))
3212 {
3213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003214 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003215 VOS_ASSERT(0) ;
3216 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003217 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
3218 {
3219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003220 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003221 VOS_ASSERT(0) ;
3222 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003223#ifdef WLAN_FEATURE_VOWIFI
3224 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
3225#endif
3226 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003227 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3228 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003229 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003230 return ;
3231}
Jeff Johnson295189b2012-06-20 16:38:30 -07003232/*
3233 * FUNCTION: WDA_UpdateEdcaParamsForAC
3234 * Update WDI EDCA params with PE edca params
3235 */
3236void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
3237 WDI_EdcaParamRecord *wdiEdcaParam,
3238 tSirMacEdcaParamRecord *macEdcaParam)
3239{
3240 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
3241 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
3242 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
3243 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
3244 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
3245 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
3246}
Jeff Johnson295189b2012-06-20 16:38:30 -07003247/*
3248 * FUNCTION: WDA_ProcessConfigBssReq
3249 * Configure BSS before starting Assoc with AP
3250 */
3251VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
3252 tAddBssParams* configBssReqParam)
3253{
3254 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303255 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003256 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003258 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303259 if (NULL == configBssReqParam)
3260 {
3261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3262 "%s: configBssReqParam is NULL", __func__);
3263 return VOS_STATUS_E_INVAL;
3264 }
3265
3266 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
3267 sizeof(WDI_ConfigBSSReqParamsType)) ;
3268
Jeff Johnson295189b2012-06-20 16:38:30 -07003269 if(NULL == wdiConfigBssReqParam)
3270 {
3271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003272 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003273 VOS_ASSERT(0);
3274 return VOS_STATUS_E_NOMEM;
3275 }
3276 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3277 if(NULL == pWdaParams)
3278 {
3279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003280 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003281 VOS_ASSERT(0);
3282 vos_mem_free(wdiConfigBssReqParam);
3283 return VOS_STATUS_E_NOMEM;
3284 }
Kiran4a17ebe2013-01-31 10:43:43 -08003285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3286 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07003287 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003288 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
3289 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003290 /* Store Init Req pointer, as this will be used for response */
3291 /* store Params pass it to WDI */
3292 pWdaParams->pWdaContext = pWDA;
3293 pWdaParams->wdaMsgParam = configBssReqParam;
3294 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003295 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
3296 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003297 if(IS_WDI_STATUS_FAILURE(status))
3298 {
3299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3300 "Failure in Config BSS WDI API, free all the memory " );
3301 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3302 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003303 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003304 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
3305 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003306 return CONVERT_WDI2VOS_STATUS(status) ;
3307}
Jeff Johnson295189b2012-06-20 16:38:30 -07003308#ifdef ENABLE_HAL_COMBINED_MESSAGES
3309/*
3310 * FUNCTION: WDA_PostAssocReqCallback
3311 * Post ASSOC req callback, send RSP back to PE
3312 */
3313void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
3314 void* pUserData)
3315{
3316 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3317 tPostAssocParams *postAssocReqParam =
3318 (tPostAssocParams *)pWDA->wdaMsgParam ;
3319 /*STA context within the BSS Params*/
3320 tAddStaParams *staPostAssocParam =
3321 &postAssocReqParam->addBssParams.staContext ;
3322 /*STA Params for self STA*/
3323 tAddStaParams *selfStaPostAssocParam =
3324 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003326 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003327 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003328 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003329 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
3330 {
3331 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
3332 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
3333 sizeof(tSirMacAddr)) ;
3334 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
3335 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
3336 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003337 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
3338 }
3339 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3340 pWDA->wdaWdiApiMsgParam = NULL;
3341 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003342 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003343 return ;
3344}
Jeff Johnson295189b2012-06-20 16:38:30 -07003345/*
3346 * FUNCTION: WDA_ProcessPostAssocReq
3347 * Trigger POST ASSOC processing in WDI
3348 */
3349VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
3350 tPostAssocParams *postAssocReqParam)
3351{
Jeff Johnson295189b2012-06-20 16:38:30 -07003352 WDI_Status status = WDI_STATUS_SUCCESS ;
3353
3354 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
3355 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
3356 sizeof(WDI_PostAssocReqParamsType)) ;
3357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003358 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003359
Jeff Johnson295189b2012-06-20 16:38:30 -07003360 if(NULL == wdiPostAssocReqParam)
3361 {
3362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003363 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003364 VOS_ASSERT(0);
3365 return VOS_STATUS_E_NOMEM;
3366 }
3367
3368 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
3369 {
3370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003371 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003372 VOS_ASSERT(0);
3373 return VOS_STATUS_E_FAILURE;
3374 }
3375
Jeff Johnson295189b2012-06-20 16:38:30 -07003376 /* update BSS params into WDI structure */
3377 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3378 &postAssocReqParam->addBssParams) ;
3379 /* update STA params into WDI structure */
3380 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3381 &postAssocReqParam->addStaParams) ;
3382
3383 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3384 postAssocReqParam->addBssParams.highPerformance;
3385 WDA_UpdateEdcaParamsForAC(pWDA,
3386 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3387 &postAssocReqParam->addBssParams.acbe);
3388 WDA_UpdateEdcaParamsForAC(pWDA,
3389 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3390 &postAssocReqParam->addBssParams.acbk);
3391 WDA_UpdateEdcaParamsForAC(pWDA,
3392 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3393 &postAssocReqParam->addBssParams.acvi);
3394 WDA_UpdateEdcaParamsForAC(pWDA,
3395 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3396 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003397 /* Store Init Req pointer, as this will be used for response */
3398 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003399 /* store Params pass it to WDI */
3400 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003401 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3402 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003403 if(IS_WDI_STATUS_FAILURE(status))
3404 {
3405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3406 "Failure in Post Assoc WDI API, free all the memory " );
3407 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3408 pWDA->wdaWdiApiMsgParam = NULL;
3409 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003410 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003411 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3412 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003413 return CONVERT_WDI2VOS_STATUS(status) ;
3414}
3415#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003416/*
3417 * FUNCTION: WDA_AddStaReqCallback
3418 * ADD STA req callback, send RSP back to PE
3419 */
3420void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3421 void* pUserData)
3422{
3423 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3424 tWDA_CbContext *pWDA;
3425 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003427 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003428 if(NULL == pWdaParams)
3429 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003431 VOS_ASSERT(0) ;
3432 return ;
3433 }
3434 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3435 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003436 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003437 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003438 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3439 {
3440 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3441 /*TODO: UMAC structure doesn't have these fields*/
3442 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3443 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3444 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3445 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3446 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3447 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003448#ifdef FEATURE_WLAN_TDLS
3449 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3450 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3451#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003452 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003453#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003454 {
3455 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3456 wdiConfigStaRsp->ucBssIdx;
3457 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3458 WDA_VALID_STA_INDEX ;
3459 }
3460 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3461 {
3462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003463 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003464 VOS_ASSERT(0) ;
3465 return ;
3466 }
3467 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003468 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3469 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003470 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003471 return ;
3472}
Jeff Johnson295189b2012-06-20 16:38:30 -07003473/*
3474 * FUNCTION: WDA_ConfigStaReq
3475 * Trigger Config STA processing in WDI
3476 */
3477VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3478 tAddStaParams *addStaReqParam)
3479{
Jeff Johnson295189b2012-06-20 16:38:30 -07003480 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003481 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3482 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3483 sizeof(WDI_ConfigSTAReqParamsType)) ;
3484 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003486 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003487 if(NULL == wdiConfigStaReqParam)
3488 {
3489 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003490 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003491 VOS_ASSERT(0);
3492 return VOS_STATUS_E_NOMEM;
3493 }
3494 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3495 if(NULL == pWdaParams)
3496 {
3497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003498 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003499 VOS_ASSERT(0);
3500 vos_mem_free(wdiConfigStaReqParam);
3501 return VOS_STATUS_E_NOMEM;
3502 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003503 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003504 /* update STA params into WDI structure */
3505 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3506 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003507 /* Store Init Req pointer, as this will be used for response */
3508 /* store Params pass it to WDI */
3509 pWdaParams->pWdaContext = pWDA;
3510 pWdaParams->wdaMsgParam = addStaReqParam;
3511 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003512 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3513 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003514 if(IS_WDI_STATUS_FAILURE(status))
3515 {
3516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3517 "Failure in Config STA WDI API, free all the memory " );
3518 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3519 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003520 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003521 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3522 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003523 return CONVERT_WDI2VOS_STATUS(status) ;
3524}
Jeff Johnson295189b2012-06-20 16:38:30 -07003525/*
3526 * FUNCTION: WDA_DelBSSReqCallback
3527 * Dens DEL BSS RSP back to PE
3528 */
3529void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3530 void* pUserData)
3531{
3532 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3533 tWDA_CbContext *pWDA;
3534 tDeleteBssParams *delBssReqParam;
3535 tANI_U8 staIdx,tid;
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 == pWdaParams)
3539 {
3540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003541 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003542 VOS_ASSERT(0) ;
3543 return ;
3544 }
3545 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3546 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003547 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003548 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3549 {
3550 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3551 sizeof(tSirMacAddr)) ;
3552 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003553 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3554 {
3555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003556 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003557 VOS_ASSERT(0) ;
3558 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003559 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3560 {
3561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003562 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003563 VOS_ASSERT(0) ;
3564 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003565 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3566 {
3567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003568 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003569 VOS_ASSERT(0) ;
3570 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003571 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3572 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003573 /* reset the the system role*/
3574 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3575
3576 /* Reset the BA related information */
3577 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3578 {
3579 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3580 {
3581 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3582 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
3583 /* Reset framesTxed counters here */
3584 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3585 {
3586 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3587 }
3588 }
3589 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003590 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003591 return ;
3592}
3593
Jeff Johnson295189b2012-06-20 16:38:30 -07003594/*
3595 * FUNCTION: WDA_ProcessDelBssReq
3596 * Init DEL BSS req with WDI
3597 */
3598VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3599 tDeleteBssParams *delBssParam)
3600{
3601 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003602 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3603 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3604 sizeof(WDI_DelBSSReqParamsType)) ;
3605 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003607 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003608 if(NULL == wdiDelBssReqParam)
3609 {
3610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003611 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003612 VOS_ASSERT(0);
3613 return VOS_STATUS_E_NOMEM;
3614 }
3615 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3616 if(NULL == pWdaParams)
3617 {
3618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003619 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003620 VOS_ASSERT(0);
3621 vos_mem_free(wdiDelBssReqParam);
3622 return VOS_STATUS_E_NOMEM;
3623 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003624 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
3625 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
3626
3627 /* Store Init Req pointer, as this will be used for response */
3628 /* store Params pass it to WDI */
3629 pWdaParams->pWdaContext = pWDA;
3630 pWdaParams->wdaMsgParam = delBssParam;
3631 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003632 status = WDI_DelBSSReq(wdiDelBssReqParam,
3633 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003634 if(IS_WDI_STATUS_FAILURE(status))
3635 {
3636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3637 "Failure in Del BSS WDI API, free all the memory " );
3638 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3639 vos_mem_free(pWdaParams) ;
3640 delBssParam->status = eSIR_FAILURE ;
3641 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
3642 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003643 return CONVERT_WDI2VOS_STATUS(status) ;
3644}
Jeff Johnson295189b2012-06-20 16:38:30 -07003645/*
3646 * FUNCTION: WDA_DelSTAReqCallback
3647 * Dens DEL STA RSP back to PE
3648 */
3649void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
3650 void* pUserData)
3651{
3652 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3653 tWDA_CbContext *pWDA;
3654 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003656 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003657 if(NULL == pWdaParams)
3658 {
3659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003660 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003661 VOS_ASSERT(0) ;
3662 return ;
3663 }
3664 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3665 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003666 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003667 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
3668 {
3669 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
3670 {
3671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003672 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003673 VOS_ASSERT(0) ;
3674 }
3675 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
3676 }
3677 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3678 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003679 /*Reset the BA information corresponding to this STAIdx */
3680 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
3681 WDA_INVALID_STA_INDEX;
3682 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
3683
3684 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003685 return ;
3686}
Jeff Johnson295189b2012-06-20 16:38:30 -07003687/*
3688 * FUNCTION: WDA_ProcessDelStaReq
3689 * Init DEL STA req with WDI
3690 */
3691VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
3692 tDeleteStaParams *delStaParam)
3693{
3694 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003695 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
3696 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
3697 sizeof(WDI_DelSTAReqParamsType)) ;
3698 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003700 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003701 if(NULL == wdiDelStaReqParam)
3702 {
3703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003704 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003705 VOS_ASSERT(0);
3706 return VOS_STATUS_E_NOMEM;
3707 }
3708 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3709 if(NULL == pWdaParams)
3710 {
3711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003712 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003713 VOS_ASSERT(0);
3714 vos_mem_free(wdiDelStaReqParam);
3715 return VOS_STATUS_E_NOMEM;
3716 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003717 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
3718 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003719 /* Store Init Req pointer, as this will be used for response */
3720 /* store Params pass it to WDI */
3721 pWdaParams->pWdaContext = pWDA;
3722 pWdaParams->wdaMsgParam = delStaParam;
3723 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003724 status = WDI_DelSTAReq(wdiDelStaReqParam,
3725 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003726 if(IS_WDI_STATUS_FAILURE(status))
3727 {
3728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3729 "Failure in Del STA WDI API, free all the memory status = %d",
3730 status );
3731 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3732 vos_mem_free(pWdaParams) ;
3733 delStaParam->status = eSIR_FAILURE ;
3734 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
3735 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003736 return CONVERT_WDI2VOS_STATUS(status) ;
3737}
Jeff Johnson295189b2012-06-20 16:38:30 -07003738void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
3739{
3740 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3741 tWDA_CbContext *pWDA;
3742 tAddStaSelfParams *pAddStaSelfRsp = NULL;
3743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003744 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003745 if(NULL == pWdaParams)
3746 {
3747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003748 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003749 VOS_ASSERT(0) ;
3750 return ;
3751 }
3752 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3753 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003754 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3755 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003756 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
3757 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
3758 pwdiAddSTASelfRsp->macSelfSta,
3759 sizeof(pAddStaSelfRsp->selfMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003760 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003761 return ;
3762}
Jeff Johnson295189b2012-06-20 16:38:30 -07003763/*
3764 * FUNCTION: WDA_ProcessAddStaSelfReq
3765 *
3766 */
3767VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
3768{
3769 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003770 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003771 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
3772 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
3773 sizeof(WDI_AddSTASelfReqParamsType)) ;
3774 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003776 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003777 if( NULL == wdiAddStaSelfReq )
3778 {
3779 VOS_ASSERT( 0 );
3780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003781 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003782 return( VOS_STATUS_E_NOMEM );
3783 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003784 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003785 if( NULL == pWdaParams )
3786 {
3787 VOS_ASSERT( 0 );
3788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003789 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003790 vos_mem_free(wdiAddStaSelfReq) ;
3791 return( VOS_STATUS_E_NOMEM );
3792 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003793 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003794 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07003795 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07003796 /* Store Init Req pointer, as this will be used for response */
3797 /* store Params pass it to WDI */
3798 pWdaParams->pWdaContext = pWDA;
3799 pWdaParams->wdaMsgParam = pAddStaSelfReq;
3800 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07003801 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003802
Jeff Johnson43971f52012-07-17 12:26:56 -07003803 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003804 {
3805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3806 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07003807 wstatus );
3808 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003809 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3810 vos_mem_free(pWdaParams) ;
3811 pAddStaSelfReq->status = eSIR_FAILURE ;
3812 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
3813 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003814 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003815}
Jeff Johnson295189b2012-06-20 16:38:30 -07003816/*
3817 * FUNCTION: WDA_DelSTASelfRespCallback
3818 *
3819 */
3820void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
3821 wdiDelStaSelfRspParams , void* pUserData)
3822{
3823 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3824 tWDA_CbContext *pWDA;
3825 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003827 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003828 if (NULL == pWdaParams)
3829 {
3830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003831 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003832 VOS_ASSERT(0);
3833 return;
3834 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003835 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3836 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003837 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003838 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003839
3840 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3841 vos_mem_free(pWdaParams) ;
3842
3843 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003844 return ;
3845}
Jeff Johnson295189b2012-06-20 16:38:30 -07003846/*
3847 * FUNCTION: WDA_DelSTASelfReqCallback
3848 *
3849 */
3850void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
3851 void* pUserData)
3852{
3853 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3854 tWDA_CbContext *pWDA;
3855 tDelStaSelfParams *delStaSelfParams;
3856
3857 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05303858 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003859 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003860
3861 if (NULL == pWdaParams)
3862 {
3863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003864 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003865 VOS_ASSERT(0);
3866 return;
3867 }
3868
3869 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3870 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
3871
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003872 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003873
3874 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3875 {
3876 VOS_ASSERT(0);
3877 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3878 vos_mem_free(pWdaParams) ;
3879 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
3880 }
3881
3882 return ;
3883}
3884
3885/*
3886 * FUNCTION: WDA_DelSTASelfReq
3887 * Trigger Config STA processing in WDI
3888 */
3889VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
3890 tDelStaSelfParams* pDelStaSelfReqParam)
3891{
3892 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003893 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003894 tWDA_ReqParams *pWdaParams = NULL;
3895 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
3896 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
3897 sizeof(WDI_DelSTASelfReqParamsType)) ;
3898
Jeff Johnson295189b2012-06-20 16:38:30 -07003899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003900 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003901 if( NULL == wdiDelStaSelfReq )
3902 {
3903 VOS_ASSERT( 0 );
3904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003905 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003906 return( VOS_STATUS_E_NOMEM );
3907 }
3908
3909 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3910 if( NULL == pWdaParams )
3911 {
3912 VOS_ASSERT( 0 );
3913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003914 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003915 vos_mem_free(wdiDelStaSelfReq) ;
3916 return( VOS_STATUS_E_NOMEM );
3917 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003918 pWdaParams->pWdaContext = pWDA;
3919 /* Store param pointer as passed in by caller */
3920 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
3921 /* store Params pass it to WDI */
3922 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07003923 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
3924 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
3925
3926 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
3927 wdiDelStaSelfReq->pUserData = pWdaParams;
3928
Jeff Johnson43971f52012-07-17 12:26:56 -07003929 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07003930 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
3931
Jeff Johnson43971f52012-07-17 12:26:56 -07003932 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003933 {
3934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3935 "Failure in Del Sta Self REQ WDI API, free all the memory " );
3936 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07003937 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003938 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3939 vos_mem_free(pWdaParams) ;
3940 pDelStaSelfReqParam->status = eSIR_FAILURE ;
3941 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
3942 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003943 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003944}
3945
Jeff Johnson295189b2012-06-20 16:38:30 -07003946/*
3947 * FUNCTION: WDA_SendMsg
3948 * Send Message back to PE
3949 */
3950void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
3951 void *pBodyptr, tANI_U32 bodyVal)
3952{
3953 tSirMsgQ msg = {0} ;
3954 tANI_U32 status = VOS_STATUS_SUCCESS ;
3955 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07003956 msg.type = msgType;
3957 msg.bodyval = bodyVal;
3958 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07003959 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07003960 if (VOS_STATUS_SUCCESS != status)
3961 {
3962 if(NULL != pBodyptr)
3963 {
3964 vos_mem_free(pBodyptr);
3965 }
3966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003967 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003968 VOS_ASSERT(0) ;
3969 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003970 return ;
3971}
Jeff Johnson295189b2012-06-20 16:38:30 -07003972/*
3973 * FUNCTION: WDA_UpdateBSSParams
3974 * Translated WDA/PE BSS info into WDI BSS info..
3975 */
3976void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
3977 WDI_ConfigBSSReqInfoType *wdiBssParams,
3978 tAddBssParams *wdaBssParams)
3979{
3980 v_U8_t keyIndex = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003981 /* copy bssReq Params to WDI structure */
3982 vos_mem_copy(wdiBssParams->macBSSID,
3983 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
3984 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
3985 sizeof(tSirMacAddr)) ;
3986 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
3987 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
3988 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003989 wdiBssParams->ucShortSlotTimeSupported =
3990 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003991 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
3992 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
3993 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
3994 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
3995 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
3996
3997 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
3998 wdiBssParams->ucTXOPProtectionFullSupport =
3999 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004000 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
4001 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004002 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004003 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
4004 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
4005 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
4006 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
4007
Chet Lanctot186b5732013-03-18 10:26:30 -07004008 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
4009
Jeff Johnson295189b2012-06-20 16:38:30 -07004010 /* copy SSID into WDI structure */
4011 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
4012 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
4013 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004014 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
4015 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004016 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07004017#ifdef WLAN_FEATURE_VOWIFI
4018 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
4019#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004020 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07004021 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07004022#ifdef WLAN_FEATURE_VOWIFI_11R
4023 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004024 if(wdiBssParams->bExtSetStaKeyParamValid)
4025 {
4026 /* copy set STA key params to WDI structure */
4027 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
4028 wdaBssParams->extSetStaKeyParam.staIdx;
4029 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
4030 wdaBssParams->extSetStaKeyParam.encType;
4031 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
4032 wdaBssParams->extSetStaKeyParam.wepType;
4033 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
4034 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004035 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
4036 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004037 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004038 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
4039 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4040 {
4041 WDA_GetWepKeysFromCfg( pWDA,
4042 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
4043 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
4044 wdiBssParams->wdiExtSetKeyParam.wdiKey );
4045 }
4046 else
4047 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004048 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4049 keyIndex++)
4050 {
4051 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
4052 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
4053 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
4054 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
4055 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
4056 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004057 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
4058 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4059 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
4060 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
4061 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
4062 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
4063 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
4064 wdaBssParams->extSetStaKeyParam.key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4065 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004066 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
4067 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004068 }
4069 }
4070 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
4071 }
4072 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
4073 {
4074 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
4075 sizeof(wdaBssParams->extSetStaKeyParam) );
4076 }
4077#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07004078#ifdef WLAN_FEATURE_11AC
4079 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
4080 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
4081#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004082
4083 return ;
4084}
Jeff Johnson295189b2012-06-20 16:38:30 -07004085/*
4086 * FUNCTION: WDA_UpdateSTAParams
4087 * Translated WDA/PE BSS info into WDI BSS info..
4088 */
4089void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
4090 WDI_ConfigStaReqInfoType *wdiStaParams,
4091 tAddStaParams *wdaStaParams)
4092{
4093 tANI_U8 i = 0;
4094 /* Update STA params */
4095 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
4096 sizeof(tSirMacAddr)) ;
4097 wdiStaParams->usAssocId = wdaStaParams->assocId;
4098 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07004099 wdiStaParams->staIdx = wdaStaParams->staIdx;
4100
Jeff Johnson295189b2012-06-20 16:38:30 -07004101 wdiStaParams->ucShortPreambleSupported =
4102 wdaStaParams->shortPreambleSupported;
4103 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
4104 sizeof(tSirMacAddr)) ;
4105 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
4106
4107 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
4108
4109 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
4110 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
4111 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
4112 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
4113 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
4114 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
4115 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
4116
4117 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
4118 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07004119 wdiStaParams->wdiSupportedRates.opRateMode =
4120 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004121 for(i = 0;i < WDI_NUM_11B_RATES;i++)
4122 {
4123 wdiStaParams->wdiSupportedRates.llbRates[i] =
4124 wdaStaParams->supportedRates.llbRates[i];
4125 }
4126 for(i = 0;i < WDI_NUM_11A_RATES;i++)
4127 {
4128 wdiStaParams->wdiSupportedRates.llaRates[i] =
4129 wdaStaParams->supportedRates.llaRates[i];
4130 }
4131 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
4132 {
4133 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
4134 wdaStaParams->supportedRates.aniLegacyRates[i];
4135 }
4136 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
4137 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07004138#ifdef WLAN_FEATURE_11AC
4139 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
4140 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
4141 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
4142 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
4143#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004144 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
4145 {
4146 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
4147 wdaStaParams->supportedRates.supportedMCSSet[i];
4148 }
4149 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
4150 wdaStaParams->supportedRates.rxHighestDataRate;
4151
4152 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
4153
4154 wdiStaParams->wdiAction = wdaStaParams->updateSta;
4155
4156 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
4157 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
4158 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
4159
4160 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
4161 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
4162 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
4163 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07004164 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07004165#ifdef WLAN_FEATURE_11AC
4166 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
4167 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08004168 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07004169#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08004170 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
4171 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07004172 return ;
4173}
Jeff Johnson295189b2012-06-20 16:38:30 -07004174/*
4175 * -------------------------------------------------------------------------
4176 * CFG update to WDI
4177 * -------------------------------------------------------------------------
4178 */
4179
4180 /*
4181 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
4182 * Convert the WNI CFG ID to HAL CFG ID
4183 */
Jeff Johnsone7245742012-09-05 17:12:55 -07004184static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07004185{
4186 switch(wniCfgId)
4187 {
4188 case WNI_CFG_STA_ID:
4189 return QWLAN_HAL_CFG_STA_ID;
4190 case WNI_CFG_CURRENT_TX_ANTENNA:
4191 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
4192 case WNI_CFG_CURRENT_RX_ANTENNA:
4193 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
4194 case WNI_CFG_LOW_GAIN_OVERRIDE:
4195 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
4196 case WNI_CFG_POWER_STATE_PER_CHAIN:
4197 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
4198 case WNI_CFG_CAL_PERIOD:
4199 return QWLAN_HAL_CFG_CAL_PERIOD;
4200 case WNI_CFG_CAL_CONTROL:
4201 return QWLAN_HAL_CFG_CAL_CONTROL;
4202 case WNI_CFG_PROXIMITY:
4203 return QWLAN_HAL_CFG_PROXIMITY;
4204 case WNI_CFG_NETWORK_DENSITY:
4205 return QWLAN_HAL_CFG_NETWORK_DENSITY;
4206 case WNI_CFG_MAX_MEDIUM_TIME:
4207 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
4208 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
4209 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
4210 case WNI_CFG_RTS_THRESHOLD:
4211 return QWLAN_HAL_CFG_RTS_THRESHOLD;
4212 case WNI_CFG_SHORT_RETRY_LIMIT:
4213 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
4214 case WNI_CFG_LONG_RETRY_LIMIT:
4215 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
4216 case WNI_CFG_FRAGMENTATION_THRESHOLD:
4217 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
4218 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
4219 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
4220 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
4221 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
4222 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
4223 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
4224 case WNI_CFG_FIXED_RATE:
4225 return QWLAN_HAL_CFG_FIXED_RATE;
4226 case WNI_CFG_RETRYRATE_POLICY:
4227 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
4228 case WNI_CFG_RETRYRATE_SECONDARY:
4229 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
4230 case WNI_CFG_RETRYRATE_TERTIARY:
4231 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
4232 case WNI_CFG_FORCE_POLICY_PROTECTION:
4233 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
4234 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
4235 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
4236 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
4237 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
4238 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
4239 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
4240 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
4241 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
4242 case WNI_CFG_MAX_BA_SESSIONS:
4243 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
4244 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
4245 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
4246 case WNI_CFG_PS_ENABLE_BCN_FILTER:
4247 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
4248 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
4249 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
4250 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
4251 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
4252 case WNI_CFG_STATS_PERIOD:
4253 return QWLAN_HAL_CFG_STATS_PERIOD;
4254 case WNI_CFG_CFP_MAX_DURATION:
4255 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
4256#if 0 /*This is not part of CFG*/
4257 case WNI_CFG_FRAME_TRANS_ENABLED:
4258 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
4259#endif
4260 case WNI_CFG_DTIM_PERIOD:
4261 return QWLAN_HAL_CFG_DTIM_PERIOD;
4262 case WNI_CFG_EDCA_WME_ACBK:
4263 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
4264 case WNI_CFG_EDCA_WME_ACBE:
4265 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
4266 case WNI_CFG_EDCA_WME_ACVI:
4267 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
4268 case WNI_CFG_EDCA_WME_ACVO:
4269 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
4270#if 0
4271 case WNI_CFG_TELE_BCN_WAKEUP_EN:
4272 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
4273 case WNI_CFG_TELE_BCN_TRANS_LI:
4274 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
4275 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
4276 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
4277 case WNI_CFG_TELE_BCN_MAX_LI:
4278 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
4279 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
4280 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
4281#endif
4282 case WNI_CFG_ENABLE_CLOSE_LOOP:
4283 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08004284 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
4285 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
Jeff Johnson295189b2012-06-20 16:38:30 -07004286 default:
4287 {
4288 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004289 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07004290 wniCfgId);
4291 return VOS_STATUS_E_INVAL;
4292 }
4293 }
4294}
Jeff Johnson295189b2012-06-20 16:38:30 -07004295/*
4296 * FUNCTION: WDA_UpdateCfgCallback
4297 *
4298 */
4299void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
4300{
4301 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4302 WDI_UpdateCfgReqParamsType *wdiCfgParam =
4303 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004305 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004306 /*
4307 * currently there is no response message is expected between PE and
4308 * WDA, Failure return from WDI is a ASSERT condition
4309 */
4310 if(WDI_STATUS_SUCCESS != wdiStatus)
4311 {
4312 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004313 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07004314 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
4315 }
4316
4317 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
4318 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4319 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004320 return ;
4321}
Jeff Johnson295189b2012-06-20 16:38:30 -07004322/*
4323 * FUNCTION: WDA_UpdateCfg
4324 *
4325 */
4326VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
4327{
4328
4329 WDI_Status status = WDI_STATUS_SUCCESS ;
4330 tANI_U32 val =0;
4331 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
4332 tHalCfg *configData;
4333 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
4334 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07004335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004336 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004337 if (NULL == pMac )
4338 {
4339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004340 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004341 return VOS_STATUS_E_FAILURE;
4342 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004343 if(WDA_START_STATE != pWDA->wdaState)
4344 {
4345 return VOS_STATUS_E_FAILURE;
4346 }
4347
4348 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
4349 {
4350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004351 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004352 VOS_ASSERT(0);
4353 return VOS_STATUS_E_FAILURE;
4354 }
4355
4356 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
4357 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004358 if(NULL == wdiCfgReqParam)
4359 {
4360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004361 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004362 VOS_ASSERT(0);
4363 return VOS_STATUS_E_NOMEM;
4364 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004365 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
4366 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004367 if(NULL == wdiCfgReqParam->pConfigBuffer)
4368 {
4369 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004370 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004371 vos_mem_free(wdiCfgReqParam);
4372 VOS_ASSERT(0);
4373 return VOS_STATUS_E_NOMEM;
4374 }
4375
4376 /*convert the WNI CFG Id to HAL CFG Id*/
4377 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4378 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4379
4380 /*TODO: revisit this for handling string parameters */
4381 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4382 &val) != eSIR_SUCCESS)
4383 {
4384 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004385 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07004386 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4387 vos_mem_free(wdiCfgReqParam);
4388 return eSIR_FAILURE;
4389 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004390 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4391 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4392 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4393 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4394 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4395
4396 /* store Params pass it to WDI */
4397 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004398#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4399 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4400 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004401 if(IS_WDI_STATUS_FAILURE(status))
4402 {
4403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4404 "Failure in Update CFG WDI API, free all the memory " );
4405 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4406 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4407 pWDA->wdaWdiCfgApiMsgParam = NULL;
4408 /* Failure is not expected */
4409 VOS_ASSERT(0) ;
4410 }
4411#else
4412 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4413 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4414 pWDA->wdaWdiCfgApiMsgParam = NULL;
4415#endif
4416 return CONVERT_WDI2VOS_STATUS(status) ;
4417}
4418
Jeff Johnson295189b2012-06-20 16:38:30 -07004419VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4420 v_U8_t *pDefaultKeyId,
4421 v_U8_t *pNumKeys,
4422 WDI_KeysType *pWdiKeys )
4423{
4424 v_U32_t i, j, defKeyId = 0;
4425 v_U32_t val = SIR_MAC_KEY_LENGTH;
4426 VOS_STATUS status = WDI_STATUS_SUCCESS;
4427 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004428 if (NULL == pMac )
4429 {
4430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004431 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004432 return VOS_STATUS_E_FAILURE;
4433 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004434 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4435 &defKeyId ))
4436 {
4437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4438 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4439 }
4440
4441 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004442 /* Need to extract ALL of the configured WEP Keys */
4443 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4444 {
4445 val = SIR_MAC_KEY_LENGTH;
4446 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4447 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4448 pWdiKeys[j].key,
4449 &val ))
4450 {
4451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004452 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07004453 }
4454 else
4455 {
4456 pWdiKeys[j].keyId = (tANI_U8) i;
4457 /*
4458 * Actually, a DC (Don't Care) because
4459 * this is determined (and set) by PE/MLME
4460 */
4461 pWdiKeys[j].unicast = 0;
4462 /*
4463 * Another DC (Don't Care)
4464 */
4465 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4466 /* Another DC (Don't Care). Unused for WEP */
4467 pWdiKeys[j].paeRole = 0;
4468 /* Determined from wlan_cfgGetStr() above.*/
4469 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004470 j++;
4471 *pNumKeys = (tANI_U8) j;
4472 }
4473 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004474 return status;
4475}
Jeff Johnson295189b2012-06-20 16:38:30 -07004476/*
4477 * FUNCTION: WDA_SetBssKeyReqCallback
4478 * send SET BSS key RSP back to PE
4479 */
4480void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4481{
4482 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4483 tWDA_CbContext *pWDA;
4484 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004486 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004487 if(NULL == pWdaParams)
4488 {
4489 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004490 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004491 VOS_ASSERT(0) ;
4492 return ;
4493 }
4494 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4495 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004496 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4497 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004498 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004499 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004500 return ;
4501}
Jeff Johnson295189b2012-06-20 16:38:30 -07004502/*
4503 * FUNCTION: WDA_ProcessSetBssKeyReq
4504 * Request to WDI for programming the BSS key( key for
4505 * broadcast/multicast frames Encryption)
4506 */
4507VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4508 tSetBssKeyParams *setBssKeyParams )
4509{
4510 WDI_Status status = WDI_STATUS_SUCCESS ;
4511 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4512 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4513 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4514 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004515 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004517 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004518 if(NULL == wdiSetBssKeyParam)
4519 {
4520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004521 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004522 VOS_ASSERT(0);
4523 return VOS_STATUS_E_NOMEM;
4524 }
4525 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4526 if(NULL == pWdaParams)
4527 {
4528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004529 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004530 VOS_ASSERT(0);
4531 vos_mem_free(wdiSetBssKeyParam);
4532 return VOS_STATUS_E_NOMEM;
4533 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004534 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004535 /* copy set BSS params to WDI structure */
4536 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4537 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4538 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004539 if(setBssKeyParams->encType != eSIR_ED_NONE)
4540 {
4541 if( setBssKeyParams->numKeys == 0 &&
4542 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4543 setBssKeyParams->encType == eSIR_ED_WEP104))
4544 {
4545 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004546 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4547 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4548 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4549 }
4550 else
4551 {
4552 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4553 {
4554 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4555 setBssKeyParams->key[keyIndex].keyId;
4556 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
4557 setBssKeyParams->key[keyIndex].unicast;
4558 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
4559 setBssKeyParams->key[keyIndex].keyDirection;
4560 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
4561 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4562 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
4563 setBssKeyParams->key[keyIndex].paeRole;
4564 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
4565 setBssKeyParams->key[keyIndex].keyLength;
4566 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
4567 setBssKeyParams->key[keyIndex].key,
4568 SIR_MAC_MAX_KEY_LENGTH);
4569 }
4570 }
4571 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004572 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
4573 setBssKeyParams->singleTidRc;
4574 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004575 /* Store set key pointer, as this will be used for response */
4576 /* store Params pass it to WDI */
4577 pWdaParams->pWdaContext = pWDA;
4578 pWdaParams->wdaMsgParam = setBssKeyParams;
4579 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004580 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
4581 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
4582
4583 if(IS_WDI_STATUS_FAILURE(status))
4584 {
4585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4586 "Failure in Set BSS Key Req WDI API, free all the memory " );
4587 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4588 vos_mem_free(pWdaParams) ;
4589 setBssKeyParams->status = eSIR_FAILURE ;
4590 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
4591 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004592 return CONVERT_WDI2VOS_STATUS(status) ;
4593}
Jeff Johnson295189b2012-06-20 16:38:30 -07004594/*
4595 * FUNCTION: WDA_RemoveBssKeyReqCallback
4596 * send SET BSS key RSP back to PE
4597 */
4598void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
4599{
4600 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4601 tWDA_CbContext *pWDA;
4602 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004604 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004605 if(NULL == pWdaParams)
4606 {
4607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004608 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004609 VOS_ASSERT(0) ;
4610 return ;
4611 }
4612 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4613 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004614 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4615 vos_mem_free(pWdaParams) ;
4616
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004617 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004618 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004619 return ;
4620}
Jeff Johnson295189b2012-06-20 16:38:30 -07004621/*
4622 * FUNCTION: WDA_ProcessRemoveBssKeyReq
4623 * Request to WDI to remove the BSS key( key for broadcast/multicast
4624 * frames Encryption)
4625 */
4626VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
4627 tRemoveBssKeyParams *removeBssKeyParams )
4628{
4629 WDI_Status status = WDI_STATUS_SUCCESS ;
4630 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
4631 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
4632 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
4633 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004635 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004636 if(NULL == wdiRemoveBssKeyParam)
4637 {
4638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004639 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004640 VOS_ASSERT(0);
4641 return VOS_STATUS_E_NOMEM;
4642 }
4643 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4644 if(NULL == pWdaParams)
4645 {
4646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004647 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004648 VOS_ASSERT(0);
4649 vos_mem_free(wdiRemoveBssKeyParam);
4650 return VOS_STATUS_E_NOMEM;
4651 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004652 /* copy Remove BSS key params to WDI structure*/
4653 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
4654 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
4655 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
4656 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
4657 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004658 /* Store remove key pointer, as this will be used for response */
4659 /* store Params pass it to WDI */
4660 pWdaParams->pWdaContext = pWDA;
4661 pWdaParams->wdaMsgParam = removeBssKeyParams;
4662 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004663 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
4664 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004665 if(IS_WDI_STATUS_FAILURE(status))
4666 {
4667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4668 "Failure in Remove BSS Key Req WDI API, free all the memory " );
4669 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4670 vos_mem_free(pWdaParams) ;
4671 removeBssKeyParams->status = eSIR_FAILURE ;
4672 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
4673 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004674 return CONVERT_WDI2VOS_STATUS(status) ;
4675}
Jeff Johnson295189b2012-06-20 16:38:30 -07004676/*
4677 * FUNCTION: WDA_SetBssKeyReqCallback
4678 * send SET BSS key RSP back to PE
4679 */
4680void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
4681{
4682 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4683 tWDA_CbContext *pWDA;
4684 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004686 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004687 if(NULL == pWdaParams)
4688 {
4689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004690 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004691 VOS_ASSERT(0) ;
4692 return ;
4693 }
4694 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4695 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004696 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4697 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004698 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004699 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004700 return ;
4701}
Jeff Johnson295189b2012-06-20 16:38:30 -07004702/*
4703 * FUNCTION: WDA_ProcessSetStaKeyReq
4704 * Request to WDI for programming the STA key( key for Unicast frames
4705 * Encryption)
4706 */
4707VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
4708 tSetStaKeyParams *setStaKeyParams )
4709{
4710 WDI_Status status = WDI_STATUS_SUCCESS ;
4711 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4712 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4713 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4714 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004715 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004717 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004718 if(NULL == wdiSetStaKeyParam)
4719 {
4720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004721 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004722 VOS_ASSERT(0);
4723 return VOS_STATUS_E_NOMEM;
4724 }
4725 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4726 if(NULL == pWdaParams)
4727 {
4728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004729 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004730 VOS_ASSERT(0);
4731 vos_mem_free(wdiSetStaKeyParam);
4732 return VOS_STATUS_E_NOMEM;
4733 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004734 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004735 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004736 /* copy set STA key params to WDI structure */
4737 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4738 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4739 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4740 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004741 if(setStaKeyParams->encType != eSIR_ED_NONE)
4742 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004743 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004744 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
4745 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4746 {
4747 WDA_GetWepKeysFromCfg( pWDA,
4748 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
4749 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
4750 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
4751 }
4752 else
4753 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004754 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4755 keyIndex++)
4756 {
4757 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4758 setStaKeyParams->key[keyIndex].keyId;
4759 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4760 setStaKeyParams->key[keyIndex].unicast;
4761 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4762 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004763 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4764 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4765 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4766 setStaKeyParams->key[keyIndex].paeRole;
4767 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4768 setStaKeyParams->key[keyIndex].keyLength;
4769 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4770 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4771 /* set default index to index which have key direction as WDI_TX_DEFAULT */
4772 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
4773 {
4774 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
4775 }
4776 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004777 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4778 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004779 }
4780 }
4781 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
4782 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004783 /* Store set key pointer, as this will be used for response */
4784 /* store Params pass it to WDI */
4785 pWdaParams->pWdaContext = pWDA;
4786 pWdaParams->wdaMsgParam = setStaKeyParams;
4787 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004788 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
4789 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004790 if(IS_WDI_STATUS_FAILURE(status))
4791 {
4792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4793 "Failure in set STA Key Req WDI API, free all the memory " );
4794 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4795 vos_mem_free(pWdaParams) ;
4796 setStaKeyParams->status = eSIR_FAILURE ;
4797 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
4798 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004799 return CONVERT_WDI2VOS_STATUS(status) ;
4800}
Jeff Johnson295189b2012-06-20 16:38:30 -07004801/*
4802 * FUNCTION: WDA_SetBcastStaKeyReqCallback
4803 * send SET Bcast STA key RSP back to PE
4804 */
4805void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
4806{
4807 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4808 tWDA_CbContext *pWDA;
4809 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004811 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004812 if(NULL == pWdaParams)
4813 {
4814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004815 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004816 VOS_ASSERT(0) ;
4817 return ;
4818 }
4819 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4820 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004821 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4822 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004823 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004824 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004825 return ;
4826}
4827
Jeff Johnson295189b2012-06-20 16:38:30 -07004828/*
4829 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
4830 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
4831 * Encryption)
4832 */
4833VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
4834 tSetStaKeyParams *setStaKeyParams )
4835{
4836 WDI_Status status = WDI_STATUS_SUCCESS ;
4837 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4838 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4839 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4840 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004841 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004843 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004844 if(NULL == wdiSetStaKeyParam)
4845 {
4846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004847 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004848 VOS_ASSERT(0);
4849 return VOS_STATUS_E_NOMEM;
4850 }
4851 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4852 if(NULL == pWdaParams)
4853 {
4854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004855 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004856 VOS_ASSERT(0);
4857 vos_mem_free(wdiSetStaKeyParam);
4858 return VOS_STATUS_E_NOMEM;
4859 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004860 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004861 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004862 /* copy set STA key params to WDI structure */
4863 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4864 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4865 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4866 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004867 if(setStaKeyParams->encType != eSIR_ED_NONE)
4868 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004869 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4870 keyIndex++)
4871 {
4872 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4873 setStaKeyParams->key[keyIndex].keyId;
4874 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4875 setStaKeyParams->key[keyIndex].unicast;
4876 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4877 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004878 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4879 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4880 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4881 setStaKeyParams->key[keyIndex].paeRole;
4882 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4883 setStaKeyParams->key[keyIndex].keyLength;
4884 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4885 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4886 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004887 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4888 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004889 }
4890 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07004891 /* Store set key pointer, as this will be used for response */
4892 /* store Params pass it to WDI */
4893 pWdaParams->pWdaContext = pWDA;
4894 pWdaParams->wdaMsgParam = setStaKeyParams;
4895 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004896 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
4897 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004898 if(IS_WDI_STATUS_FAILURE(status))
4899 {
4900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4901 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
4902 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4903 vos_mem_free(pWdaParams) ;
4904 setStaKeyParams->status = eSIR_FAILURE ;
4905 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
4906 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004907 return CONVERT_WDI2VOS_STATUS(status) ;
4908}
Jeff Johnson295189b2012-06-20 16:38:30 -07004909/*
4910 * FUNCTION: WDA_RemoveStaKeyReqCallback
4911 * send SET BSS key RSP back to PE
4912 */
4913void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
4914{
4915 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4916 tWDA_CbContext *pWDA;
4917 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004919 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004920 if(NULL == pWdaParams)
4921 {
4922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004923 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004924 VOS_ASSERT(0) ;
4925 return ;
4926 }
4927 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4928 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004929 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4930 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004931 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004932 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004933 return ;
4934}
4935
Jeff Johnson295189b2012-06-20 16:38:30 -07004936/*
4937 * FUNCTION: WDA_ProcessRemoveStaKeyReq
4938 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
4939 */
4940VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
4941 tRemoveStaKeyParams *removeStaKeyParams )
4942{
4943 WDI_Status status = WDI_STATUS_SUCCESS ;
4944 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
4945 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
4946 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
4947 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004949 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004950 if(NULL == wdiRemoveStaKeyParam)
4951 {
4952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004953 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004954 VOS_ASSERT(0);
4955 return VOS_STATUS_E_NOMEM;
4956 }
4957 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4958 if(NULL == pWdaParams)
4959 {
4960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004961 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004962 VOS_ASSERT(0);
4963 vos_mem_free(wdiRemoveStaKeyParam);
4964 return VOS_STATUS_E_NOMEM;
4965 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004966 /* copy remove STA key params to WDI structure*/
4967 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
4968 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
4969 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
4970 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
4971 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004972 /* Store remove key pointer, as this will be used for response */
4973 /* store Params pass it to WDI */
4974 pWdaParams->pWdaContext = pWDA;
4975 pWdaParams->wdaMsgParam = removeStaKeyParams;
4976 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004977 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
4978 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004979 if(IS_WDI_STATUS_FAILURE(status))
4980 {
4981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4982 "Failure in remove STA Key Req WDI API, free all the memory " );
4983 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4984 vos_mem_free(pWdaParams) ;
4985 removeStaKeyParams->status = eSIR_FAILURE ;
4986 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
4987 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004988 return CONVERT_WDI2VOS_STATUS(status) ;
4989}
Jeff Johnson295189b2012-06-20 16:38:30 -07004990/*
4991 * FUNCTION: WDA_IsHandleSetLinkStateReq
4992 * Update the WDA state and return the status to handle this message or not
4993 */
Jeff Johnson295189b2012-06-20 16:38:30 -07004994WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
4995 tWDA_CbContext *pWDA,
4996 tLinkStateParams *linkStateParams)
4997{
4998 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07004999 switch(linkStateParams->state)
5000 {
5001 case eSIR_LINK_PREASSOC_STATE:
5002 case eSIR_LINK_BTAMP_PREASSOC_STATE:
5003 /*
5004 * set the WDA state to PRE ASSOC
5005 * copy the BSSID into pWDA to use it in join request and return,
5006 * No need to handle these messages.
5007 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005008 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
5009 {
5010 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07005011 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005012 }
5013 else
5014 {
5015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005016 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005017 VOS_ASSERT(0);
5018 }
5019
5020 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
5021 {
5022 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07005023 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005024 }
5025 else
5026 {
5027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005028 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005029 VOS_ASSERT(0);
5030 }
5031
Jeff Johnson295189b2012-06-20 16:38:30 -07005032 /* UMAC is issuing the setlink state with PREASSOC twice (before set
5033 *channel and after ) so reset the WDA state to ready when the second
5034 * time UMAC issue the link state with PREASSOC
5035 */
5036 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
5037 {
5038 /* RESET WDA state back to WDA_READY_STATE */
5039 pWDA->wdaState = WDA_READY_STATE;
5040 }
5041 else
5042 {
5043 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
5044 }
5045 //populate linkState info in WDACbCtxt
5046 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07005047 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07005048 default:
5049 if(pWDA->wdaState != WDA_READY_STATE)
5050 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005051 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
5052 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
5053 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
5054 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
5055 *the ASSERT in WDA_Stop during module unload.*/
5056 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
5057 {
5058 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005059 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005060 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005061 else
5062 {
5063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005064 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005065 status = WDA_IGNORE_SET_LINK_STATE;
5066 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005067 }
5068 break;
5069 }
5070
5071 return status;
5072}
Jeff Johnson295189b2012-06-20 16:38:30 -07005073/*
5074 * FUNCTION: WDA_SetLinkStateCallback
5075 * call back function for set link state from WDI
5076 */
5077void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
5078{
5079 tWDA_CbContext *pWDA;
5080 tLinkStateParams *linkStateParams;
5081 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005083 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005084 if(NULL == pWdaParams)
5085 {
5086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005087 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005088 VOS_ASSERT(0) ;
5089 return ;
5090 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005091 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -07005092 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005093 /*
5094 * In STA mode start the BA activity check timer after association
5095 * and in AP mode start BA activity check timer after BSS start */
5096 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
5097 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07005098 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
5099 ((status == WDI_STATUS_SUCCESS) &&
5100 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07005101 {
5102 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5103 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005104 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005105 /*
5106 * No respone required for WDA_SET_LINK_STATE so free the request
5107 * param here
5108 */
5109 if( pWdaParams != NULL )
5110 {
5111 if( pWdaParams->wdaWdiApiMsgParam != NULL )
5112 {
5113 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5114 }
5115 vos_mem_free(pWdaParams);
5116 }
5117 return ;
5118}
Jeff Johnson295189b2012-06-20 16:38:30 -07005119/*
5120 * FUNCTION: WDA_ProcessSetLinkState
5121 * Request to WDI to set the link status.
5122 */
5123VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
5124 tLinkStateParams *linkStateParams)
5125{
5126 WDI_Status status = WDI_STATUS_SUCCESS ;
5127 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
5128 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
5129 sizeof(WDI_SetLinkReqParamsType)) ;
5130 tWDA_ReqParams *pWdaParams ;
5131 tpAniSirGlobal pMac;
5132 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
5133
5134 if(NULL == pMac)
5135 {
5136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005137 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005138 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005139 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005140 return VOS_STATUS_E_FAILURE;
5141 }
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 if(NULL == wdiSetLinkStateParam)
5146 {
5147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005148 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005149 VOS_ASSERT(0);
5150 return VOS_STATUS_E_NOMEM;
5151 }
5152 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5153 if(NULL == pWdaParams)
5154 {
5155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005156 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005157 VOS_ASSERT(0);
5158 vos_mem_free(wdiSetLinkStateParam);
5159 return VOS_STATUS_E_NOMEM;
5160 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005161 if(WDA_IGNORE_SET_LINK_STATE ==
5162 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
5163 {
5164 status = WDI_STATUS_E_FAILURE;
5165 }
5166 else
5167 {
5168 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
5169 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005170 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
5171 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005172 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
5173 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005174 pWdaParams->pWdaContext = pWDA;
5175 /* Store remove key pointer, as this will be used for response */
5176 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005177 /* store Params pass it to WDI */
5178 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
5179 /* Stop Timer only other than GO role and concurrent session */
5180 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07005181 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005182 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
5183 {
5184 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5185 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005186 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
5187 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005188 if(IS_WDI_STATUS_FAILURE(status))
5189 {
5190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5191 "Failure in set link state Req WDI API, free all the memory " );
5192 }
5193 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005194 if(IS_WDI_STATUS_FAILURE(status))
5195 {
5196 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07005197 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005198 vos_mem_free(pWdaParams);
5199 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005200 return CONVERT_WDI2VOS_STATUS(status) ;
5201}
Jeff Johnson295189b2012-06-20 16:38:30 -07005202/*
5203 * FUNCTION: WDA_GetStatsReqParamsCallback
5204 * send the response to PE with Stats received from WDI
5205 */
5206void WDA_GetStatsReqParamsCallback(
5207 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
5208 void* pUserData)
5209{
5210 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5211 tAniGetPEStatsRsp *pGetPEStatsRspParams;
5212
5213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005214 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005215 pGetPEStatsRspParams =
5216 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
5217 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
5218
5219 if(NULL == pGetPEStatsRspParams)
5220 {
5221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005222 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005223 VOS_ASSERT(0);
5224 return;
5225 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005226 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
5227 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
5228 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
5229 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005230
5231 //Fill the Session Id Properly in PE
5232 pGetPEStatsRspParams->sessionId = 0;
5233 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005234 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005235 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
5236 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005237 vos_mem_copy( pGetPEStatsRspParams + 1,
5238 wdiGetStatsRsp + 1,
5239 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005240 /* send response to UMAC*/
5241 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
5242
5243 return;
5244}
5245
Jeff Johnson295189b2012-06-20 16:38:30 -07005246/*
5247 * FUNCTION: WDA_ProcessGetStatsReq
5248 * Request to WDI to get the statistics
5249 */
5250VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
5251 tAniGetPEStatsReq *pGetStatsParams)
5252{
5253 WDI_Status status = WDI_STATUS_SUCCESS ;
5254 WDI_GetStatsReqParamsType wdiGetStatsParam;
5255 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005257 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005258 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
5259 pGetStatsParams->staId;
5260 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
5261 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005262 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005263 status = WDI_GetStatsReq(&wdiGetStatsParam,
5264 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005265 if(IS_WDI_STATUS_FAILURE(status))
5266 {
5267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5268 "Failure in Get Stats Req WDI API, free all the memory " );
5269 pGetPEStatsRspParams =
5270 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
5271 if(NULL == pGetPEStatsRspParams)
5272 {
5273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005274 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005275 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005276 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005277 return VOS_STATUS_E_NOMEM;
5278 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005279 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
5280 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
5281 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
5282 pGetPEStatsRspParams->rc = eSIR_FAILURE;
5283 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
5284 (void *)pGetPEStatsRspParams, 0) ;
5285 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005286 /* Free the request message */
5287 vos_mem_free(pGetStatsParams);
5288 return CONVERT_WDI2VOS_STATUS(status);
5289}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005290
5291#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
5292/*
5293 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
5294 * send the response to PE with roam Rssi received from WDI
5295 */
5296void WDA_GetRoamRssiReqParamsCallback(
5297 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
5298 void* pUserData)
5299{
5300 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5301 tWDA_CbContext *pWDA = NULL;
5302 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5303 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
5304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5305 "<------ %s " ,__func__);
5306 if(NULL == pWdaParams)
5307 {
5308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5309 "%s: pWdaParams received NULL", __func__);
5310 VOS_ASSERT(0) ;
5311 return ;
5312 }
5313 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5314 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
5315
5316 if(NULL == pGetRoamRssiReqParams)
5317 {
5318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5319 "%s: pGetRoamRssiReqParams received NULL", __func__);
5320 VOS_ASSERT(0);
5321 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5322 vos_mem_free(pWdaParams);
5323 return ;
5324 }
5325 pGetRoamRssiRspParams =
5326 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5327
5328 if(NULL == pGetRoamRssiRspParams)
5329 {
5330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5331 "%s: VOS MEM Alloc Failure", __func__);
5332 VOS_ASSERT(0);
5333 return;
5334 }
5335 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
5336 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005337 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005338 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
5339 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
5340
5341 /* Assign get roam rssi req (backup) in to the response */
5342 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
5343
5344 /* free WDI command buffer */
5345 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5346 vos_mem_free(pWdaParams) ;
5347
5348 /* send response to UMAC*/
5349 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
5350
5351 return;
5352}
5353
5354
5355
5356/*
5357 * FUNCTION: WDA_ProcessGetRoamRssiReq
5358 * Request to WDI to get the statistics
5359 */
5360VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
5361 tAniGetRssiReq *pGetRoamRssiParams)
5362{
5363 WDI_Status status = WDI_STATUS_SUCCESS ;
5364 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
5365 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5366 tWDA_ReqParams *pWdaParams = NULL;
5367
5368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5369 "------> %s " ,__func__);
5370 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
5371 pGetRoamRssiParams->staId;
5372 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
5373
5374 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5375 if(NULL == pWdaParams)
5376 {
5377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5378 "%s: VOS MEM Alloc Failure", __func__);
5379 VOS_ASSERT(0);
5380 return VOS_STATUS_E_NOMEM;
5381 }
5382
5383 /* Store Init Req pointer, as this will be used for response */
5384 pWdaParams->pWdaContext = pWDA;
5385
5386 /* Take Get roam Rssi req backup as it stores the callback to be called after
5387 receiving the response */
5388 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
5389 pWdaParams->wdaWdiApiMsgParam = NULL;
5390
5391 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
5392 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
5393 if(IS_WDI_STATUS_FAILURE(status))
5394 {
5395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5396 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
5397 pGetRoamRssiRspParams =
5398 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5399 if(NULL == pGetRoamRssiRspParams)
5400 {
5401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5402 "%s: VOS MEM Alloc Failure", __func__);
5403 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05305404 vos_mem_free(pGetRoamRssiParams);
5405 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005406 return VOS_STATUS_E_NOMEM;
5407 }
5408 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
5409 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
5410 pGetRoamRssiRspParams->rssi = 0;
5411 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
5412 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
5413 (void *)pGetRoamRssiRspParams, 0) ;
5414 }
5415 return CONVERT_WDI2VOS_STATUS(status);
5416}
5417#endif
5418
5419
Jeff Johnson295189b2012-06-20 16:38:30 -07005420/*
5421 * FUNCTION: WDA_UpdateEDCAParamCallback
5422 * call back function for Update EDCA params from WDI
5423 */
5424void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
5425{
5426 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5427 tEdcaParams *pEdcaParams;
5428
5429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005430 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005431 if(NULL == pWdaParams)
5432 {
5433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005434 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005435 VOS_ASSERT(0) ;
5436 return ;
5437 }
5438 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005439 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5440 vos_mem_free(pWdaParams);
5441 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005442 return ;
5443}
Jeff Johnson295189b2012-06-20 16:38:30 -07005444/*
5445 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
5446 * Request to WDI to Update the EDCA params.
5447 */
5448VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
5449 tEdcaParams *pEdcaParams)
5450{
5451 WDI_Status status = WDI_STATUS_SUCCESS ;
5452 WDI_UpdateEDCAParamsType *wdiEdcaParam =
5453 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
5454 sizeof(WDI_UpdateEDCAParamsType)) ;
5455 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005457 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005458 if(NULL == wdiEdcaParam)
5459 {
5460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005461 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005462 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005463 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005464 return VOS_STATUS_E_NOMEM;
5465 }
5466 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5467 if(NULL == pWdaParams)
5468 {
5469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005470 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005471 VOS_ASSERT(0);
5472 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005473 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005474 return VOS_STATUS_E_NOMEM;
5475 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005476 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07005477 /*
5478 Since firmware is not using highperformance flag, we have removed
5479 this flag from wdiEDCAInfo structure to match sizeof the structure
5480 between host and firmware.In future if we are planning to use
5481 highperformance flag then Please define this flag in wdiEDCAInfo
5482 structure, update it here and send it to firmware. i.e.
5483 Following is the original line which we removed as part of the fix
5484 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
5485 pEdcaParams->highPerformance;
5486 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005487 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
5488 &pEdcaParams->acbe);
5489 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
5490 &pEdcaParams->acbk);
5491 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
5492 &pEdcaParams->acvi);
5493 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
5494 &pEdcaParams->acvo);
5495 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005496 pWdaParams->pWdaContext = pWDA;
5497 /* Store remove key pointer, as this will be used for response */
5498 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005499 /* store Params pass it to WDI */
5500 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005501 status = WDI_UpdateEDCAParams(wdiEdcaParam,
5502 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005503 if(IS_WDI_STATUS_FAILURE(status))
5504 {
5505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5506 "Failure in Update EDCA Params WDI API, free all the memory " );
5507 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5508 vos_mem_free(pWdaParams);
5509 vos_mem_free(pEdcaParams);
5510 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005511 return CONVERT_WDI2VOS_STATUS(status) ;
5512}
Jeff Johnson295189b2012-06-20 16:38:30 -07005513/*
5514 * FUNCTION: WDA_AddBAReqCallback
5515 * send ADD BA RSP back to PE
5516 */
5517void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
5518 void* pUserData)
5519{
5520 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5521 tWDA_CbContext *pWDA;
5522 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005524 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005525 if(NULL == pWdaParams)
5526 {
5527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005528 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005529 VOS_ASSERT(0) ;
5530 return ;
5531 }
5532 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5533 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005534 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5535 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005536 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005537 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005538 return ;
5539}
5540
Jeff Johnson295189b2012-06-20 16:38:30 -07005541/*
5542 * FUNCTION: WDA_ProcessAddBAReq
5543 * Request to WDI to Update the ADDBA REQ params.
5544 */
5545VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
5546 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
5547{
Jeff Johnson43971f52012-07-17 12:26:56 -07005548 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005549 WDI_AddBAReqParamsType *wdiAddBAReqParam =
5550 (WDI_AddBAReqParamsType *)vos_mem_malloc(
5551 sizeof(WDI_AddBAReqParamsType)) ;
5552 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005554 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005555 if(NULL == wdiAddBAReqParam)
5556 {
5557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005558 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005559 VOS_ASSERT(0);
5560 return VOS_STATUS_E_NOMEM;
5561 }
5562 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5563 if(NULL == pWdaParams)
5564 {
5565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005566 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005567 VOS_ASSERT(0);
5568 vos_mem_free(wdiAddBAReqParam);
5569 return VOS_STATUS_E_NOMEM;
5570 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005571 do
5572 {
5573 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005574 wdiAddBaInfo->ucSTAIdx = staIdx ;
5575 wdiAddBaInfo->ucBaSessionID = baSessionID ;
5576 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005577 } while(0) ;
5578 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005579 pWdaParams->pWdaContext = pWDA;
5580 /* store Params pass it to WDI */
5581 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
5582 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07005583 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
5584 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005585
Jeff Johnson43971f52012-07-17 12:26:56 -07005586 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005587 {
5588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07005589 "Failure in ADD BA REQ Params WDI API, free all the memory" );
5590 status = CONVERT_WDI2VOS_STATUS(wstatus);
5591 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005592 vos_mem_free(pWdaParams);
5593 pAddBAReqParams->status = eSIR_FAILURE;
5594 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5595 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005596 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005597}
Jeff Johnson295189b2012-06-20 16:38:30 -07005598/*
5599 * FUNCTION: WDA_AddBASessionReqCallback
5600 * send ADD BA SESSION RSP back to PE/(or TL)
5601 */
5602void WDA_AddBASessionReqCallback(
5603 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
5604{
5605 VOS_STATUS status = VOS_STATUS_SUCCESS ;
5606 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5607 tWDA_CbContext *pWDA;
5608 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005610 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005611 if(NULL == pWdaParams)
5612 {
5613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005614 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005615 VOS_ASSERT(0) ;
5616 return ;
5617 }
5618 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5619 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005620 if( NULL == pAddBAReqParams )
5621 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005623 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005624 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005625 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5626 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005627 return ;
5628 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005629 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5630 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005631 /*
5632 * if WDA in update TL state, update TL with BA session parama and send
5633 * another request to HAL(/WDI) (ADD_BA_REQ)
5634 */
5635
5636 if((VOS_STATUS_SUCCESS ==
5637 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
5638 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
5639 {
5640 /* Update TL with BA info received from HAL/WDI */
5641 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
5642 wdiAddBaSession->usBaSessionID,
5643 wdiAddBaSession->ucSTAIdx,
5644 wdiAddBaSession->ucBaTID,
5645 wdiAddBaSession->ucBaBufferSize,
5646 wdiAddBaSession->ucWinSize,
5647 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07005648 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
5649 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
5650 }
5651 else
5652 {
5653 pAddBAReqParams->status =
5654 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
5655
5656 /* Setting Flag to indicate that Set BA is success */
5657 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
5658 {
5659 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
5660 tANI_U8 tid = wdiAddBaSession->ucBaTID;
5661 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
5662 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005663 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5664 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005665 /*Reset the WDA state to READY */
5666 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005667 return ;
5668}
5669
Jeff Johnson295189b2012-06-20 16:38:30 -07005670/*
5671 * FUNCTION: WDA_ProcessAddBASessionReq
5672 * Request to WDI to Update the ADDBA REQ params.
5673 */
5674VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
5675 tAddBAParams *pAddBAReqParams)
5676{
5677 WDI_Status status = WDI_STATUS_SUCCESS ;
5678 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
5679 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
5680 sizeof(WDI_AddBASessionReqParamsType)) ;
5681 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005682 WLANTL_STAStateType tlSTAState = 0;
5683
Jeff Johnson295189b2012-06-20 16:38:30 -07005684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005685 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005686 if(NULL == wdiAddBASessionReqParam)
5687 {
5688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005689 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005690 VOS_ASSERT(0);
5691 return VOS_STATUS_E_NOMEM;
5692 }
5693 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5694 if(NULL == pWdaParams)
5695 {
5696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005697 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005698 VOS_ASSERT(0);
5699 vos_mem_free(wdiAddBASessionReqParam);
5700 return VOS_STATUS_E_NOMEM;
5701 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005702 /*
5703 * Populate ADD BA parameters and pass these paarmeters to WDI.
5704 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
5705 * the state to track if these is BA recipient case or BA initiator
5706 * case.
5707 */
5708 do
5709 {
5710 WDI_AddBASessionReqinfoType *wdiBAInfoType =
5711 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
5712 /* vos_mem_copy(wdiBAInfoType->macBSSID,
5713 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
5714 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
5715 vos_mem_copy(wdiBAInfoType->macPeerAddr,
5716 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005717 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07005718 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
5719 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
5720 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
5721 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
5722 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005723 /* check the BA direction and update state accordingly */
5724 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
5725 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
5726 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
5727
5728 }while(0) ;
5729 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005730 pWdaParams->pWdaContext = pWDA;
5731 /* Store ADD BA pointer, as this will be used for response */
5732 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
5733 /* store Params pass it to WDI */
5734 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005735
5736 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
5737 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
5738 */
5739 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
5740 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
5741 {
5742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005743 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07005744 status = WDI_STATUS_E_NOT_ALLOWED;
5745 pAddBAReqParams->status =
5746 CONVERT_WDI2SIR_STATUS(status) ;
5747 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5748 /*Reset the WDA state to READY */
5749 pWDA->wdaState = WDA_READY_STATE;
5750 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5751 vos_mem_free(pWdaParams);
5752
5753 return CONVERT_WDI2VOS_STATUS(status) ;
5754 }
5755
Jeff Johnson295189b2012-06-20 16:38:30 -07005756 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
5757 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005758 if(IS_WDI_STATUS_FAILURE(status))
5759 {
5760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005761 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07005762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005763 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07005764 pAddBAReqParams->status =
5765 CONVERT_WDI2SIR_STATUS(status) ;
5766 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005767 /*Reset the WDA state to READY */
5768 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005769 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005770 vos_mem_free(pWdaParams);
5771 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005772 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005773}
Jeff Johnson295189b2012-06-20 16:38:30 -07005774/*
5775 * FUNCTION: WDA_DelBANotifyTL
5776 * send DEL BA IND to TL
5777 */
5778void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
5779 tDelBAParams *pDelBAReqParams)
5780{
5781 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
5782 //tSirMsgQ msg;
5783 vos_msg_t vosMsg;
5784 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005785 if(NULL == pDelBAInd)
5786 {
5787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005788 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005789 VOS_ASSERT(0) ;
5790 return;
5791 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005792 pDelBAInd->mesgType = WDA_DELETEBA_IND;
5793 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
5794 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
5795 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07005796
Jeff Johnson295189b2012-06-20 16:38:30 -07005797
5798 vosMsg.type = WDA_DELETEBA_IND;
5799 vosMsg.bodyptr = pDelBAInd;
5800 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
5801 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
5802 {
5803 vosStatus = VOS_STATUS_E_BADMSG;
5804 }
5805}
Jeff Johnson295189b2012-06-20 16:38:30 -07005806/*
5807 * FUNCTION: WDA_DelBAReqCallback
5808 * send DEL BA RSP back to PE
5809 */
5810void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
5811{
5812 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5813 tWDA_CbContext *pWDA;
5814 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005816 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005817 if(NULL == pWdaParams)
5818 {
5819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005820 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005821 VOS_ASSERT(0) ;
5822 return ;
5823 }
5824 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5825 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005826 /* Notify TL about DEL BA in case of recipinet */
5827 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
5828 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
5829 {
5830 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
5831 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005832 /*
5833 * No respone required for WDA_DELBA_IND so just free the request
5834 * param here
5835 */
5836 vos_mem_free(pDelBAReqParams);
5837 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5838 vos_mem_free(pWdaParams);
5839 return ;
5840}
5841
Jeff Johnson295189b2012-06-20 16:38:30 -07005842/*
5843 * FUNCTION: WDA_ProcessDelBAReq
5844 * Request to WDI to Update the DELBA REQ params.
5845 */
5846VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
5847 tDelBAParams *pDelBAReqParams)
5848{
5849 WDI_Status status = WDI_STATUS_SUCCESS ;
5850 WDI_DelBAReqParamsType *wdiDelBAReqParam =
5851 (WDI_DelBAReqParamsType *)vos_mem_malloc(
5852 sizeof(WDI_DelBAReqParamsType)) ;
5853 tWDA_ReqParams *pWdaParams ;
5854 tANI_U16 staIdx = 0;
5855 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005857 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005858 if(NULL == wdiDelBAReqParam)
5859 {
5860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005861 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005862 VOS_ASSERT(0);
5863 return VOS_STATUS_E_NOMEM;
5864 }
5865 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5866 if(NULL == pWdaParams)
5867 {
5868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005869 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005870 VOS_ASSERT(0);
5871 vos_mem_free(wdiDelBAReqParam);
5872 return VOS_STATUS_E_NOMEM;
5873 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005874 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
5875 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
5876 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
5877 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005878 pWdaParams->pWdaContext = pWDA;
5879 /* Store DEL BA pointer, as this will be used for response */
5880 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005881 /* store Params pass it to WDI */
5882 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005883 /* if BA exchange over the air is failed, clear this tid in BaBitmap
5884 * maintained in WDA, so that WDA can retry for another BA session
5885 */
5886 staIdx = pDelBAReqParams->staIdx;
5887 tid = pDelBAReqParams->baTID;
5888 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07005889 status = WDI_DelBAReq(wdiDelBAReqParam,
5890 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005891 if(IS_WDI_STATUS_FAILURE(status))
5892 {
5893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5894 "Failure in DEL BA REQ Params WDI API, free all the memory " );
5895 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5896 vos_mem_free(pWdaParams->wdaMsgParam);
5897 vos_mem_free(pWdaParams);
5898 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005899 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005900}
Jeff Johnson295189b2012-06-20 16:38:30 -07005901/*
5902 * FUNCTION: WDA_AddTSReqCallback
5903 * send ADD TS RSP back to PE
5904 */
5905void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
5906{
5907 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5908 tWDA_CbContext *pWDA;
5909 tAddTsParams *pAddTsReqParams;
5910
5911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005912 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005913 if(NULL == pWdaParams)
5914 {
5915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005916 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005917 VOS_ASSERT(0) ;
5918 return ;
5919 }
5920 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5921 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
5922 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5923 vos_mem_free(pWdaParams);
5924
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005925 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005926 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005927 return ;
5928}
5929
Jeff Johnson295189b2012-06-20 16:38:30 -07005930/*
5931 * FUNCTION: WDA_ProcessAddTSReq
5932 * Request to WDI to Update the ADD TS REQ params.
5933 */
5934VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
5935 tAddTsParams *pAddTsReqParams)
5936{
5937 WDI_Status status = WDI_STATUS_SUCCESS ;
5938 WDI_AddTSReqParamsType *wdiAddTSReqParam =
5939 (WDI_AddTSReqParamsType *)vos_mem_malloc(
5940 sizeof(WDI_AddTSReqParamsType)) ;
5941 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005943 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005944 if(NULL == wdiAddTSReqParam)
5945 {
5946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005947 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005948 VOS_ASSERT(0);
5949 return VOS_STATUS_E_NOMEM;
5950 }
5951 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5952 if(NULL == pWdaParams)
5953 {
5954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005955 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005956 VOS_ASSERT(0);
5957 vos_mem_free(wdiAddTSReqParam);
5958 return VOS_STATUS_E_NOMEM;
5959 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005960 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
5961 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005962 //TS IE
5963 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
5964 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
5965 pAddTsReqParams->tspec.length;
5966
5967 //TS IE : TS INFO : TRAFFIC
5968 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
5969 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
5970 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
5971 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
5972 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
5973 pAddTsReqParams->tspec.tsinfo.traffic.psb;
5974 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
5975 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
5976 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
5977 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
5978 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
5979 pAddTsReqParams->tspec.tsinfo.traffic.direction;
5980 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
5981 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
5982 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
5983 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
5984
5985 //TS IE : TS INFO : SCHEDULE
5986 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
5987 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
5988 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
5989 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07005990 //TS IE
5991 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
5992 pAddTsReqParams->tspec.nomMsduSz;
5993 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
5994 pAddTsReqParams->tspec.maxMsduSz;
5995 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
5996 pAddTsReqParams->tspec.minSvcInterval;
5997 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
5998 pAddTsReqParams->tspec.maxSvcInterval;
5999 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
6000 pAddTsReqParams->tspec.inactInterval;
6001 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
6002 pAddTsReqParams->tspec.suspendInterval;
6003 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
6004 pAddTsReqParams->tspec.svcStartTime;
6005 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
6006 pAddTsReqParams->tspec.minDataRate;
6007 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
6008 pAddTsReqParams->tspec.meanDataRate;
6009 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
6010 pAddTsReqParams->tspec.peakDataRate;
6011 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
6012 pAddTsReqParams->tspec.maxBurstSz;
6013 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
6014 pAddTsReqParams->tspec.delayBound;
6015 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
6016 pAddTsReqParams->tspec.minPhyRate;
6017 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
6018 pAddTsReqParams->tspec.surplusBw;
6019 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
6020 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07006021 /* TODO: tAddTsParams doesn't have the following fields */
6022#if 0
6023 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6024 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
6025 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6026 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6027#endif
6028 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
6029
6030 pWdaParams->pWdaContext = pWDA;
6031 /* Store ADD TS pointer, as this will be used for response */
6032 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006033 /* store Params pass it to WDI */
6034 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006035 status = WDI_AddTSReq(wdiAddTSReqParam,
6036 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006037 if(IS_WDI_STATUS_FAILURE(status))
6038 {
6039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6040 "Failure in ADD TS REQ Params WDI API, free all the memory " );
6041 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6042 vos_mem_free(pWdaParams);
6043 pAddTsReqParams->status = eSIR_FAILURE ;
6044 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
6045 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006046 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006047}
6048
Jeff Johnson295189b2012-06-20 16:38:30 -07006049/*
6050 * FUNCTION: WDA_DelTSReqCallback
6051 * send DEL TS RSP back to PE
6052 */
6053void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
6054{
6055 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006057 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006058 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6059 vos_mem_free(pWdaParams->wdaMsgParam) ;
6060 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006061 /*
6062 * No respone required for WDA_DEL_TS_REQ so just free the request
6063 * param here
6064 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006065 return ;
6066}
6067
Jeff Johnson295189b2012-06-20 16:38:30 -07006068/*
6069 * FUNCTION: WDA_ProcessDelTSReq
6070 * Request to WDI to Update the DELTS REQ params.
6071 */
6072VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
6073 tDelTsParams *pDelTSReqParams)
6074{
6075 WDI_Status status = WDI_STATUS_SUCCESS ;
6076 WDI_DelTSReqParamsType *wdiDelTSReqParam =
6077 (WDI_DelTSReqParamsType *)vos_mem_malloc(
6078 sizeof(WDI_DelTSReqParamsType)) ;
6079 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006081 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006082 if(NULL == wdiDelTSReqParam)
6083 {
6084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006085 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006086 VOS_ASSERT(0);
6087 return VOS_STATUS_E_NOMEM;
6088 }
6089 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6090 if(NULL == pWdaParams)
6091 {
6092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006093 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006094 VOS_ASSERT(0);
6095 vos_mem_free(wdiDelTSReqParam);
6096 return VOS_STATUS_E_NOMEM;
6097 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006098 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
6099 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
6100 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
6101 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
6102 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006103 pWdaParams->pWdaContext = pWDA;
6104 /* Store DEL TS pointer, as this will be used for response */
6105 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006106 /* store Params pass it to WDI */
6107 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006108 status = WDI_DelTSReq(wdiDelTSReqParam,
6109 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006110 if(IS_WDI_STATUS_FAILURE(status))
6111 {
6112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6113 "Failure in DEL TS REQ Params WDI API, free all the memory " );
6114 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6115 vos_mem_free(pWdaParams->wdaMsgParam);
6116 vos_mem_free(pWdaParams);
6117 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006118 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006119}
Jeff Johnson295189b2012-06-20 16:38:30 -07006120/*
6121 * FUNCTION: WDA_UpdateBeaconParamsCallback
6122 * Free the memory. No need to send any response to PE in this case
6123 */
6124void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
6125{
6126 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006128 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006129 if(NULL == pWdaParams)
6130 {
6131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006132 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006133 VOS_ASSERT(0) ;
6134 return ;
6135 }
6136 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6137 vos_mem_free(pWdaParams->wdaMsgParam) ;
6138 vos_mem_free(pWdaParams);
6139 /*
6140 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
6141 * param here
6142 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006143 return ;
6144}
Jeff Johnson295189b2012-06-20 16:38:30 -07006145/*
6146 * FUNCTION: WDA_ProcessUpdateBeaconParams
6147 * Request to WDI to send the beacon parameters to HAL to update the Hardware
6148 */
6149VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
6150 tUpdateBeaconParams *pUpdateBeaconParams)
6151{
6152 WDI_Status status = WDI_STATUS_SUCCESS ;
6153 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
6154 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
6155 sizeof(WDI_UpdateBeaconParamsType)) ;
6156 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006158 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006159 if(NULL == wdiUpdateBeaconParams)
6160 {
6161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006162 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006163 VOS_ASSERT(0);
6164 return VOS_STATUS_E_NOMEM;
6165 }
6166 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6167 if(NULL == pWdaParams)
6168 {
6169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006170 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006171 VOS_ASSERT(0);
6172 vos_mem_free(wdiUpdateBeaconParams);
6173 return VOS_STATUS_E_NOMEM;
6174 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006175 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
6176 pUpdateBeaconParams->bssIdx;
6177 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
6178 pUpdateBeaconParams->fShortPreamble;
6179 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
6180 pUpdateBeaconParams->fShortSlotTime;
6181 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
6182 pUpdateBeaconParams->beaconInterval;
6183 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
6184 pUpdateBeaconParams->llaCoexist;
6185 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
6186 pUpdateBeaconParams->llbCoexist;
6187 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
6188 pUpdateBeaconParams->llgCoexist;
6189 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
6190 pUpdateBeaconParams->ht20MhzCoexist;
6191 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
6192 pUpdateBeaconParams->llnNonGFCoexist;
6193 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
6194 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
6195 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
6196 pUpdateBeaconParams->fRIFSMode;
6197 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
6198 pUpdateBeaconParams->paramChangeBitmap;
6199 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
6200
6201 pWdaParams->pWdaContext = pWDA;
6202 /* Store UpdateBeacon Req pointer, as this will be used for response */
6203 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006204 /* store Params pass it to WDI */
6205 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006206 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
6207 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
6208 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006209 if(IS_WDI_STATUS_FAILURE(status))
6210 {
6211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6212 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
6213 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6214 vos_mem_free(pWdaParams->wdaMsgParam);
6215 vos_mem_free(pWdaParams);
6216 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006217 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006218}
Jeff Johnson295189b2012-06-20 16:38:30 -07006219#ifdef FEATURE_WLAN_CCX
Jeff Johnson295189b2012-06-20 16:38:30 -07006220/*
6221 * FUNCTION: WDA_TSMStatsReqCallback
6222 * send TSM Stats RSP back to PE
6223 */
6224void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
6225{
6226 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6227 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006228 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
6229 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006230
6231 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 if(NULL == pWdaParams)
6234 {
6235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006236 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006237 VOS_ASSERT(0) ;
6238 return ;
6239 }
6240 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006241 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
6242
6243 if(NULL == pGetTsmStatsReqParams)
6244 {
6245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6246 "%s: pGetTsmStatsReqParams received NULL", __func__);
6247 VOS_ASSERT(0);
6248 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6249 vos_mem_free(pWdaParams);
6250 return;
6251 }
6252
6253 pTsmRspParams =
6254 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07006255 if( NULL == pTsmRspParams )
6256 {
6257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006258 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006259 VOS_ASSERT( 0 );
6260 return ;
6261 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006262 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
6263 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
6264 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
6265
Jeff Johnson295189b2012-06-20 16:38:30 -07006266 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
6267 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
6268 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
6269 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
6270 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
6271 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
6272 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
6273 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
6274 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
6275 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006276
6277 /* Assign get tsm stats req req (backup) in to the response */
6278 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
6279
6280 /* free WDI command buffer */
6281 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6282 vos_mem_free(pWdaParams);
6283
Jeff Johnson295189b2012-06-20 16:38:30 -07006284 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006285 return ;
6286}
6287
6288
Jeff Johnson295189b2012-06-20 16:38:30 -07006289/*
6290 * FUNCTION: WDA_ProcessTsmStatsReq
6291 * Request to WDI to get the TSM Stats params.
6292 */
6293VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006294 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07006295{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006296 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006297 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006298 tWDA_ReqParams *pWdaParams = NULL;
6299 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
6300
Jeff Johnson295189b2012-06-20 16:38:30 -07006301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006302 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006303 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
6304 sizeof(WDI_TSMStatsReqParamsType));
6305 if(NULL == wdiTSMReqParam)
6306 {
6307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006308 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006309 VOS_ASSERT(0);
6310 return VOS_STATUS_E_NOMEM;
6311 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006312 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6313 if(NULL == pWdaParams)
6314 {
6315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006316 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006317 VOS_ASSERT(0);
6318 vos_mem_free(wdiTSMReqParam);
6319 return VOS_STATUS_E_NOMEM;
6320 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006321 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
6322 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
6323 pTsmStats->bssId,
6324 sizeof(wpt_macAddr));
6325 wdiTSMReqParam->wdiReqStatusCB = NULL ;
6326
6327 pWdaParams->pWdaContext = pWDA;
6328 /* Store TSM Stats pointer, as this will be used for response */
6329 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006330 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006331 status = WDI_TSMStatsReq(wdiTSMReqParam,
6332 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006333 if(IS_WDI_STATUS_FAILURE(status))
6334 {
6335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6336 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006337 vos_mem_free(pWdaParams);
6338
6339 pGetTsmStatsRspParams =
6340 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
6341 if(NULL == pGetTsmStatsRspParams)
6342 {
6343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6344 "%s: VOS MEM Alloc Failure", __func__);
6345 VOS_ASSERT(0);
6346 vos_mem_free(pTsmStats);
6347 return VOS_STATUS_E_NOMEM;
6348 }
6349 pGetTsmStatsRspParams->staId = pTsmStats->staId;
6350 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
6351 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
6352
6353 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006354 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006355 return CONVERT_WDI2VOS_STATUS(status) ;
6356}
6357#endif
6358/*
6359 * FUNCTION: WDA_SendBeaconParamsCallback
6360 * No need to send any response to PE in this case
6361 */
6362void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
6363{
6364
Jeff Johnson295189b2012-06-20 16:38:30 -07006365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006366 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006367 return ;
6368}
Jeff Johnson295189b2012-06-20 16:38:30 -07006369/*
6370 * FUNCTION: WDA_ProcessSendBeacon
6371 * Request to WDI to send the beacon template to HAL to update the TPE memory and
6372 * start beacon trasmission
6373 */
6374VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
6375 tSendbeaconParams *pSendbeaconParams)
6376{
6377 WDI_Status status = WDI_STATUS_SUCCESS ;
6378 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006380 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006381 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
6382 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
6383 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
6384 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07006385 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
6386 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05306387 /* p2pIeOffset should be atleast greater than timIeOffset */
6388 if ((pSendbeaconParams->p2pIeOffset != 0) &&
6389 (pSendbeaconParams->p2pIeOffset <
6390 pSendbeaconParams->timIeOffset))
6391 {
6392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6393 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
6394 VOS_ASSERT( 0 );
6395 return WDI_STATUS_E_FAILURE;
6396 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006397 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
6398 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07006399 /* Copy the beacon template to local buffer */
6400 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
6401 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
6402 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
6403
Jeff Johnson295189b2012-06-20 16:38:30 -07006404 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
6405 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006406 if(IS_WDI_STATUS_FAILURE(status))
6407 {
6408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6409 "Failure in SEND BEACON REQ Params WDI API" );
6410 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006411 vos_mem_free(pSendbeaconParams);
6412 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006413}
Jeff Johnson295189b2012-06-20 16:38:30 -07006414/*
6415 * FUNCTION: WDA_UpdateProbeRspParamsCallback
6416 * No need to send any response to PE in this case
6417 */
6418void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
6419{
Jeff Johnson295189b2012-06-20 16:38:30 -07006420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006421 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006422 return ;
6423}
6424
Jeff Johnson295189b2012-06-20 16:38:30 -07006425/*
6426 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
6427 * Request to WDI to send the probe response template to HAL to update the TPE memory and
6428 * send probe response
6429 */
6430VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
6431 tSendProbeRespParams *pSendProbeRspParams)
6432{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006433 WDI_Status status = WDI_STATUS_SUCCESS;
6434 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
6435 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006437 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006438
6439 if (!wdiSendProbeRspParam)
6440 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
6441
Jeff Johnson295189b2012-06-20 16:38:30 -07006442 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006443 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07006444 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006445 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07006446 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07006447 /* Copy the Probe Response template to local buffer */
6448 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006449 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07006450 pSendProbeRspParams->pProbeRespTemplate,
6451 pSendProbeRspParams->probeRespTemplateLen);
6452 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006453 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07006454 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
6455 WDI_PROBE_REQ_BITMAP_IE_LEN);
6456
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006457 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006458
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006459 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07006460 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006461 if(IS_WDI_STATUS_FAILURE(status))
6462 {
6463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6464 "Failure in SEND Probe RSP Params WDI API" );
6465 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006466 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006467 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006468 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006469}
Jeff Johnson295189b2012-06-20 16:38:30 -07006470#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
6471/*
6472 * FUNCTION: WDA_SetMaxTxPowerCallBack
6473 * send the response to PE with power value received from WDI
6474 */
6475void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6476 void* pUserData)
6477{
6478 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6479 tWDA_CbContext *pWDA = NULL;
6480 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
6481
6482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006483 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006484 if(NULL == pWdaParams)
6485 {
6486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006487 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006488 VOS_ASSERT(0) ;
6489 return ;
6490 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006491 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6492 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006493 if( NULL == pMaxTxPowerParams )
6494 {
6495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006496 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07006497 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006498 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6499 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006500 return ;
6501 }
Jeff Johnsone7245742012-09-05 17:12:55 -07006502
Jeff Johnson295189b2012-06-20 16:38:30 -07006503
6504 /*need to free memory for the pointers used in the
6505 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07006506 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6507 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006508 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07006509
Jeff Johnson295189b2012-06-20 16:38:30 -07006510
6511 /* send response to UMAC*/
6512 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
6513
6514 return;
6515}
Jeff Johnson295189b2012-06-20 16:38:30 -07006516/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006517 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07006518 * Request to WDI to send set Max Tx Power Request
6519 */
6520 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
6521 tMaxTxPowerParams *MaxTxPowerParams)
6522{
6523 WDI_Status status = WDI_STATUS_SUCCESS;
6524 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
6525 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006526
Jeff Johnson295189b2012-06-20 16:38:30 -07006527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006528 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006529
Jeff Johnson295189b2012-06-20 16:38:30 -07006530 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
6531 sizeof(WDI_SetMaxTxPowerParamsType));
6532 if(NULL == wdiSetMaxTxPowerParams)
6533 {
6534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006535 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006536 VOS_ASSERT(0);
6537 return VOS_STATUS_E_NOMEM;
6538 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006539 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6540 if(NULL == pWdaParams)
6541 {
6542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006543 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006544 vos_mem_free(wdiSetMaxTxPowerParams);
6545 VOS_ASSERT(0);
6546 return VOS_STATUS_E_NOMEM;
6547 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006548 /* Copy.Max.Tx.Power Params to WDI structure */
6549 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
6550 MaxTxPowerParams->bssId,
6551 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006552 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
6553 MaxTxPowerParams->selfStaMacAddr,
6554 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006555 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
6556 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07006557 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006558 pWdaParams->pWdaContext = pWDA;
6559 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006560 /* store Params pass it to WDI */
6561 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006562 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
6563 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006564 if(IS_WDI_STATUS_FAILURE(status))
6565 {
6566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6567 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
6568 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6569 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006570 /* send response to UMAC*/
6571 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006572 }
6573 return CONVERT_WDI2VOS_STATUS(status);
6574
6575}
Jeff Johnson295189b2012-06-20 16:38:30 -07006576#endif
schang86c22c42013-03-13 18:41:24 -07006577
6578/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07006579 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
6580 * send the response to PE with power value received from WDI
6581 */
6582void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
6583 *pwdiSetMaxTxPowerPerBandRsp,
6584 void* pUserData)
6585{
6586 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6587 tWDA_CbContext *pWDA = NULL;
6588 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
6589
6590 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6591 "<------ %s ", __func__);
6592 if (NULL == pWdaParams)
6593 {
6594 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6595 "%s: pWdaParams received NULL", __func__);
6596 VOS_ASSERT(0);
6597 return ;
6598 }
6599 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6600 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
6601 if ( NULL == pMxTxPwrPerBandParams )
6602 {
6603 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6604 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
6605 VOS_ASSERT(0);
6606 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6607 vos_mem_free(pWdaParams);
6608 return;
6609 }
6610
6611 /*need to free memory for the pointers used in the
6612 WDA Process.Set Max Tx Power Req function*/
6613 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6614 vos_mem_free(pWdaParams);
6615 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
6616
6617 /* send response to UMAC*/
6618 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
6619 pMxTxPwrPerBandParams, 0);
6620
6621 return;
6622}
6623
6624/*
6625 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
6626 * Request to WDI to send set Max Tx Power Per band Request
6627 */
6628 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
6629 tMaxTxPowerPerBandParams
6630 *MaxTxPowerPerBandParams)
6631{
6632 WDI_Status status = WDI_STATUS_SUCCESS;
6633 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
6634 tWDA_ReqParams *pWdaParams = NULL;
6635
6636 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6637 "------> %s ", __func__);
6638
6639 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
6640 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
6641
6642 if (NULL == wdiSetMxTxPwrPerBandParams)
6643 {
6644 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6645 "%s: VOS MEM Alloc Failure", __func__);
6646 VOS_ASSERT(0);
6647 return VOS_STATUS_E_NOMEM;
6648 }
6649 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6650 if (NULL == pWdaParams)
6651 {
6652 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6653 "%s: VOS MEM Alloc Failure", __func__);
6654 vos_mem_free(wdiSetMxTxPwrPerBandParams);
6655 VOS_ASSERT(0);
6656 return VOS_STATUS_E_NOMEM;
6657 }
6658 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
6659 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
6660 MaxTxPowerPerBandParams->bandInfo;
6661 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
6662 MaxTxPowerPerBandParams->power;
6663 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
6664 pWdaParams->pWdaContext = pWDA;
6665 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
6666 /* store Params pass it to WDI */
6667 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
6668 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
6669 WDA_SetMaxTxPowerPerBandCallBack,
6670 pWdaParams);
6671 if (IS_WDI_STATUS_FAILURE(status))
6672 {
6673 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6674 "Failure in SET MAX TX Power REQ Params WDI API,"
6675 " free all the memory");
6676 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6677 vos_mem_free(pWdaParams);
6678 /* send response to UMAC*/
6679 WDA_SendMsg(pWDA,
6680 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
6681 MaxTxPowerPerBandParams, 0);
6682 }
6683 return CONVERT_WDI2VOS_STATUS(status);
6684}
6685
6686/*
schang86c22c42013-03-13 18:41:24 -07006687 * FUNCTION: WDA_SetTxPowerCallBack
6688 * send the response to PE with power value received from WDI
6689 */
6690void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6691 void* pUserData)
6692{
6693 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6694 tWDA_CbContext *pWDA = NULL;
6695 tSirSetTxPowerReq *pTxPowerParams = NULL;
6696
6697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6698 "<------ %s ", __func__);
6699 if(NULL == pWdaParams)
6700 {
6701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6702 "%s: pWdaParams received NULL", __func__);
6703 VOS_ASSERT(0) ;
6704 return ;
6705 }
6706 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6707 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
6708 if(NULL == pTxPowerParams)
6709 {
6710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6711 "%s: pTxPowerParams received NULL " ,__func__);
6712 VOS_ASSERT(0);
6713 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6714 vos_mem_free(pWdaParams);
6715 return ;
6716 }
6717
6718 /*need to free memory for the pointers used in the
6719 WDA Process.Set Max Tx Power Req function*/
6720 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6721 vos_mem_free(pWdaParams);
6722
6723 /* send response to UMAC*/
6724 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
6725 return;
6726}
6727
6728/*
6729 * FUNCTION: WDA_ProcessSetTxPowerReq
6730 * Request to WDI to send set Tx Power Request
6731 */
6732 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
6733 tSirSetTxPowerReq *txPowerParams)
6734{
6735 WDI_Status status = WDI_STATUS_SUCCESS;
6736 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
6737 tWDA_ReqParams *pWdaParams = NULL;
6738
6739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6740 "------> %s ", __func__);
6741
6742 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
6743 sizeof(WDI_SetTxPowerParamsType));
6744 if(NULL == wdiSetTxPowerParams)
6745 {
6746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6747 "%s: VOS MEM Alloc Failure", __func__);
6748 VOS_ASSERT(0);
6749 return VOS_STATUS_E_NOMEM;
6750 }
6751 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6752 if(NULL == pWdaParams)
6753 {
6754 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6755 "%s: VOS MEM Alloc Failure", __func__);
6756 vos_mem_free(wdiSetTxPowerParams);
6757 VOS_ASSERT(0);
6758 return VOS_STATUS_E_NOMEM;
6759 }
6760 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
6761 txPowerParams->bssIdx;
6762 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
6763 txPowerParams->mwPower;
6764 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
6765 pWdaParams->pWdaContext = pWDA;
6766 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
6767 /* store Params pass it to WDI */
6768 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
6769 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
6770 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
6771 if(IS_WDI_STATUS_FAILURE(status))
6772 {
6773 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6774 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
6775 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6776 vos_mem_free(pWdaParams);
6777 /* send response to UMAC*/
6778 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
6779 }
6780 return CONVERT_WDI2VOS_STATUS(status);
6781}
6782
Jeff Johnson295189b2012-06-20 16:38:30 -07006783/*
6784 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
6785 * Free the memory. No need to send any response to PE in this case
6786 */
6787void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
6788{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006789 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6790
Jeff Johnson295189b2012-06-20 16:38:30 -07006791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006792 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006793
6794 if(NULL == pWdaParams)
6795 {
6796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006797 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006798 VOS_ASSERT(0) ;
6799 return ;
6800 }
6801
6802 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6803 vos_mem_free(pWdaParams->wdaMsgParam) ;
6804 vos_mem_free(pWdaParams);
6805
Jeff Johnson295189b2012-06-20 16:38:30 -07006806 /*
6807 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
6808 * so just free the request param here
6809 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006810 return ;
6811}
6812
Jeff Johnson295189b2012-06-20 16:38:30 -07006813/*
6814 * FUNCTION: WDA_ProcessSetP2PGONOAReq
6815 * Request to WDI to set the P2P Group Owner Notice of Absence Req
6816 */
6817VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
6818 tP2pPsParams *pP2pPsConfigParams)
6819{
6820 WDI_Status status = WDI_STATUS_SUCCESS ;
6821 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
6822 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
6823 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006824 tWDA_ReqParams *pWdaParams = NULL;
6825
Jeff Johnson295189b2012-06-20 16:38:30 -07006826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006827 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006828 if(NULL == wdiSetP2PGONOAReqParam)
6829 {
6830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006831 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006832 VOS_ASSERT(0);
6833 return VOS_STATUS_E_NOMEM;
6834 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006835
6836 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6837 if(NULL == pWdaParams)
6838 {
6839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006840 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006841 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006842 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006843 VOS_ASSERT(0);
6844 return VOS_STATUS_E_NOMEM;
6845 }
6846
Jeff Johnson295189b2012-06-20 16:38:30 -07006847 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
6848 pP2pPsConfigParams->opp_ps;
6849 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
6850 pP2pPsConfigParams->ctWindow;
6851 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
6852 pP2pPsConfigParams->count;
6853 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
6854 pP2pPsConfigParams->duration;
6855 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
6856 pP2pPsConfigParams->interval;
6857 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
6858 pP2pPsConfigParams->single_noa_duration;
6859 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
6860 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006861
Jeff Johnson295189b2012-06-20 16:38:30 -07006862 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
6863 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006864 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
6865
Jeff Johnson295189b2012-06-20 16:38:30 -07006866 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006867 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
6868 pWdaParams->pWdaContext = pWDA;
6869
Jeff Johnson295189b2012-06-20 16:38:30 -07006870 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006871 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
6872
Jeff Johnson295189b2012-06-20 16:38:30 -07006873 if(IS_WDI_STATUS_FAILURE(status))
6874 {
6875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6876 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006877 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6878 vos_mem_free(pWdaParams->wdaMsgParam);
6879 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006880 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006881 return CONVERT_WDI2VOS_STATUS(status);
6882
Jeff Johnson295189b2012-06-20 16:38:30 -07006883}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306884
6885#ifdef FEATURE_WLAN_TDLS
6886/*
6887 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
6888 * Free the memory. No need to send any response to PE in this case
6889 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306890void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
6891 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306892{
6893 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6894 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306895 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306896
6897
6898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6899 "<------ %s " ,__func__);
6900 if(NULL == pWdaParams)
6901 {
6902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6903 "%s: pWdaParams received NULL", __func__);
6904 VOS_ASSERT(0) ;
6905 return ;
6906 }
6907 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6908
6909 if(NULL == pWdaParams)
6910 {
6911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6912 "%s: pWdaParams received NULL", __func__);
6913 VOS_ASSERT(0) ;
6914 return ;
6915 }
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306916 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
6917 if( NULL == pTdlsLinkEstablishParams )
6918 {
6919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6920 "%s: pTdlsLinkEstablishParams "
6921 "received NULL " ,__func__);
6922 VOS_ASSERT(0);
6923 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6924 vos_mem_free(pWdaParams);
6925 return ;
6926 }
6927 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
6928 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306929 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306930 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306931 /* send response to UMAC*/
6932 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
6933
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306934 return ;
6935}
6936
6937VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
6938 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
6939{
6940 WDI_Status status = WDI_STATUS_SUCCESS ;
6941 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
6942 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
6943 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
6944 tWDA_ReqParams *pWdaParams = NULL;
6945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6946 "------> %s " ,__func__);
6947 if(NULL == wdiSetTDLSLinkEstablishReqParam)
6948 {
6949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6950 "%s: VOS MEM Alloc Failure", __func__);
6951 VOS_ASSERT(0);
6952 return VOS_STATUS_E_NOMEM;
6953 }
6954 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6955 if(NULL == pWdaParams)
6956 {
6957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6958 "%s: VOS MEM Alloc Failure", __func__);
6959 vos_mem_free(pTdlsLinkEstablishParams);
6960 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
6961 VOS_ASSERT(0);
6962 return VOS_STATUS_E_NOMEM;
6963 }
6964 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306965 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306966 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306967 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306968 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306969 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306970 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306971 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306972 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306973 pTdlsLinkEstablishParams->isBufsta;
Naresh Jayaramc7cbd782014-02-04 17:38:23 +05306974 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsOffChannelSupported =
6975 pTdlsLinkEstablishParams->isOffChannelSupported;
6976
6977 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannels,
6978 pTdlsLinkEstablishParams->validChannels,
6979 pTdlsLinkEstablishParams->validChannelsLen);
6980
6981 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannelsLen =
6982 pTdlsLinkEstablishParams->validChannelsLen;
6983
6984 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClasses,
6985 pTdlsLinkEstablishParams->validOperClasses,
6986 pTdlsLinkEstablishParams->validOperClassesLen);
6987 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClassesLen =
6988 pTdlsLinkEstablishParams->validOperClassesLen;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306989
6990 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
6991 /* Store msg pointer from PE, as this will be used for response */
6992 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
6993 /* store Params pass it to WDI */
6994 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
6995 pWdaParams->pWdaContext = pWDA;
6996
6997 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
6998 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
6999 WDA_SetTDLSLinkEstablishReqParamsCallback,
7000 pWdaParams);
7001 if(IS_WDI_STATUS_FAILURE(status))
7002 {
7003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7004 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
7005 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7006 vos_mem_free(pWdaParams->wdaMsgParam);
7007 vos_mem_free(pWdaParams);
7008 }
7009 return CONVERT_WDI2VOS_STATUS(status);
7010}
7011#endif
7012
7013
Jeff Johnson295189b2012-06-20 16:38:30 -07007014#ifdef WLAN_FEATURE_VOWIFI_11R
7015/*
7016 * FUNCTION: WDA_AggrAddTSReqCallback
7017 * send ADD AGGREGATED TS RSP back to PE
7018 */
7019void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
7020{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007021 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7022 tWDA_CbContext *pWDA;
7023 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007024 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07007025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007026 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007027 if(NULL == pWdaParams)
7028 {
7029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007030 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007031 VOS_ASSERT(0) ;
7032 return ;
7033 }
7034
7035 pWDA = pWdaParams->pWdaContext;
7036 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007037
7038 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
7039 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007040 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007041 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007042 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007043
7044 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7045 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007046 return ;
7047}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07007048/*
7049 * FUNCTION: WDA_ProcessAddTSReq
7050 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
7051 */
7052VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
7053 tAggrAddTsParams *pAggrAddTsReqParams)
7054{
7055 WDI_Status status = WDI_STATUS_SUCCESS ;
7056 int i;
7057 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007058 tWDA_ReqParams *pWdaParams = NULL;
7059
7060
Jeff Johnson295189b2012-06-20 16:38:30 -07007061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007062 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007063 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
7064 sizeof(WDI_AggrAddTSReqParamsType)) ;
7065 if(NULL == wdiAggrAddTSReqParam)
7066 {
7067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007068 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007069 VOS_ASSERT(0);
7070 return VOS_STATUS_E_NOMEM;
7071 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007072
7073
7074 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7075 if(NULL == pWdaParams)
7076 {
7077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007078 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007079 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007080 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007081 VOS_ASSERT(0);
7082 return VOS_STATUS_E_NOMEM;
7083 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007084 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
7085 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
7086 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007087 for( i = 0; i < WDI_MAX_NO_AC; i++ )
7088 {
7089 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
7090 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
7091 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07007092 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
7093 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
7094 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
7095 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
7096 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
7097 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
7098 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
7099 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
7100 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
7101 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
7102 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
7103 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
7104 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
7105 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
7106 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
7107 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07007108 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
7109 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07007110 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
7111 pAggrAddTsReqParams->tspec[i].nomMsduSz;
7112 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
7113 pAggrAddTsReqParams->tspec[i].maxMsduSz;
7114 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
7115 pAggrAddTsReqParams->tspec[i].minSvcInterval;
7116 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
7117 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
7118 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
7119 pAggrAddTsReqParams->tspec[i].inactInterval;
7120 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
7121 pAggrAddTsReqParams->tspec[i].suspendInterval;
7122 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
7123 pAggrAddTsReqParams->tspec[i].svcStartTime;
7124 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
7125 pAggrAddTsReqParams->tspec[i].minDataRate;
7126 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
7127 pAggrAddTsReqParams->tspec[i].meanDataRate;
7128 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
7129 pAggrAddTsReqParams->tspec[i].peakDataRate;
7130 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
7131 pAggrAddTsReqParams->tspec[i].maxBurstSz;
7132 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
7133 pAggrAddTsReqParams->tspec[i].delayBound;
7134 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
7135 pAggrAddTsReqParams->tspec[i].minPhyRate;
7136 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
7137 pAggrAddTsReqParams->tspec[i].surplusBw;
7138 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
7139 pAggrAddTsReqParams->tspec[i].mediumTime;
7140 }
7141
7142 /* TODO: tAggrAddTsParams doesn't have the following fields */
7143#if 0
7144 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
7145 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
7146 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
7147 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
7148#endif
7149 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
7150
7151 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007152 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007153 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007154 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
7155
7156 pWdaParams->pWdaContext = pWDA;
7157
Jeff Johnson295189b2012-06-20 16:38:30 -07007158 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007159 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
7160
Jeff Johnson295189b2012-06-20 16:38:30 -07007161 if(IS_WDI_STATUS_FAILURE(status))
7162 {
7163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7164 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007165 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7166 vos_mem_free(pWdaParams);
7167
7168 /* send the failure response back to PE*/
7169 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
7170 {
7171 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
7172 }
7173
7174 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
7175 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007176 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007177 return CONVERT_WDI2VOS_STATUS(status) ;
7178}
7179#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07007180/*
7181 * FUNCTION: WDA_EnterImpsReqCallback
7182 * send Enter IMPS RSP back to PE
7183 */
7184void WDA_EnterImpsReqCallback(WDI_Status status, void* pUserData)
7185{
7186 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007188 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007189 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007190 return ;
7191}
Jeff Johnson295189b2012-06-20 16:38:30 -07007192/*
7193 * FUNCTION: WDA_ProcessEnterImpsReq
7194 * Request to WDI to Enter IMPS power state.
7195 */
7196VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
7197{
7198 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007200 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007201 status = WDI_EnterImpsReq((WDI_EnterImpsRspCb)WDA_EnterImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007202 if(IS_WDI_STATUS_FAILURE(status))
7203 {
7204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7205 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007206 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007207 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007208 return CONVERT_WDI2VOS_STATUS(status) ;
7209}
Jeff Johnson295189b2012-06-20 16:38:30 -07007210/*
7211 * FUNCTION: WDA_ExitImpsReqCallback
7212 * send Exit IMPS RSP back to PE
7213 */
7214void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
7215{
7216 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007218 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007219 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007220 return ;
7221}
Jeff Johnson295189b2012-06-20 16:38:30 -07007222/*
7223 * FUNCTION: WDA_ProcessExitImpsReq
7224 * Request to WDI to Exit IMPS power state.
7225 */
7226VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
7227{
7228 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007230 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007231 status = WDI_ExitImpsReq((WDI_ExitImpsRspCb)WDA_ExitImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007232 if(IS_WDI_STATUS_FAILURE(status))
7233 {
7234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7235 "Failure in Exit IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007236 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007237 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007238 return CONVERT_WDI2VOS_STATUS(status) ;
7239}
Jeff Johnson295189b2012-06-20 16:38:30 -07007240/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007241 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007242 * send Enter BMPS RSP back to PE
7243 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007244void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007245{
7246 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7247 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007248 tEnterBmpsParams *pEnterBmpsRspParams;
7249
Jeff Johnson295189b2012-06-20 16:38:30 -07007250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007251 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007252 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: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007256 VOS_ASSERT(0) ;
7257 return ;
7258 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007259
7260 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7261 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
7262
7263 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007264 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007265
7266 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007267 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007268 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
7269
Jeff Johnson295189b2012-06-20 16:38:30 -07007270 return ;
7271}
Jeff Johnson295189b2012-06-20 16:38:30 -07007272/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007273 * FUNCTION: WDA_EnterBmpsReqCallback
7274 * Free memory and send Enter BMPS RSP back to PE.
7275 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
7276 */
7277void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7278{
7279 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7280 tWDA_CbContext *pWDA;
7281 tEnterBmpsParams *pEnterBmpsRspParams;
7282
7283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7284 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7285
7286 if(NULL == pWdaParams)
7287 {
7288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7289 "%s: pWdaParams received NULL", __func__);
7290 VOS_ASSERT(0);
7291 return;
7292 }
7293
7294 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7295 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
7296 pEnterBmpsRspParams->status = wdiStatus;
7297
7298 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7299 {
7300 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7301 vos_mem_free(pWdaParams);
7302 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
7303 }
7304
7305 return;
7306}
7307/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007308 * FUNCTION: WDA_ProcessEnterBmpsReq
7309 * Request to WDI to Enter BMPS power state.
7310 */
7311VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
7312 tEnterBmpsParams *pEnterBmpsReqParams)
7313{
7314 WDI_Status status = WDI_STATUS_SUCCESS;
7315 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
7316 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007318 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007319 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
7320 {
7321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007322 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007323 VOS_ASSERT(0);
7324 return VOS_STATUS_E_FAILURE;
7325 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007326 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
7327 if (NULL == wdiEnterBmpsReqParams)
7328 {
7329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007330 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007331 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007332 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
7333 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007334 return VOS_STATUS_E_NOMEM;
7335 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007336 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7337 if (NULL == pWdaParams)
7338 {
7339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007340 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007341 VOS_ASSERT(0);
7342 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007343 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
7344 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007345 return VOS_STATUS_E_NOMEM;
7346 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007347 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
7348 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
7349 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
7350 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Jeff Johnson295189b2012-06-20 16:38:30 -07007351 // For CCX and 11R Roaming
7352 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
7353 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
7354 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007355 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
7356 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007357
Jeff Johnson295189b2012-06-20 16:38:30 -07007358 /* Store param pointer as passed in by caller */
7359 /* store Params pass it to WDI */
7360 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007361 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007362 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007363 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007364 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007365 if (IS_WDI_STATUS_FAILURE(status))
7366 {
7367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7368 "Failure in Enter BMPS REQ WDI API, free all the memory" );
7369 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007370 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007371 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007372 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007373 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007374 return CONVERT_WDI2VOS_STATUS(status);
7375}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007376
7377
7378static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
7379 WDI_Status wdiStatus,
7380 tExitBmpsParams *pExitBmpsReqParams)
7381{
7382 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
7383
7384 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
7385}
7386
7387
Jeff Johnson295189b2012-06-20 16:38:30 -07007388/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007389 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007390 * send Exit BMPS RSP back to PE
7391 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007392void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007393{
7394 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7395 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007396 tExitBmpsParams *pExitBmpsRspParams;
7397
Jeff Johnson295189b2012-06-20 16:38:30 -07007398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007399 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007400 if(NULL == pWdaParams)
7401 {
7402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007403 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007404 VOS_ASSERT(0) ;
7405 return ;
7406 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007407
7408 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7409 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
7410
7411 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007412 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007413
Jeff Johnson295189b2012-06-20 16:38:30 -07007414 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7415 vos_mem_free(pWdaParams) ;
7416
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007417 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007418 return ;
7419}
Jeff Johnson295189b2012-06-20 16:38:30 -07007420/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007421 * FUNCTION: WDA_ExitBmpsReqCallback
7422 * Free memory and send Exit BMPS RSP back to PE.
7423 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
7424 */
7425void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7426{
7427 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7428 tWDA_CbContext *pWDA;
7429 tExitBmpsParams *pExitBmpsRspParams;
7430
7431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7432 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7433
7434 if(NULL == pWdaParams)
7435 {
7436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7437 "%s: pWdaParams received NULL", __func__);
7438 VOS_ASSERT(0);
7439 return;
7440 }
7441
7442 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7443 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
7444 pExitBmpsRspParams->status = wdiStatus;
7445
7446 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7447 {
7448 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7449 vos_mem_free(pWdaParams);
7450 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
7451 }
7452
7453 return;
7454}
7455/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007456 * FUNCTION: WDA_ProcessExitBmpsReq
7457 * Request to WDI to Exit BMPS power state.
7458 */
7459VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
7460 tExitBmpsParams *pExitBmpsReqParams)
7461{
7462 WDI_Status status = WDI_STATUS_SUCCESS ;
7463 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
7464 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
7465 sizeof(WDI_ExitBmpsReqParamsType)) ;
7466 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007468 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007469 if(NULL == wdiExitBmpsReqParams)
7470 {
7471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007472 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007473 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007474 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007475 return VOS_STATUS_E_NOMEM;
7476 }
7477 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7478 if(NULL == pWdaParams)
7479 {
7480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007481 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007482 VOS_ASSERT(0);
7483 vos_mem_free(wdiExitBmpsReqParams);
7484 return VOS_STATUS_E_NOMEM;
7485 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007486 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07007487
7488 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
7489
Yue Ma7f44bbe2013-04-12 11:47:39 -07007490 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
7491 wdiExitBmpsReqParams->pUserData = pWdaParams;
7492
Jeff Johnson295189b2012-06-20 16:38:30 -07007493 /* Store param pointer as passed in by caller */
7494 /* store Params pass it to WDI */
7495 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
7496 pWdaParams->pWdaContext = pWDA;
7497 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007498 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007499 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007500 if(IS_WDI_STATUS_FAILURE(status))
7501 {
7502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7503 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007504 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7505 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007506 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007507 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007508 return CONVERT_WDI2VOS_STATUS(status) ;
7509}
Jeff Johnson295189b2012-06-20 16:38:30 -07007510/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007511 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007512 * send Enter UAPSD RSP back to PE
7513 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007514void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007515{
7516 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7517 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007518 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007520 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007521 if(NULL == pWdaParams)
7522 {
7523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007524 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007525 VOS_ASSERT(0) ;
7526 return ;
7527 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007528
7529 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7530 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
7531
7532 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007533 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007534
Jeff Johnson295189b2012-06-20 16:38:30 -07007535 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7536 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007537 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007538 return ;
7539}
Jeff Johnson295189b2012-06-20 16:38:30 -07007540/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007541 * FUNCTION: WDA_EnterUapsdReqCallback
7542 * Free memory and send Enter UAPSD RSP back to PE.
7543 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
7544 */
7545void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
7546{
7547 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7548 tWDA_CbContext *pWDA;
7549 tUapsdParams *pEnterUapsdRsqParams;
7550
7551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7552 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7553
7554 if(NULL == pWdaParams)
7555 {
7556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7557 "%s: pWdaParams received NULL", __func__);
7558 VOS_ASSERT(0);
7559 return;
7560 }
7561
7562 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7563 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
7564 pEnterUapsdRsqParams->status = wdiStatus;
7565
7566 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7567 {
7568 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7569 vos_mem_free(pWdaParams);
7570 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
7571 }
7572
7573 return;
7574}
7575/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007576 * FUNCTION: WDA_ProcessEnterUapsdReq
7577 * Request to WDI to Enter UAPSD power state.
7578 */
7579VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
7580 tUapsdParams *pEnterUapsdReqParams)
7581{
7582 WDI_Status status = WDI_STATUS_SUCCESS ;
7583 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
7584 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
7585 sizeof(WDI_EnterUapsdReqParamsType)) ;
7586 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007588 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007589 if(NULL == wdiEnterUapsdReqParams)
7590 {
7591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007592 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007593 VOS_ASSERT(0);
7594 return VOS_STATUS_E_NOMEM;
7595 }
7596 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7597 if(NULL == pWdaParams)
7598 {
7599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007600 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007601 VOS_ASSERT(0);
7602 vos_mem_free(wdiEnterUapsdReqParams);
7603 return VOS_STATUS_E_NOMEM;
7604 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007605 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
7606 pEnterUapsdReqParams->beDeliveryEnabled;
7607 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
7608 pEnterUapsdReqParams->beTriggerEnabled;
7609 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
7610 pEnterUapsdReqParams->bkDeliveryEnabled;
7611 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
7612 pEnterUapsdReqParams->bkTriggerEnabled;
7613 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
7614 pEnterUapsdReqParams->viDeliveryEnabled;
7615 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
7616 pEnterUapsdReqParams->viTriggerEnabled;
7617 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
7618 pEnterUapsdReqParams->voDeliveryEnabled;
7619 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
7620 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07007621 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007622
Yue Ma7f44bbe2013-04-12 11:47:39 -07007623 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
7624 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007625
Jeff Johnson295189b2012-06-20 16:38:30 -07007626 /* Store param pointer as passed in by caller */
7627 /* store Params pass it to WDI */
7628 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
7629 pWdaParams->pWdaContext = pWDA;
7630 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007631 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007632 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007633 if(IS_WDI_STATUS_FAILURE(status))
7634 {
7635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7636 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
7637 vos_mem_free(pWdaParams->wdaMsgParam) ;
7638 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7639 vos_mem_free(pWdaParams) ;
7640 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007641 return CONVERT_WDI2VOS_STATUS(status) ;
7642}
Jeff Johnson295189b2012-06-20 16:38:30 -07007643/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007644 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007645 * send Exit UAPSD RSP back to PE
7646 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007647void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007648{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007649
7650 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7651 tWDA_CbContext *pWDA;
7652 tExitUapsdParams *pExitUapsdRspParams;
7653
Jeff Johnson295189b2012-06-20 16:38:30 -07007654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007655 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007656 if(NULL == pWdaParams)
7657 {
7658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007659 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007660 VOS_ASSERT(0);
7661 return;
7662 }
7663
7664 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7665 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
7666
7667 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007668 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007669
7670 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7671 vos_mem_free(pWdaParams) ;
7672
7673 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007674 return ;
7675}
Jeff Johnson295189b2012-06-20 16:38:30 -07007676/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007677 * FUNCTION: WDA_ExitUapsdReqCallback
7678 * Free memory and send Exit UAPSD RSP back to PE.
7679 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
7680 */
7681void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
7682{
7683 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7684 tWDA_CbContext *pWDA;
7685 tExitUapsdParams *pExitUapsdRspParams;
7686
7687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7688 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7689
7690 if(NULL == pWdaParams)
7691 {
7692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7693 "%s: pWdaParams received NULL", __func__);
7694 VOS_ASSERT(0);
7695 return;
7696 }
7697
7698 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7699 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
7700 pExitUapsdRspParams->status = wdiStatus;
7701
7702 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7703 {
7704 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7705 vos_mem_free(pWdaParams);
7706 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
7707 }
7708
7709 return;
7710}
7711/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007712 * FUNCTION: WDA_ProcessExitUapsdReq
7713 * Request to WDI to Exit UAPSD power state.
7714 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007715VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
7716 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007717{
7718 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007719 tWDA_ReqParams *pWdaParams ;
7720 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
7721 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
7722 sizeof(WDI_ExitUapsdReqParamsType)) ;
7723
Jeff Johnson295189b2012-06-20 16:38:30 -07007724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007725 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007726
7727 if(NULL == wdiExitUapsdReqParams)
7728 {
7729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007730 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007731 VOS_ASSERT(0);
7732 return VOS_STATUS_E_NOMEM;
7733 }
7734 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7735 if(NULL == pWdaParams)
7736 {
7737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007738 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007739 VOS_ASSERT(0);
7740 vos_mem_free(wdiExitUapsdReqParams);
7741 return VOS_STATUS_E_NOMEM;
7742 }
7743
7744 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007745 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
7746 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007747
7748 /* Store param pointer as passed in by caller */
7749 /* store Params pass it to WDI */
7750 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
7751 pWdaParams->pWdaContext = pWDA;
7752 pWdaParams->wdaMsgParam = pExitUapsdParams;
7753
Yue Ma7f44bbe2013-04-12 11:47:39 -07007754 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007755 if(IS_WDI_STATUS_FAILURE(status))
7756 {
7757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7758 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007759 vos_mem_free(pWdaParams->wdaMsgParam) ;
7760 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7761 vos_mem_free(pWdaParams) ;
7762
Jeff Johnson295189b2012-06-20 16:38:30 -07007763 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007764 return CONVERT_WDI2VOS_STATUS(status) ;
7765}
7766
Jeff Johnson295189b2012-06-20 16:38:30 -07007767/*
7768 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
7769 *
7770 */
7771void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
7772{
7773 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007775 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007776 if(NULL == pWdaParams)
7777 {
7778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007779 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007780 VOS_ASSERT(0) ;
7781 return ;
7782 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007783 if( pWdaParams != NULL )
7784 {
7785 if( pWdaParams->wdaWdiApiMsgParam != NULL )
7786 {
7787 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7788 }
7789 if( pWdaParams->wdaMsgParam != NULL )
7790 {
7791 vos_mem_free(pWdaParams->wdaMsgParam) ;
7792 }
7793 vos_mem_free(pWdaParams) ;
7794 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007795 return ;
7796}
Jeff Johnson295189b2012-06-20 16:38:30 -07007797/*
7798 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
7799 * Request to WDI to set the power save params at start.
7800 */
7801VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
7802 tSirPowerSaveCfg *pPowerSaveCfg)
7803{
7804 WDI_Status status = WDI_STATUS_SUCCESS ;
7805 tHalCfg *tlvStruct = NULL ;
7806 tANI_U8 *tlvStructStart = NULL ;
7807 v_PVOID_t *configParam;
7808 tANI_U32 configParamSize;
7809 tANI_U32 *configDataValue;
7810 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
7811 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007813 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007814 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
7815 {
7816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007817 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007818 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007819 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007820 return VOS_STATUS_E_FAILURE;
7821 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007822 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
7823 if (NULL == wdiPowerSaveCfg)
7824 {
7825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007826 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007827 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007828 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007829 return VOS_STATUS_E_NOMEM;
7830 }
7831 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7832 if(NULL == pWdaParams)
7833 {
7834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007835 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007836 VOS_ASSERT(0);
7837 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007838 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007839 return VOS_STATUS_E_NOMEM;
7840 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007841 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
7842 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07007843 if(NULL == configParam)
7844 {
7845 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007846 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007847 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07007848 vos_mem_free(pWdaParams);
7849 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007850 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007851 return VOS_STATUS_E_NOMEM;
7852 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007853 vos_mem_set(configParam, configParamSize, 0);
7854 wdiPowerSaveCfg->pConfigBuffer = configParam;
7855 tlvStruct = (tHalCfg *)configParam;
7856 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007857 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
7858 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
7859 tlvStruct->length = sizeof(tANI_U32);
7860 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7861 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07007862 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7863 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007864 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
7865 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
7866 tlvStruct->length = sizeof(tANI_U32);
7867 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7868 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07007869 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7870 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007871 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
7872 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
7873 tlvStruct->length = sizeof(tANI_U32);
7874 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7875 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07007876 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7877 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007878 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
7879 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
7880 tlvStruct->length = sizeof(tANI_U32);
7881 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7882 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07007883 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7884 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007885 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
7886 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
7887 tlvStruct->length = sizeof(tANI_U32);
7888 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7889 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07007890 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7891 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007892 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
7893 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
7894 tlvStruct->length = sizeof(tANI_U32);
7895 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7896 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07007897 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7898 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007899 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
7900 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
7901 tlvStruct->length = sizeof(tANI_U32);
7902 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7903 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07007904 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7905 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007906 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
7907 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
7908 tlvStruct->length = sizeof(tANI_U32);
7909 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7910 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
7911 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7912 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007913 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
7914 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
7915 tlvStruct->length = sizeof(tANI_U32);
7916 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7917 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
7918 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7919 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007920 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
7921 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
7922 tlvStruct->length = sizeof(tANI_U32);
7923 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7924 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07007925 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7926 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007927 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
7928 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
7929 tlvStruct->length = sizeof(tANI_U32);
7930 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7931 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07007932 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7933 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007934 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007935 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007936 /* store Params pass it to WDI */
7937 pWdaParams->wdaMsgParam = configParam;
7938 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
7939 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007940 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
7941 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007942 if(IS_WDI_STATUS_FAILURE(status))
7943 {
7944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7945 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
7946 vos_mem_free(pWdaParams->wdaMsgParam);
7947 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7948 vos_mem_free(pWdaParams);
7949 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007950 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007951 return CONVERT_WDI2VOS_STATUS(status);
7952}
Jeff Johnson295189b2012-06-20 16:38:30 -07007953/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007954 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007955 *
7956 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007957void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007958{
Yue Ma7f44bbe2013-04-12 11:47:39 -07007959 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7960
Jeff Johnson295189b2012-06-20 16:38:30 -07007961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007962 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -07007963
7964 if(NULL == pWdaParams)
7965 {
7966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7967 "%s: pWdaParams received NULL", __func__);
7968 VOS_ASSERT(0);
7969 return ;
7970 }
7971
7972 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007973 vos_mem_free(pWdaParams);
7974
Jeff Johnson295189b2012-06-20 16:38:30 -07007975 return ;
7976}
Jeff Johnson295189b2012-06-20 16:38:30 -07007977/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007978 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
7979 * Free memory.
7980 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
7981 */
7982void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
7983{
7984 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7985
7986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7987 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7988
7989 if(NULL == pWdaParams)
7990 {
7991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7992 "%s: pWdaParams received NULL", __func__);
7993 VOS_ASSERT(0);
7994 return;
7995 }
7996
7997 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7998 {
7999 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8000 vos_mem_free(pWdaParams);
8001 }
8002
8003 return;
8004}
8005/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008006 * FUNCTION: WDA_SetUapsdAcParamsReq
8007 * Request to WDI to set the UAPSD params for an ac (sta mode).
8008 */
8009VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
8010 tUapsdInfo *pUapsdInfo)
8011{
8012 WDI_Status status = WDI_STATUS_SUCCESS;
8013 tWDA_CbContext *pWDA = NULL ;
8014 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
8015 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
8016 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
8017 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008019 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008020 if(NULL == wdiUapsdParams)
8021 {
8022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008023 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008024 VOS_ASSERT(0);
8025 return VOS_STATUS_E_NOMEM;
8026 }
8027 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8028 if(NULL == pWdaParams)
8029 {
8030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008031 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008032 VOS_ASSERT(0);
8033 vos_mem_free(wdiUapsdParams);
8034 return VOS_STATUS_E_NOMEM;
8035 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008036 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
8037 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
8038 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
8039 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
8040 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
8041 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008042 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
8043 wdiUapsdParams->pUserData = pWdaParams;
8044
Jeff Johnson295189b2012-06-20 16:38:30 -07008045 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07008046 pWdaParams->pWdaContext = pWDA;
8047 /* Store param pointer as passed in by caller */
8048 pWdaParams->wdaMsgParam = pUapsdInfo;
8049 /* store Params pass it to WDI */
8050 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008051 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008052 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07008053 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008054 if(IS_WDI_STATUS_FAILURE(status))
8055 {
8056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8057 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
8058 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8059 vos_mem_free(pWdaParams);
8060 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008061 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
8062 return VOS_STATUS_SUCCESS;
8063 else
8064 return VOS_STATUS_E_FAILURE;
8065
Jeff Johnson295189b2012-06-20 16:38:30 -07008066}
8067/*
8068 * FUNCTION: WDA_ClearUapsdAcParamsReq
8069 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
8070 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
8071 * and again enter the UPASD with the modified params. Hence the disable
8072 * function was kept empty.
8073 *
8074 */
8075VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
8076{
8077 /* do nothing */
8078 return VOS_STATUS_SUCCESS;
8079}
Jeff Johnson295189b2012-06-20 16:38:30 -07008080/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008081 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008082 *
8083 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008084void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008085{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008086 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8087
Jeff Johnson295189b2012-06-20 16:38:30 -07008088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008089 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008090
8091 if(NULL == pWdaParams)
8092 {
8093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008094 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008095 VOS_ASSERT(0) ;
8096 return ;
8097 }
8098
8099 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8100 vos_mem_free(pWdaParams->wdaMsgParam);
8101 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008102
Jeff Johnson295189b2012-06-20 16:38:30 -07008103 //print a msg, nothing else to do
8104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008105 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008106 return ;
8107}
Jeff Johnson295189b2012-06-20 16:38:30 -07008108/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008109 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
8110 * Free memory.
8111 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
8112 */
8113void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
8114{
8115 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8116
8117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8118 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8119
8120 if(NULL == pWdaParams)
8121 {
8122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8123 "%s: pWdaParams received NULL", __func__);
8124 VOS_ASSERT(0);
8125 return;
8126 }
8127
8128 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8129 {
8130 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8131 vos_mem_free(pWdaParams->wdaMsgParam);
8132 vos_mem_free(pWdaParams);
8133 }
8134
8135 return;
8136}
8137/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008138 * FUNCTION: WDA_UpdateUapsdParamsReq
8139 * Request to WDI to update UAPSD params (in softAP mode) for a station.
8140 */
8141VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
8142 tUpdateUapsdParams* pUpdateUapsdInfo)
8143{
8144 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008145 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008146 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
8147 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
8148 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008149 tWDA_ReqParams *pWdaParams = NULL;
8150
Jeff Johnson295189b2012-06-20 16:38:30 -07008151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008152 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008153 if(NULL == wdiUpdateUapsdParams)
8154 {
8155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008156 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008157 VOS_ASSERT(0);
8158 return VOS_STATUS_E_NOMEM;
8159 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008160 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
8161 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
8162 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008163 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
8164 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008165
8166 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8167 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008168 {
8169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008170 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008171 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008172 vos_mem_free(pUpdateUapsdInfo);
8173 vos_mem_free(wdiUpdateUapsdParams);
8174 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07008175 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008176 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008177 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07008178 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008179 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
8180 pWdaParams->pWdaContext = pWDA;
8181
Jeff Johnson43971f52012-07-17 12:26:56 -07008182 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008183 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008184 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008185
Jeff Johnson43971f52012-07-17 12:26:56 -07008186 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008187 {
8188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8189 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008190 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
8191 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8192 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008193 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008194 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008195 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008196}
Jeff Johnson295189b2012-06-20 16:38:30 -07008197/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008198 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008199 *
8200 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008201void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008202{
8203 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008205 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008206 if(WDI_STATUS_SUCCESS != wdiStatus)
8207 {
8208 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08008209 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008210 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008211 if(NULL == pWdaParams)
8212 {
8213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008214 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008215 VOS_ASSERT(0) ;
8216 return ;
8217 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008218 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8219 vos_mem_free(pWdaParams->wdaMsgParam);
8220 vos_mem_free(pWdaParams);
8221 return ;
8222}
Jeff Johnson295189b2012-06-20 16:38:30 -07008223/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008224 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
8225 * Free memory.
8226 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
8227 */
8228void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8229{
8230 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8231
8232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8233 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8234
8235 if(NULL == pWdaParams)
8236 {
8237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8238 "%s: pWdaParams received NULL", __func__);
8239 VOS_ASSERT(0);
8240 return;
8241 }
8242
8243 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8244 {
8245 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8246 vos_mem_free(pWdaParams->wdaMsgParam);
8247 vos_mem_free(pWdaParams);
8248 }
8249
8250 return;
8251}
8252/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008253 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
8254 *
8255 */
8256VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
8257 tSirWlanSetRxpFilters *pWlanSuspendParam)
8258{
Jeff Johnson295189b2012-06-20 16:38:30 -07008259 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008260 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008261 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams =
8262 (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
8263 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
8264 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008266 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008267 if(NULL == wdiRxpFilterParams)
8268 {
8269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008270 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008271 VOS_ASSERT(0);
8272 vos_mem_free(pWlanSuspendParam);
8273 return VOS_STATUS_E_NOMEM;
8274 }
8275 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8276 if(NULL == pWdaParams)
8277 {
8278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008279 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008280 VOS_ASSERT(0);
8281 vos_mem_free(wdiRxpFilterParams);
8282 vos_mem_free(pWlanSuspendParam);
8283 return VOS_STATUS_E_NOMEM;
8284 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008285 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
8286 pWlanSuspendParam->setMcstBcstFilter;
8287 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
8288 pWlanSuspendParam->configuredMcstBcstFilterSetting;
8289
Yue Ma7f44bbe2013-04-12 11:47:39 -07008290 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
8291 wdiRxpFilterParams->pUserData = pWdaParams;
8292
Jeff Johnson295189b2012-06-20 16:38:30 -07008293 pWdaParams->pWdaContext = pWDA;
8294 pWdaParams->wdaMsgParam = pWlanSuspendParam;
8295 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008296 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008297 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07008298 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008299 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008300 {
8301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8302 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008303 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008304 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8305 vos_mem_free(pWdaParams->wdaMsgParam);
8306 vos_mem_free(pWdaParams);
8307 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008308 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008309}
Jeff Johnson295189b2012-06-20 16:38:30 -07008310/*
8311 * FUNCTION: WDA_WdiIndicationCallback
8312 *
8313 */
8314void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
8315 void* pUserData)
8316{
8317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008318 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008319}
Jeff Johnson295189b2012-06-20 16:38:30 -07008320/*
8321 * FUNCTION: WDA_ProcessWlanSuspendInd
8322 *
8323 */
8324VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
8325 tSirWlanSuspendParam *pWlanSuspendParam)
8326{
8327 WDI_Status wdiStatus;
8328 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008330 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008331 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
8332 pWlanSuspendParam->configuredMcstBcstFilterSetting;
8333 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
8334 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07008336 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
8337 if(WDI_STATUS_PENDING == wdiStatus)
8338 {
8339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008340 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008341 }
8342 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
8343 {
8344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008345 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008346 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008347 vos_mem_free(pWlanSuspendParam);
8348 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8349}
8350
Chet Lanctot186b5732013-03-18 10:26:30 -07008351#ifdef WLAN_FEATURE_11W
8352/*
8353 * FUNCTION: WDA_ProcessExcludeUnecryptInd
8354 *
8355 */
8356VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
8357 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
8358{
8359 WDI_Status wdiStatus;
8360 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
8361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8362 "------> %s ", __func__);
8363
8364 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
8365 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
8366 sizeof(tSirMacAddr));
8367
8368 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
8369 wdiExclUnencryptParams.pUserData = pWDA;
8370
8371 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
8372 if(WDI_STATUS_PENDING == wdiStatus)
8373 {
8374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8375 "Pending received for %s:%d ", __func__, __LINE__ );
8376 }
8377 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
8378 {
8379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8380 "Failure in %s:%d ", __func__, __LINE__ );
8381 }
8382 vos_mem_free(pExclUnencryptParam);
8383 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8384}
8385#endif
8386
Jeff Johnson295189b2012-06-20 16:38:30 -07008387/*
8388 * FUNCTION: WDA_ProcessWlanResumeCallback
8389 *
8390 */
8391void WDA_ProcessWlanResumeCallback(
8392 WDI_SuspendResumeRspParamsType *resumeRspParams,
8393 void* pUserData)
8394{
8395 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008397 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008398 if(NULL == pWdaParams)
8399 {
8400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008401 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008402 VOS_ASSERT(0) ;
8403 return ;
8404 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008405 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
8406 {
8407 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08008408 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008409 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008410 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8411 vos_mem_free(pWdaParams->wdaMsgParam);
8412 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008413 return ;
8414}
Jeff Johnson295189b2012-06-20 16:38:30 -07008415/*
8416 * FUNCTION: WDA_ProcessWlanResumeReq
8417 *
8418 */
8419VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
8420 tSirWlanResumeParam *pWlanResumeParam)
8421{
8422 WDI_Status wdiStatus;
8423 WDI_ResumeParamsType *wdiResumeParams =
8424 (WDI_ResumeParamsType *)vos_mem_malloc(
8425 sizeof(WDI_ResumeParamsType) ) ;
8426 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008428 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008429 if(NULL == wdiResumeParams)
8430 {
8431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008432 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008433 VOS_ASSERT(0);
8434 return VOS_STATUS_E_NOMEM;
8435 }
8436 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8437 if(NULL == pWdaParams)
8438 {
8439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008440 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008441 VOS_ASSERT(0);
8442 vos_mem_free(wdiResumeParams);
8443 return VOS_STATUS_E_NOMEM;
8444 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008445 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
8446 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07008448 wdiResumeParams->wdiReqStatusCB = NULL;
8449 pWdaParams->wdaMsgParam = pWlanResumeParam;
8450 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
8451 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008452 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
8453 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
8454 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008455 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8456 {
8457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8458 "Failure in Host Resume REQ WDI API, free all the memory " );
8459 VOS_ASSERT(0);
8460 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8461 vos_mem_free(pWdaParams->wdaMsgParam);
8462 vos_mem_free(pWdaParams);
8463 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008464 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8465}
8466
Jeff Johnson295189b2012-06-20 16:38:30 -07008467/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008468 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008469 *
8470 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008471void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008472{
8473 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008475 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008476 if(NULL == pWdaParams)
8477 {
8478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008479 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008480 VOS_ASSERT(0) ;
8481 return ;
8482 }
8483
8484 vos_mem_free(pWdaParams->wdaMsgParam) ;
8485 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8486 vos_mem_free(pWdaParams) ;
8487 /*
8488 * No respone required for SetBeaconFilter req so just free the request
8489 * param here
8490 */
8491
Jeff Johnson295189b2012-06-20 16:38:30 -07008492 return ;
8493}
Jeff Johnson295189b2012-06-20 16:38:30 -07008494/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008495 * FUNCTION: WDA_SetBeaconFilterReqCallback
8496 * Free memory.
8497 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
8498 */
8499void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8500{
8501 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8502
8503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8504 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8505
8506 if(NULL == pWdaParams)
8507 {
8508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8509 "%s: pWdaParams received NULL", __func__);
8510 VOS_ASSERT(0);
8511 return;
8512 }
8513
8514 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8515 {
8516 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8517 vos_mem_free(pWdaParams->wdaMsgParam);
8518 vos_mem_free(pWdaParams);
8519 }
8520
8521 return;
8522}
8523/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008524 * FUNCTION: WDA_SetBeaconFilterReq
8525 * Request to WDI to send the beacon filtering related information.
8526 */
8527VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
8528 tBeaconFilterMsg* pBeaconFilterInfo)
8529{
8530 WDI_Status status = WDI_STATUS_SUCCESS;
8531 tANI_U8 *dstPtr, *srcPtr;
8532 tANI_U8 filterLength;
8533 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
8534 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
8535 sizeof(WDI_BeaconFilterReqParamsType) ) ;
8536 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008538 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008539 if(NULL == wdiBeaconFilterInfo)
8540 {
8541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008542 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008543 VOS_ASSERT(0);
8544 return VOS_STATUS_E_NOMEM;
8545 }
8546 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8547 if(NULL == pWdaParams)
8548 {
8549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008550 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008551 VOS_ASSERT(0);
8552 vos_mem_free(wdiBeaconFilterInfo);
8553 return VOS_STATUS_E_NOMEM;
8554 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008555 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
8556 pBeaconFilterInfo->beaconInterval;
8557 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
8558 pBeaconFilterInfo->capabilityInfo;
8559 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
8560 pBeaconFilterInfo->capabilityMask;
8561 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07008562
8563 //Fill the BssIdx
8564 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
8565
Jeff Johnson295189b2012-06-20 16:38:30 -07008566 //Fill structure with info contained in the beaconFilterTable
8567 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
8568 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
8569 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
8570 if(WDI_BEACON_FILTER_LEN < filterLength)
8571 {
8572 filterLength = WDI_BEACON_FILTER_LEN;
8573 }
8574 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008575 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
8576 wdiBeaconFilterInfo->pUserData = pWdaParams;
8577
Jeff Johnson295189b2012-06-20 16:38:30 -07008578 /* Store param pointer as passed in by caller */
8579 /* store Params pass it to WDI */
8580 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
8581 pWdaParams->pWdaContext = pWDA;
8582 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
8583
Jeff Johnson295189b2012-06-20 16:38:30 -07008584 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008585 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008586 if(IS_WDI_STATUS_FAILURE(status))
8587 {
8588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8589 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
8590 vos_mem_free(pWdaParams->wdaMsgParam) ;
8591 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8592 vos_mem_free(pWdaParams) ;
8593 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008594 return CONVERT_WDI2VOS_STATUS(status) ;
8595}
Jeff Johnson295189b2012-06-20 16:38:30 -07008596/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008597 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008598 *
8599 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008600void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008601{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008602 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8603
Jeff Johnson295189b2012-06-20 16:38:30 -07008604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008605 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008606
8607 if(NULL == pWdaParams)
8608 {
8609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008610 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008611 VOS_ASSERT(0) ;
8612 return ;
8613 }
8614
8615 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8616 vos_mem_free(pWdaParams->wdaMsgParam);
8617 vos_mem_free(pWdaParams);
8618
Jeff Johnson295189b2012-06-20 16:38:30 -07008619 //print a msg, nothing else to do
8620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008621 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008622 return ;
8623}
Yue Ma7f44bbe2013-04-12 11:47:39 -07008624/*
8625 * FUNCTION: WDA_RemBeaconFilterReqCallback
8626 * Free memory.
8627 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
8628 */
8629void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8630{
8631 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8632
8633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8634 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8635
8636 if(NULL == pWdaParams)
8637 {
8638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8639 "%s: pWdaParams received NULL", __func__);
8640 VOS_ASSERT(0);
8641 return;
8642 }
8643
8644 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8645 {
8646 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8647 vos_mem_free(pWdaParams->wdaMsgParam);
8648 vos_mem_free(pWdaParams);
8649 }
8650
8651 return;
8652}
Jeff Johnson295189b2012-06-20 16:38:30 -07008653 // TODO: PE does not have this feature for now implemented,
8654 // but the support for removing beacon filter exists between
8655 // HAL and FW. This function can be called whenever PE defines
8656 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07008657/*
8658 * FUNCTION: WDA_RemBeaconFilterReq
8659 * Request to WDI to send the removal of beacon filtering related information.
8660 */
8661VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
8662 tRemBeaconFilterMsg* pBeaconFilterInfo)
8663{
8664 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008665 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008666 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
8667 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
8668 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008669 tWDA_ReqParams *pWdaParams ;
8670
Jeff Johnson295189b2012-06-20 16:38:30 -07008671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008672 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008673 if(NULL == wdiBeaconFilterInfo)
8674 {
8675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008676 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008677 VOS_ASSERT(0);
8678 return VOS_STATUS_E_NOMEM;
8679 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008680 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8681 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008682 {
8683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008684 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008685 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008686 vos_mem_free(wdiBeaconFilterInfo);
8687 vos_mem_free(pBeaconFilterInfo);
8688 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07008689 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07008690
8691 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
8692 pBeaconFilterInfo->ucIeCount;
8693 //Fill structure with info contained in the ucRemIeId
8694 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
8695 pBeaconFilterInfo->ucRemIeId,
8696 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
8697 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
8698 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008699
8700 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008701 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07008702 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008703 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
8704
8705 pWdaParams->pWdaContext = pWDA;
8706
Jeff Johnson43971f52012-07-17 12:26:56 -07008707 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008708 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008709 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008710 {
8711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8712 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008713 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008714 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8715 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008716 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008717 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008718 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008719}
Jeff Johnson295189b2012-06-20 16:38:30 -07008720/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008721 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008722 *
8723 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008724void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008725{
8726 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008728 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008729 if(NULL == pWdaParams)
8730 {
8731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008732 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008733 VOS_ASSERT(0) ;
8734 return ;
8735 }
8736
8737 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8738 vos_mem_free(pWdaParams) ;
8739
Jeff Johnson295189b2012-06-20 16:38:30 -07008740 return ;
8741}
Jeff Johnson295189b2012-06-20 16:38:30 -07008742/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008743 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
8744 * Free memory.
8745 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
8746 */
8747void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
8748{
8749 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8750
8751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8752 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8753
8754 if(NULL == pWdaParams)
8755 {
8756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8757 "%s: pWdaParams received NULL", __func__);
8758 VOS_ASSERT(0);
8759 return;
8760 }
8761
8762 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8763 {
8764 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8765 vos_mem_free(pWdaParams);
8766 }
8767
8768 return;
8769}
8770/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008771 * FUNCTION: WDA_SetRSSIThresholdsReq
8772 * Request to WDI to set the RSSI thresholds (sta mode).
8773 */
8774VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
8775{
8776 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008777 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008778 tWDA_CbContext *pWDA = NULL ;
8779 v_PVOID_t pVosContext = NULL;
8780 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
8781 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
8782 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
8783 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008785 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008786 if(NULL == wdiRSSIThresholdsInfo)
8787 {
8788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008789 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008790 VOS_ASSERT(0);
8791 return VOS_STATUS_E_NOMEM;
8792 }
8793 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8794 if(NULL == pWdaParams)
8795 {
8796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008797 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008798 VOS_ASSERT(0);
8799 vos_mem_free(wdiRSSIThresholdsInfo);
8800 return VOS_STATUS_E_NOMEM;
8801 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008802 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07008803 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
8804 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
8805 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07008806 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
8807 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
8808 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07008809 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
8810 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
8811 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008812 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
8813 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008814 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
8815 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
8816
Jeff Johnson295189b2012-06-20 16:38:30 -07008817 /* Store param pointer as passed in by caller */
8818 /* store Params pass it to WDI */
8819 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
8820 pWdaParams->pWdaContext = pWDA;
8821 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07008822 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008823 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008824 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008825 {
8826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8827 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008828 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008829 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8830 vos_mem_free(pWdaParams) ;
8831 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008832 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008833
8834}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008835/*
Yue Madb90ac12013-04-04 13:39:13 -07008836 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008837 *
8838 */
Yue Madb90ac12013-04-04 13:39:13 -07008839void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008840{
8841 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8842
8843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008844 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008845 if(NULL == pWdaParams)
8846 {
8847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008848 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008849 VOS_ASSERT(0) ;
8850 return ;
8851 }
8852
8853 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8854 vos_mem_free(pWdaParams->wdaMsgParam);
8855 vos_mem_free(pWdaParams) ;
8856
8857 //print a msg, nothing else to do
8858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -07008859 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008860 return ;
8861}
Jeff Johnson295189b2012-06-20 16:38:30 -07008862/*
Yue Madb90ac12013-04-04 13:39:13 -07008863 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -07008864 * Free memory.
8865 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -07008866 */
8867void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
8868{
8869 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8870
8871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8872 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8873
8874 if(NULL == pWdaParams)
8875 {
8876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8877 "%s: Invalid pWdaParams pointer", __func__);
8878 VOS_ASSERT(0);
8879 return;
8880 }
8881
8882 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8883 {
8884 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8885 vos_mem_free(pWdaParams->wdaMsgParam);
8886 vos_mem_free(pWdaParams);
8887 }
8888
8889 return;
8890}
8891/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008892 * FUNCTION: WDA_ProcessHostOffloadReq
8893 * Request to WDI to set the filter to minimize unnecessary host wakeup due
8894 * to broadcast traffic (sta mode).
8895 */
8896VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
8897 tSirHostOffloadReq *pHostOffloadParams)
8898{
8899 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008900 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008901 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
8902 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
8903 sizeof(WDI_HostOffloadReqParamsType)) ;
8904 tWDA_ReqParams *pWdaParams ;
8905
8906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008907 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07008908
8909 if(NULL == wdiHostOffloadInfo)
8910 {
8911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008912 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008913 VOS_ASSERT(0);
8914 return VOS_STATUS_E_NOMEM;
8915 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008916 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8917 if(NULL == pWdaParams)
8918 {
8919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008920 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008921 VOS_ASSERT(0);
8922 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008923 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008924 return VOS_STATUS_E_NOMEM;
8925 }
8926
8927 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
8928 pHostOffloadParams->offloadType;
8929 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
8930 pHostOffloadParams->enableOrDisable;
8931
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008932 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
8933 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
8934
Jeff Johnson295189b2012-06-20 16:38:30 -07008935 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
8936 {
8937 case SIR_IPV4_ARP_REPLY_OFFLOAD:
8938 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
8939 pHostOffloadParams->params.hostIpv4Addr,
8940 4);
8941 break;
8942 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
8943 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
8944 pHostOffloadParams->params.hostIpv6Addr,
8945 16);
8946 break;
8947 case SIR_IPV6_NS_OFFLOAD:
8948 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
8949 pHostOffloadParams->params.hostIpv6Addr,
8950 16);
8951
8952#ifdef WLAN_NS_OFFLOAD
8953 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
8954 {
8955 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
8956 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
8957 16);
8958 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
8959 }
8960 else
8961 {
8962 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
8963 }
8964
8965 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
8966 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
8967 16);
8968 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
8969 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
8970 6);
8971
8972 //Only two are supported so let's go through them without a loop
8973 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
8974 {
8975 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
8976 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
8977 16);
8978 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
8979 }
8980 else
8981 {
8982 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
8983 }
8984
8985 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
8986 {
8987 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
8988 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
8989 16);
8990 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
8991 }
8992 else
8993 {
8994 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
8995 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +05308996 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
8997 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008998 break;
8999#endif //WLAN_NS_OFFLOAD
9000 default:
9001 {
9002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9003 "No Handling for Offload Type %x in WDA "
9004 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
9005 //WDA_VOS_ASSERT(0) ;
9006 }
9007 }
Yue Madb90ac12013-04-04 13:39:13 -07009008 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
9009 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009010
Jeff Johnson295189b2012-06-20 16:38:30 -07009011 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009012 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009013 /* store Params pass it to WDI */
9014 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
9015 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009016
Jeff Johnson295189b2012-06-20 16:38:30 -07009017
Jeff Johnson43971f52012-07-17 12:26:56 -07009018 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -07009019 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009020
Jeff Johnson43971f52012-07-17 12:26:56 -07009021 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009022 {
9023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9024 "Failure in host offload REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009025 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009026 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9027 vos_mem_free(pWdaParams->wdaMsgParam);
9028 vos_mem_free(pWdaParams) ;
9029 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009030 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009031
9032}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009033/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009034 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009035 *
9036 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009037void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009038{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009039 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9040
Jeff Johnson295189b2012-06-20 16:38:30 -07009041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009042 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009043
9044 if(NULL == pWdaParams)
9045 {
9046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009047 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009048 VOS_ASSERT(0) ;
9049 return ;
9050 }
9051
9052 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9053 vos_mem_free(pWdaParams->wdaMsgParam);
9054 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009055
Jeff Johnson295189b2012-06-20 16:38:30 -07009056 //print a msg, nothing else to do
9057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009058 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009059 return ;
9060}
Jeff Johnson295189b2012-06-20 16:38:30 -07009061/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009062 * FUNCTION: WDA_KeepAliveReqCallback
9063 * Free memory.
9064 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
9065 */
9066void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
9067{
9068 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9069
9070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9071 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9072
9073 if(NULL == pWdaParams)
9074 {
9075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9076 "%s: pWdaParams received NULL", __func__);
9077 VOS_ASSERT(0);
9078 return;
9079 }
9080
9081 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9082 {
9083 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9084 vos_mem_free(pWdaParams->wdaMsgParam);
9085 vos_mem_free(pWdaParams);
9086 }
9087
9088 return;
9089}
9090/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009091 * FUNCTION: WDA_ProcessKeepAliveReq
9092 * Request to WDI to send Keep Alive packets to minimize unnecessary host
9093 * wakeup due to broadcast traffic (sta mode).
9094 */
9095VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
9096 tSirKeepAliveReq *pKeepAliveParams)
9097{
9098 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009099 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009100 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
9101 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
9102 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009103 tWDA_ReqParams *pWdaParams;
9104
Jeff Johnson295189b2012-06-20 16:38:30 -07009105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009106 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009107 if(NULL == wdiKeepAliveInfo)
9108 {
9109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009110 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009111 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009112 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009113 return VOS_STATUS_E_NOMEM;
9114 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009115
9116 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9117 if(NULL == pWdaParams)
9118 {
9119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009120 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009121 VOS_ASSERT(0);
9122 vos_mem_free(wdiKeepAliveInfo);
9123 vos_mem_free(pKeepAliveParams);
9124 return VOS_STATUS_E_NOMEM;
9125 }
9126
Jeff Johnson295189b2012-06-20 16:38:30 -07009127 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
9128 pKeepAliveParams->packetType;
9129 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
9130 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009131
9132 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
9133 pKeepAliveParams->bssId,
9134 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07009135
9136 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
9137 {
9138 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
9139 pKeepAliveParams->hostIpv4Addr,
9140 SIR_IPV4_ADDR_LEN);
9141 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
9142 pKeepAliveParams->destIpv4Addr,
9143 SIR_IPV4_ADDR_LEN);
9144 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
9145 pKeepAliveParams->destMacAddr,
9146 SIR_MAC_ADDR_LEN);
9147 }
9148 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
9149 {
9150 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
9151 SIR_IPV4_ADDR_LEN,
9152 0);
9153 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
9154 SIR_IPV4_ADDR_LEN,
9155 0);
9156 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
9157 SIR_MAC_ADDR_LEN,
9158 0);
9159 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009160 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
9161 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009162
Jeff Johnson295189b2012-06-20 16:38:30 -07009163 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009164 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009165 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009166 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
9167 pWdaParams->pWdaContext = pWDA;
9168
Jeff Johnson295189b2012-06-20 16:38:30 -07009169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
9170 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
9171 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
9172 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
9173 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
9174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
9175 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
9176 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
9177 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
9178 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
9179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9180 "WDA DMAC : %d:%d:%d:%d:%d:%d",
9181 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
9182 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
9183 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
9184 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
9185 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
9186 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
9187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9188 "TimePeriod %d PacketType %d",
9189 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
9190 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -07009191 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009192 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009193
Jeff Johnson43971f52012-07-17 12:26:56 -07009194 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009195 {
9196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9197 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009198 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009199 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9200 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009201 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009202 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009203 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009204
9205}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009206/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009207 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009208 *
9209 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009210void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009211 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
9212 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009213{
9214 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009216 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009217 if(NULL == pWdaParams)
9218 {
9219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009220 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009221 VOS_ASSERT(0) ;
9222 return ;
9223 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009224 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9225 vos_mem_free(pWdaParams->wdaMsgParam);
9226 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009227 return ;
9228}
Jeff Johnson295189b2012-06-20 16:38:30 -07009229/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009230 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
9231 * Free memory.
9232 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
9233 */
9234void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
9235{
9236 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9237
9238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9239 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9240
9241 if(NULL == pWdaParams)
9242 {
9243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9244 "%s: pWdaParams received NULL", __func__);
9245 VOS_ASSERT(0);
9246 return;
9247 }
9248
9249 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9250 {
9251 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9252 vos_mem_free(pWdaParams->wdaMsgParam);
9253 vos_mem_free(pWdaParams);
9254 }
9255
9256 return;
9257}
9258
9259/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009260 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
9261 * Request to WDI to add WOWL Bcast pattern
9262 */
9263VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
9264 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
9265{
9266 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009267 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009268 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
9269 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
9270 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
9271 tWDA_ReqParams *pWdaParams ;
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 == wdiWowlAddBcPtrnInfo)
9275 {
9276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009277 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009278 VOS_ASSERT(0);
9279 return VOS_STATUS_E_NOMEM;
9280 }
9281 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9282 if(NULL == pWdaParams)
9283 {
9284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009285 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009286 VOS_ASSERT(0);
9287 vos_mem_free(wdiWowlAddBcPtrnInfo);
9288 return VOS_STATUS_E_NOMEM;
9289 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009290 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
9291 pWowlAddBcPtrnParams->ucPatternId;
9292 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
9293 pWowlAddBcPtrnParams->ucPatternByteOffset;
9294 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
9295 pWowlAddBcPtrnParams->ucPatternMaskSize;
9296 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
9297 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -07009298 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
9299 {
9300 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
9301 pWowlAddBcPtrnParams->ucPattern,
9302 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
9303 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
9304 pWowlAddBcPtrnParams->ucPatternMask,
9305 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
9306 }
9307 else
9308 {
9309 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
9310 pWowlAddBcPtrnParams->ucPattern,
9311 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9312 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
9313 pWowlAddBcPtrnParams->ucPatternMask,
9314 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9315
9316 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
9317 pWowlAddBcPtrnParams->ucPatternExt,
9318 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9319 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
9320 pWowlAddBcPtrnParams->ucPatternMaskExt,
9321 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9322 }
9323
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009324 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
9325 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
9326
Yue Ma7f44bbe2013-04-12 11:47:39 -07009327 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
9328 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009329 /* Store param pointer as passed in by caller */
9330 /* store Params pass it to WDI */
9331 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
9332 pWdaParams->pWdaContext = pWDA;
9333 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009334 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009335 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009336 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009337 {
9338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9339 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009340 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009341 vos_mem_free(pWdaParams->wdaMsgParam) ;
9342 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9343 vos_mem_free(pWdaParams) ;
9344 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009345 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009346
9347}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009348/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009349 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009350 *
9351 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009352void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009353 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
9354 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009355{
9356 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009358 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009359 if(NULL == pWdaParams)
9360 {
9361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009362 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009363 VOS_ASSERT(0) ;
9364 return ;
9365 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009366 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9367 vos_mem_free(pWdaParams->wdaMsgParam);
9368 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009369 return ;
9370}
Jeff Johnson295189b2012-06-20 16:38:30 -07009371/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009372 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
9373 * Free memory.
9374 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
9375 */
9376void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
9377{
9378 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9379
9380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9381 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9382
9383 if(NULL == pWdaParams)
9384 {
9385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9386 "%s: pWdaParams received NULL", __func__);
9387 VOS_ASSERT(0);
9388 return;
9389 }
9390
9391 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9392 {
9393 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9394 vos_mem_free(pWdaParams->wdaMsgParam);
9395 vos_mem_free(pWdaParams);
9396 }
9397
9398 return;
9399}
9400/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009401 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
9402 * Request to WDI to delete WOWL Bcast pattern
9403 */
9404VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
9405 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
9406{
9407 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009408 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009409 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
9410 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
9411 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
9412 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009414 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009415 if(NULL == wdiWowlDelBcPtrnInfo)
9416 {
9417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009418 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009419 VOS_ASSERT(0);
9420 return VOS_STATUS_E_NOMEM;
9421 }
9422 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9423 if(NULL == pWdaParams)
9424 {
9425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009426 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009427 VOS_ASSERT(0);
9428 vos_mem_free(wdiWowlDelBcPtrnInfo);
9429 return VOS_STATUS_E_NOMEM;
9430 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009431 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
9432 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009433
9434 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
9435 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
9436
Yue Ma7f44bbe2013-04-12 11:47:39 -07009437 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
9438 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009439 /* Store param pointer as passed in by caller */
9440 /* store Params pass it to WDI */
9441 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
9442 pWdaParams->pWdaContext = pWDA;
9443 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009444 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009445 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009446 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009447 {
9448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9449 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009450 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009451 vos_mem_free(pWdaParams->wdaMsgParam) ;
9452 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9453 vos_mem_free(pWdaParams) ;
9454 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009455 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009456
9457}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009458/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009459 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009460 *
9461 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009462void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009463{
9464 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9465 tWDA_CbContext *pWDA;
9466 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009468 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009469 if(NULL == pWdaParams)
9470 {
9471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009472 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009473 VOS_ASSERT(0) ;
9474 return ;
9475 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009476 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9477 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
9478
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009479 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
9480
Jeff Johnson295189b2012-06-20 16:38:30 -07009481 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9482 vos_mem_free(pWdaParams) ;
9483
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009484 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009485 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -07009486 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009487 return ;
9488}
Jeff Johnson295189b2012-06-20 16:38:30 -07009489/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009490 * FUNCTION: WDA_WowlEnterReqCallback
9491 * Free memory and send WOWL Enter RSP back to PE.
9492 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
9493 */
9494void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
9495{
9496 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9497 tWDA_CbContext *pWDA;
9498 tSirHalWowlEnterParams *pWowlEnterParams;
9499
9500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9501 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9502
9503 if(NULL == pWdaParams)
9504 {
9505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9506 "%s: pWdaParams received NULL", __func__);
9507 VOS_ASSERT(0);
9508 return;
9509 }
9510
9511 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9512 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
9513 pWowlEnterParams->status = wdiStatus;
9514
9515 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9516 {
9517 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9518 vos_mem_free(pWdaParams);
9519 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
9520 }
9521
9522 return;
9523}
9524/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009525 * FUNCTION: WDA_ProcessWowlEnterReq
9526 * Request to WDI to enter WOWL
9527 */
9528VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
9529 tSirHalWowlEnterParams *pWowlEnterParams)
9530{
9531 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009532 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009533 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
9534 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
9535 sizeof(WDI_WowlEnterReqParamsType)) ;
9536 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009538 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009539 if(NULL == wdiWowlEnterInfo)
9540 {
9541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009542 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009543 VOS_ASSERT(0);
9544 return VOS_STATUS_E_NOMEM;
9545 }
9546 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9547 if(NULL == pWdaParams)
9548 {
9549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009550 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009551 VOS_ASSERT(0);
9552 vos_mem_free(wdiWowlEnterInfo);
9553 return VOS_STATUS_E_NOMEM;
9554 }
Kumar Anandaca924e2013-07-22 14:35:34 -07009555
9556 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
9557
Jeff Johnson295189b2012-06-20 16:38:30 -07009558 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
9559 pWowlEnterParams->magicPtrn,
9560 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07009561 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
9562 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009563 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
9564 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009565 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
9566 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009567 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
9568 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009569 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
9570 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009571 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
9572 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009573 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
9574 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -07009575 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
9576 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -07009577#ifdef WLAN_WAKEUP_EVENTS
9578 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
9579 pWowlEnterParams->ucWoWEAPIDRequestEnable;
9580
9581 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
9582 pWowlEnterParams->ucWoWEAPOL4WayEnable;
9583
9584 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
9585 pWowlEnterParams->ucWowNetScanOffloadMatch;
9586
9587 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
9588 pWowlEnterParams->ucWowGTKRekeyError;
9589
9590 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
9591 pWowlEnterParams->ucWoWBSSConnLoss;
9592#endif // WLAN_WAKEUP_EVENTS
9593
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009594 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
9595 pWowlEnterParams->bssIdx;
9596
Yue Ma7f44bbe2013-04-12 11:47:39 -07009597 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
9598 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009599 /* Store param pointer as passed in by caller */
9600 /* store Params pass it to WDI */
9601 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
9602 pWdaParams->pWdaContext = pWDA;
9603 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009604 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009605 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009606 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009607 {
9608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9609 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009610 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009611 vos_mem_free(pWdaParams->wdaMsgParam) ;
9612 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9613 vos_mem_free(pWdaParams) ;
9614 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009615 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009616
9617}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009618/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009619 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009620 *
9621 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009622void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009623{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009624 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9625 tWDA_CbContext *pWDA;
9626 tSirHalWowlExitParams *pWowlExitParams;
9627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009628 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009629 if(NULL == pWdaParams)
9630 {
9631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009632 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009633 VOS_ASSERT(0) ;
9634 return ;
9635 }
9636 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9637 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
9638
9639 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009640 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009641
9642 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9643 vos_mem_free(pWdaParams) ;
9644
Jeff Johnson295189b2012-06-20 16:38:30 -07009645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009646 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009647 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009648 return ;
9649}
Jeff Johnson295189b2012-06-20 16:38:30 -07009650/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009651 * FUNCTION: WDA_WowlExitReqCallback
9652 * Free memory and send WOWL Exit RSP back to PE.
9653 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
9654 */
9655void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
9656{
9657 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9658 tWDA_CbContext *pWDA;
9659 tSirHalWowlExitParams *pWowlExitParams;
9660
9661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9662 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9663
9664 if(NULL == pWdaParams)
9665 {
9666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9667 "%s: pWdaParams received NULL", __func__);
9668 VOS_ASSERT(0);
9669 return;
9670 }
9671
9672 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9673 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
9674 pWowlExitParams->status = wdiStatus;
9675
9676 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9677 {
9678 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9679 vos_mem_free(pWdaParams);
9680 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
9681 }
9682
9683 return;
9684}
9685/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009686 * FUNCTION: WDA_ProcessWowlExitReq
9687 * Request to WDI to add WOWL Bcast pattern
9688 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009689VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
9690 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009691{
9692 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009693 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009694 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
9695 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
9696 sizeof(WDI_WowlExitReqParamsType)) ;
9697 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009699 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009700 if(NULL == wdiWowlExitInfo)
9701 {
9702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009703 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009704 VOS_ASSERT(0);
9705 return VOS_STATUS_E_NOMEM;
9706 }
9707 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9708 if(NULL == pWdaParams)
9709 {
9710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009711 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009712 VOS_ASSERT(0);
9713 vos_mem_free(wdiWowlExitInfo);
9714 return VOS_STATUS_E_NOMEM;
9715 }
9716
9717 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
9718 pWowlExitParams->bssIdx;
9719
Yue Ma7f44bbe2013-04-12 11:47:39 -07009720 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
9721 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009722
9723 /* Store param pointer as passed in by caller */
9724 /* store Params pass it to WDI */
9725 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
9726 pWdaParams->pWdaContext = pWDA;
9727 pWdaParams->wdaMsgParam = pWowlExitParams;
9728
9729 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009730 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009731
Jeff Johnson43971f52012-07-17 12:26:56 -07009732 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009733 {
9734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9735 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009736 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009737 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9738 vos_mem_free(pWdaParams->wdaMsgParam);
9739 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009740 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009741 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009742}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009743/*
9744 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
9745 * Request to WDI to determine whether a given station is capable of
9746 * using HW-based frame translation
9747 */
9748v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
9749 tANI_U8 staIdx)
9750{
9751 return WDI_IsHwFrameTxTranslationCapable(staIdx);
9752}
Jeff Johnson295189b2012-06-20 16:38:30 -07009753/*
9754 * FUNCTION: WDA_NvDownloadReqCallback
9755 * send NV Download RSP back to PE
9756 */
9757void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
9758 void* pUserData)
9759{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009760
9761 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
9762 tWDA_CbContext *pWDA;
9763
Jeff Johnson295189b2012-06-20 16:38:30 -07009764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009765 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009766
9767 if(NULL == pWdaParams)
9768 {
9769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009770 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009771 VOS_ASSERT(0) ;
9772 return ;
9773 }
9774
9775 pWDA = pWdaParams->pWdaContext;
9776
Jeff Johnson295189b2012-06-20 16:38:30 -07009777 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009778 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9779 vos_mem_free(pWdaParams);
9780
Jeff Johnson295189b2012-06-20 16:38:30 -07009781 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07009782 return ;
9783}
Jeff Johnson295189b2012-06-20 16:38:30 -07009784/*
9785 * FUNCTION: WDA_ProcessNvDownloadReq
9786 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
9787 */
9788VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
9789{
9790 /* Initialize the local Variables*/
9791 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
9792 v_VOID_t *pNvBuffer=NULL;
9793 v_SIZE_t bufferSize = 0;
9794 WDI_Status status = WDI_STATUS_E_FAILURE;
9795 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009796 tWDA_ReqParams *pWdaParams ;
9797
Jeff Johnson295189b2012-06-20 16:38:30 -07009798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009799 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009800 if(NULL == pWDA)
9801 {
9802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009803 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009804 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07009805 return VOS_STATUS_E_FAILURE;
9806 }
9807
9808 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -07009809 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
9810
Jeff Johnson295189b2012-06-20 16:38:30 -07009811 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
9812 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009813 if(NULL == wdiNvDownloadReqParam)
9814 {
9815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009816 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009817 VOS_ASSERT(0);
9818 return VOS_STATUS_E_NOMEM;
9819 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009820 /* Copy Params to wdiNvDownloadReqParam*/
9821 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
9822 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009823
9824 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9825 if(NULL == pWdaParams)
9826 {
9827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009828 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009829 VOS_ASSERT(0);
9830 vos_mem_free(wdiNvDownloadReqParam);
9831 return VOS_STATUS_E_NOMEM;
9832 }
9833
Jeff Johnson295189b2012-06-20 16:38:30 -07009834 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009835 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
9836 pWdaParams->wdaMsgParam = NULL;
9837 pWdaParams->pWdaContext = pWDA;
9838
9839
Jeff Johnson295189b2012-06-20 16:38:30 -07009840 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009841
Jeff Johnson295189b2012-06-20 16:38:30 -07009842 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009843 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
9844
Jeff Johnson295189b2012-06-20 16:38:30 -07009845 if(IS_WDI_STATUS_FAILURE(status))
9846 {
9847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9848 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009849 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9850 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009851 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009852 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009853}
9854/*
9855 * FUNCTION: WDA_FlushAcReqCallback
9856 * send Flush AC RSP back to TL
9857 */
9858void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
9859{
9860 vos_msg_t wdaMsg = {0} ;
9861 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9862 tFlushACReq *pFlushACReqParams;
9863 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009865 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009866 if(NULL == pWdaParams)
9867 {
9868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009869 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009870 VOS_ASSERT(0) ;
9871 return ;
9872 }
9873
9874 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
9875 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
9876 if(NULL == pFlushACRspParams)
9877 {
9878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009879 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009880 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009881 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009882 return ;
9883 }
9884 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
9885 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
9886 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
9887 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
9888 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009889 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009890 vos_mem_free(pWdaParams->wdaMsgParam) ;
9891 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9892 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009893 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
9894 wdaMsg.bodyptr = (void *)pFlushACRspParams;
9895 // POST message to TL
9896 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
9897
Jeff Johnson295189b2012-06-20 16:38:30 -07009898 return ;
9899}
Jeff Johnson295189b2012-06-20 16:38:30 -07009900/*
9901 * FUNCTION: WDA_ProcessFlushAcReq
9902 * Request to WDI to Update the DELBA REQ params.
9903 */
9904VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
9905 tFlushACReq *pFlushAcReqParams)
9906{
9907 WDI_Status status = WDI_STATUS_SUCCESS ;
9908 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
9909 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
9910 sizeof(WDI_FlushAcReqParamsType)) ;
9911 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009912 if(NULL == wdiFlushAcReqParam)
9913 {
9914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009915 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009916 VOS_ASSERT(0);
9917 return VOS_STATUS_E_NOMEM;
9918 }
9919 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9920 if(NULL == pWdaParams)
9921 {
9922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009923 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009924 VOS_ASSERT(0);
9925 vos_mem_free(wdiFlushAcReqParam);
9926 return VOS_STATUS_E_NOMEM;
9927 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009929 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009930 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
9931 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
9932 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
9933 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -07009934 /* Store Flush AC pointer, as this will be used for response */
9935 /* store Params pass it to WDI */
9936 pWdaParams->pWdaContext = pWDA;
9937 pWdaParams->wdaMsgParam = pFlushAcReqParams;
9938 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009939 status = WDI_FlushAcReq(wdiFlushAcReqParam,
9940 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009941 if(IS_WDI_STATUS_FAILURE(status))
9942 {
9943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9944 "Failure in Flush AC REQ Params WDI API, free all the memory " );
9945 vos_mem_free(pWdaParams->wdaMsgParam) ;
9946 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9947 vos_mem_free(pWdaParams) ;
9948 //TODO: respond to TL with failure
9949 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009950 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009951}
Jeff Johnson295189b2012-06-20 16:38:30 -07009952/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009953 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009954 *
9955 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009956void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009957{
9958 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9959 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07009960 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009961
9962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009963 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009964 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: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009968 VOS_ASSERT(0) ;
9969 return ;
9970 }
9971 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9972 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
9973 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
9974 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
9975 {
9976 pWDA->wdaAmpSessionOn = VOS_FALSE;
9977 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009978 vos_mem_free(pWdaParams->wdaMsgParam) ;
9979 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9980 vos_mem_free(pWdaParams) ;
9981 /*
9982 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
9983 * param here
9984 */
Jeff Johnson295189b2012-06-20 16:38:30 -07009985 return ;
9986}
Yue Ma7f44bbe2013-04-12 11:47:39 -07009987/*
9988 * FUNCTION: WDA_BtAmpEventReqCallback
9989 * Free memory.
9990 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
9991 */
9992void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
9993{
9994 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9995 tWDA_CbContext *pWDA;
9996 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009997
Yue Ma7f44bbe2013-04-12 11:47:39 -07009998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9999 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10000
10001 if(NULL == pWdaParams)
10002 {
10003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10004 "%s: pWdaParams received NULL", __func__);
10005 VOS_ASSERT(0);
10006 return;
10007 }
10008
10009 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10010 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
10011
10012 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
10013 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10014 {
10015 pWDA->wdaAmpSessionOn = VOS_FALSE;
10016 }
10017
10018 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10019 {
10020 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10021 vos_mem_free(pWdaParams->wdaMsgParam);
10022 vos_mem_free(pWdaParams);
10023 }
10024
10025 return;
10026}
Jeff Johnson295189b2012-06-20 16:38:30 -070010027/*
10028 * FUNCTION: WDA_ProcessBtAmpEventReq
10029 * Request to WDI to Update with BT AMP events.
10030 */
10031VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
10032 tSmeBtAmpEvent *pBtAmpEventParams)
10033{
10034 WDI_Status status = WDI_STATUS_SUCCESS ;
10035 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
10036 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
10037 sizeof(WDI_BtAmpEventParamsType)) ;
10038 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010040 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010041 if(NULL == wdiBtAmpEventParam)
10042 {
10043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010044 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010045 VOS_ASSERT(0);
10046 return VOS_STATUS_E_NOMEM;
10047 }
10048 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10049 if(NULL == pWdaParams)
10050 {
10051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010052 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010053 VOS_ASSERT(0);
10054 vos_mem_free(wdiBtAmpEventParam);
10055 return VOS_STATUS_E_NOMEM;
10056 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010057 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
10058 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010059 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
10060 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010061 /* Store BT AMP event pointer, as this will be used for response */
10062 /* store Params pass it to WDI */
10063 pWdaParams->pWdaContext = pWDA;
10064 pWdaParams->wdaMsgParam = pBtAmpEventParams;
10065 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010066 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010067 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010068 if(IS_WDI_STATUS_FAILURE(status))
10069 {
10070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10071 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
10072 vos_mem_free(pWdaParams->wdaMsgParam) ;
10073 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10074 vos_mem_free(pWdaParams) ;
10075 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010076 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10077 {
10078 pWDA->wdaAmpSessionOn = VOS_TRUE;
10079 }
10080 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010081}
10082
Jeff Johnson295189b2012-06-20 16:38:30 -070010083/*
10084 * FUNCTION: WDA_FTMCommandReqCallback
10085 * Handle FTM CMD response came from HAL
10086 * Route responce to HDD FTM
10087 */
10088void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
10089 void *usrData)
10090{
10091 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010092 if((NULL == pWDA) || (NULL == ftmCmdRspData))
10093 {
10094 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010095 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010096 return;
10097 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010098 /* Release Current FTM Command Request */
10099 vos_mem_free(pWDA->wdaFTMCmdReq);
10100 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010101 /* Post FTM Responce to HDD FTM */
10102 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010103 return;
10104}
Jeff Johnson295189b2012-06-20 16:38:30 -070010105/*
10106 * FUNCTION: WDA_ProcessFTMCommand
10107 * Send FTM command to WDI
10108 */
10109VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
10110 tPttMsgbuffer *pPTTFtmCmd)
10111{
10112 WDI_Status status = WDI_STATUS_SUCCESS;
10113 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010114 ftmCMDReq = (WDI_FTMCommandReqType *)
10115 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
10116 if(NULL == ftmCMDReq)
10117 {
10118 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10119 "WDA FTM Command buffer alloc fail");
10120 return VOS_STATUS_E_NOMEM;
10121 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010122 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
10123 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070010124 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070010125 /* Send command to WDI */
10126 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070010127 return status;
10128}
Jeff Johnsone7245742012-09-05 17:12:55 -070010129#ifdef FEATURE_OEM_DATA_SUPPORT
10130/*
10131 * FUNCTION: WDA_StartOemDataReqCallback
10132 *
10133 */
10134void WDA_StartOemDataReqCallback(
10135 WDI_oemDataRspParamsType *wdiOemDataRspParams,
10136 void* pUserData)
10137{
10138 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010139 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10140 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -070010141 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010142
Jeff Johnsone7245742012-09-05 17:12:55 -070010143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010144 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010145
10146 if(NULL == pWdaParams)
10147 {
10148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010149 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010150 VOS_ASSERT(0) ;
10151 return ;
10152 }
10153 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10154
Jeff Johnsone7245742012-09-05 17:12:55 -070010155 if(NULL == pWDA)
10156 {
10157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010158 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010159 VOS_ASSERT(0);
10160 return ;
10161 }
10162
10163 /*
10164 * Allocate memory for response params sent to PE
10165 */
10166 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
10167
10168 // Check if memory is allocated for OemdataMeasRsp Params.
10169 if(NULL == pOemDataRspParams)
10170 {
10171 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10172 "OEM DATA WDA callback alloc fail");
10173 VOS_ASSERT(0) ;
10174 return;
10175 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010176
Jeff Johnsone7245742012-09-05 17:12:55 -070010177 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010178 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10179 vos_mem_free(pWdaParams->wdaMsgParam);
10180 vos_mem_free(pWdaParams) ;
10181
Jeff Johnsone7245742012-09-05 17:12:55 -070010182 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080010183 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070010184 * Also, here success always means that we have atleast one BSSID.
10185 */
10186 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
10187
10188 //enable Tx
10189 status = WDA_ResumeDataTx(pWDA);
10190 if(status != VOS_STATUS_SUCCESS)
10191 {
10192 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
10193 }
10194 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
10195 return ;
10196}
10197/*
10198 * FUNCTION: WDA_ProcessStartOemDataReq
10199 * Send Start Oem Data Req to WDI
10200 */
10201VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
10202 tStartOemDataReq *pOemDataReqParams)
10203{
10204 WDI_Status status = WDI_STATUS_SUCCESS;
10205 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010206 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070010207
10208 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
10209
10210 if(NULL == wdiOemDataReqParams)
10211 {
10212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010213 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010214 VOS_ASSERT(0);
10215 return VOS_STATUS_E_NOMEM;
10216 }
10217
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010218 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
10219 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
10220 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
10221 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070010222
10223 wdiOemDataReqParams->wdiReqStatusCB = NULL;
10224
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010225 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10226 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070010227 {
10228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010229 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010230 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010231 vos_mem_free(pOemDataReqParams);
10232 VOS_ASSERT(0);
10233 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070010234 }
Jeff Johnsone7245742012-09-05 17:12:55 -070010235
Bernald44a1ae2013-01-09 08:30:39 -080010236 pWdaParams->pWdaContext = (void*)pWDA;
10237 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
10238 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010239
10240 status = WDI_StartOemDataReq(wdiOemDataReqParams,
10241 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070010242
10243 if(IS_WDI_STATUS_FAILURE(status))
10244 {
10245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10246 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010247 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10248 vos_mem_free(pWdaParams->wdaMsgParam);
10249 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070010250 }
10251 return CONVERT_WDI2VOS_STATUS(status) ;
10252}
10253#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070010254/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010255 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010256 *
10257 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010258void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010259{
10260 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010262 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010263 if(NULL == pWdaParams)
10264 {
10265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010266 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010267 VOS_ASSERT(0) ;
10268 return ;
10269 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010270
10271 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10272 vos_mem_free(pWdaParams->wdaMsgParam);
10273 vos_mem_free(pWdaParams);
10274
10275 return ;
10276}
10277/*
10278 * FUNCTION: WDA_SetTxPerTrackingReqCallback
10279 * Free memory.
10280 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
10281 */
10282void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
10283{
10284 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10285
10286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10287 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10288
10289 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010290 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070010291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10292 "%s: pWdaParams received NULL", __func__);
10293 VOS_ASSERT(0);
10294 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010295 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010296
10297 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010298 {
10299 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010300 vos_mem_free(pWdaParams->wdaMsgParam);
10301 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010302 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010303
10304 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010305}
Jeff Johnson295189b2012-06-20 16:38:30 -070010306#ifdef WLAN_FEATURE_GTK_OFFLOAD
10307/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010308 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010309 *
10310 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010311void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010312 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010313{
10314 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10315
10316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010317 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080010318 if(NULL == pWdaParams)
10319 {
10320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10321 "%s: pWdaParams received NULL", __func__);
10322 VOS_ASSERT(0);
10323 return;
10324 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010325
Jeff Johnson295189b2012-06-20 16:38:30 -070010326 vos_mem_free(pWdaParams->wdaMsgParam) ;
10327 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10328 vos_mem_free(pWdaParams) ;
10329
10330 //print a msg, nothing else to do
10331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010332 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010333
10334 return ;
10335}
Yue Ma7f44bbe2013-04-12 11:47:39 -070010336/*
10337 * FUNCTION: WDA_GTKOffloadReqCallback
10338 * Free memory.
10339 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
10340 */
10341void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
10342{
10343 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010344
Yue Ma7f44bbe2013-04-12 11:47:39 -070010345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10346 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10347
10348 if(NULL == pWdaParams)
10349 {
10350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10351 "%s: pWdaParams received NULL", __func__);
10352 VOS_ASSERT(0);
10353 return;
10354 }
10355
10356 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10357 {
10358 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10359 vos_mem_free(pWdaParams->wdaMsgParam);
10360 vos_mem_free(pWdaParams);
10361 }
10362
10363 return;
10364}
Jeff Johnson295189b2012-06-20 16:38:30 -070010365/*
10366 * FUNCTION: WDA_ProcessGTKOffloadReq
10367 * Request to WDI to set the filter to minimize unnecessary host wakeup due
10368 * to broadcast traffic (sta mode).
10369 */
10370VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
10371 tpSirGtkOffloadParams pGtkOffloadParams)
10372{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010373 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010374 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
10375 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
10376 sizeof(WDI_GtkOffloadReqMsg)) ;
10377 tWDA_ReqParams *pWdaParams ;
10378
10379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010380 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010381
10382 if(NULL == wdiGtkOffloadReqMsg)
10383 {
10384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010385 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010386 VOS_ASSERT(0);
10387 return VOS_STATUS_E_NOMEM;
10388 }
10389
10390 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10391 if(NULL == pWdaParams)
10392 {
10393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010394 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010395 VOS_ASSERT(0);
10396 vos_mem_free(wdiGtkOffloadReqMsg);
10397 return VOS_STATUS_E_NOMEM;
10398 }
10399
10400 //
10401 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
10402 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010403
10404 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010405 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010406
Jeff Johnson295189b2012-06-20 16:38:30 -070010407 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
10408 // Copy KCK
10409 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
10410 // Copy KEK
10411 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
10412 // Copy KeyReplayCounter
10413 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
10414 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
10415
Yue Ma7f44bbe2013-04-12 11:47:39 -070010416 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
10417 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010418
Jeff Johnson295189b2012-06-20 16:38:30 -070010419
10420 /* Store Params pass it to WDI */
10421 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
10422 pWdaParams->pWdaContext = pWDA;
10423 /* Store param pointer as passed in by caller */
10424 pWdaParams->wdaMsgParam = pGtkOffloadParams;
10425
Yue Ma7f44bbe2013-04-12 11:47:39 -070010426 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010427
10428 if(IS_WDI_STATUS_FAILURE(status))
10429 {
10430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10431 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
10432 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10433 vos_mem_free(pWdaParams->wdaMsgParam);
10434 vos_mem_free(pWdaParams);
10435 }
10436
10437 return CONVERT_WDI2VOS_STATUS(status) ;
10438}
10439
10440/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010441 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010442 *
10443 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010444void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010445 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010446{
10447 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10448 tWDA_CbContext *pWDA;
10449 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Sameer Thalappile8202632013-07-09 11:07:40 -070010450 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010451 vos_msg_t vosMsg;
10452
10453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010454 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080010455 if(NULL == pWdaParams)
10456 {
10457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10458 "%s: pWdaParams received NULL", __func__);
10459 VOS_ASSERT(0);
10460 return;
10461 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010462
10463 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
10464 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
10465
10466 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
10467 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
10468
10469 /* Message Header */
10470 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070010471 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010472
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010473 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
10474 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
10475 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
10476 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
10477 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070010478
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010479 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
10480 pwdiGtkOffloadGetInfoRsparams->bssId,
10481 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010482 /* VOS message wrapper */
10483 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
10484 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
10485 vosMsg.bodyval = 0;
10486
10487 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10488 {
10489 /* free the mem and return */
10490 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
10491 }
10492
10493 vos_mem_free(pWdaParams->wdaMsgParam) ;
10494 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10495 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010496
10497 return;
10498}
10499/*
10500 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
10501 * Free memory and send RSP back to SME.
10502 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
10503 */
10504void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
10505{
10506 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10507 vos_msg_t vosMsg;
10508
10509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10510 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10511
10512 if(NULL == pWdaParams)
10513 {
10514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10515 "%s: pWdaParams received NULL", __func__);
10516 VOS_ASSERT(0);
10517 return;
10518 }
10519
10520 /* VOS message wrapper */
10521 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
10522 vosMsg.bodyptr = NULL;
10523 vosMsg.bodyval = 0;
10524
10525 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10526 {
10527 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10528 vos_mem_free(pWdaParams->wdaMsgParam);
10529 vos_mem_free(pWdaParams);
10530 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
10531 }
10532
10533 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010534}
10535#endif
10536
10537/*
10538 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
10539 * Request to WDI to set Tx Per Tracking configurations
10540 */
10541VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
10542{
10543 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010544 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010545 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
10546 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
10547 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
10548 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010550 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010551 if(NULL == pwdiSetTxPerTrackingReqParams)
10552 {
10553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010554 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010555 vos_mem_free(pTxPerTrackingParams);
10556 VOS_ASSERT(0);
10557 return VOS_STATUS_E_NOMEM;
10558 }
10559 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10560 if(NULL == pWdaParams)
10561 {
10562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010563 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010564 vos_mem_free(pwdiSetTxPerTrackingReqParams);
10565 vos_mem_free(pTxPerTrackingParams);
10566 VOS_ASSERT(0);
10567 return VOS_STATUS_E_NOMEM;
10568 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010569 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
10570 pTxPerTrackingParams->ucTxPerTrackingEnable;
10571 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
10572 pTxPerTrackingParams->ucTxPerTrackingPeriod;
10573 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
10574 pTxPerTrackingParams->ucTxPerTrackingRatio;
10575 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
10576 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010577 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
10578 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010579 /* Store param pointer as passed in by caller */
10580 /* store Params pass it to WDI
10581 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
10582 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
10583 pWdaParams->pWdaContext = pWDA;
10584 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010585 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010586 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010587 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010588 {
10589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10590 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010591 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010592 vos_mem_free(pWdaParams->wdaMsgParam) ;
10593 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10594 vos_mem_free(pWdaParams) ;
10595 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010596 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010597
10598}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010599/*
10600 * FUNCTION: WDA_HALDumpCmdCallback
10601 * Send the VOS complete .
10602 */
10603void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
10604 void* pUserData)
10605{
10606 tANI_U8 *buffer = NULL;
10607 tWDA_CbContext *pWDA = NULL;
10608 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010609 if(NULL == pWdaParams)
10610 {
10611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010612 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010613 VOS_ASSERT(0) ;
10614 return ;
10615 }
10616
10617 pWDA = pWdaParams->pWdaContext;
10618 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010619 if(wdiRspParams->usBufferLen > 0)
10620 {
10621 /*Copy the Resp data to UMAC supplied buffer*/
10622 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
10623 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010624 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10625 vos_mem_free(pWdaParams);
10626
10627 /* Indicate VOSS about the start complete */
10628 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070010629 return ;
10630}
10631
Jeff Johnson295189b2012-06-20 16:38:30 -070010632/*
10633 * FUNCTION: WDA_ProcessHALDumpCmdReq
10634 * Send Dump command to WDI
10635 */
10636VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
10637 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
10638 tANI_U32 arg4, tANI_U8 *pBuffer)
10639{
10640 WDI_Status status = WDI_STATUS_SUCCESS;
10641 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
10642 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
10643 tWDA_ReqParams *pWdaParams ;
10644 pVosContextType pVosContext = NULL;
10645 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010646 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
10647 (void *)pMac);
10648
10649 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10650 if(NULL == pWdaParams)
10651 {
10652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010653 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010654 return VOS_STATUS_E_NOMEM;
10655 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010656 /* Allocate memory WDI request structure*/
10657 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
10658 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
10659 if(NULL == wdiHALDumpCmdReqParam)
10660 {
10661 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10662 "WDA HAL DUMP Command buffer alloc fail");
10663 vos_mem_free(pWdaParams);
10664 return WDI_STATUS_E_FAILURE;
10665 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010666 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070010667 /* Extract the arguments */
10668 wdiHalDumpCmdInfo->command = cmd;
10669 wdiHalDumpCmdInfo->argument1 = arg1;
10670 wdiHalDumpCmdInfo->argument2 = arg2;
10671 wdiHalDumpCmdInfo->argument3 = arg3;
10672 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070010673 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010674 pWdaParams->pWdaContext = pVosContext->pWDAContext;
10675
10676 /* Response message will be passed through the buffer */
10677 pWdaParams->wdaMsgParam = (void *)pBuffer;
10678
10679 /* store Params pass it to WDI */
10680 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010681 /* Send command to WDI */
10682 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -080010683 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), WDA_DUMPCMD_WAIT_TIMEOUT );
Jeff Johnson295189b2012-06-20 16:38:30 -070010684 if ( vStatus != VOS_STATUS_SUCCESS )
10685 {
10686 if ( vStatus == VOS_STATUS_E_TIMEOUT )
10687 {
10688 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010689 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010690 }
10691 else
10692 {
10693 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010694 "%s: WDA_HALDUMP reporting other error",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010695 }
10696 VOS_ASSERT(0);
10697 }
10698 return status;
10699}
Jeff Johnson295189b2012-06-20 16:38:30 -070010700#ifdef WLAN_FEATURE_GTK_OFFLOAD
10701/*
10702 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
10703 * Request to WDI to get GTK Offload Information
10704 */
10705VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
10706 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
10707{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010708 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010709 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
10710 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
10711 tWDA_ReqParams *pWdaParams ;
10712
10713 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
10714 {
10715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010716 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010717 VOS_ASSERT(0);
10718 return VOS_STATUS_E_NOMEM;
10719 }
10720
10721 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10722 if(NULL == pWdaParams)
10723 {
10724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010725 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010726 VOS_ASSERT(0);
10727 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
10728 return VOS_STATUS_E_NOMEM;
10729 }
10730
Yue Ma7f44bbe2013-04-12 11:47:39 -070010731 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
10732 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010733
Jeff Johnson295189b2012-06-20 16:38:30 -070010734 /* Store Params pass it to WDI */
10735 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
10736 pWdaParams->pWdaContext = pWDA;
10737 /* Store param pointer as passed in by caller */
10738 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
10739
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010740 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010741 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010742
Yue Ma7f44bbe2013-04-12 11:47:39 -070010743 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010744
10745 if(IS_WDI_STATUS_FAILURE(status))
10746 {
10747 /* failure returned by WDI API */
10748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10749 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
10750 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10751 vos_mem_free(pWdaParams) ;
10752 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
10753 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
10754 }
10755
10756 return CONVERT_WDI2VOS_STATUS(status) ;
10757}
10758#endif // WLAN_FEATURE_GTK_OFFLOAD
10759
10760/*
Yue Mab9c86f42013-08-14 15:59:08 -070010761 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
10762 *
10763 */
10764VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
10765 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
10766{
10767 WDI_Status wdiStatus;
10768 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
10769
10770 addPeriodicTxPtrnParams =
10771 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
10772
10773 if (NULL == addPeriodicTxPtrnParams)
10774 {
10775 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10776 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
10777 __func__);
10778
10779 return VOS_STATUS_E_NOMEM;
10780 }
10781
10782 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
10783 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
10784
10785 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
10786 addPeriodicTxPtrnParams->pUserData = pWDA;
10787
10788 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
10789
10790 if (WDI_STATUS_PENDING == wdiStatus)
10791 {
10792 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10793 "Pending received for %s:%d", __func__, __LINE__ );
10794 }
10795 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
10796 {
10797 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10798 "Failure in %s:%d", __func__, __LINE__ );
10799 }
10800
10801 vos_mem_free(addPeriodicTxPtrnParams);
10802
10803 return CONVERT_WDI2VOS_STATUS(wdiStatus);
10804}
10805
10806/*
10807 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
10808 *
10809 */
10810VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
10811 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
10812{
10813 WDI_Status wdiStatus;
10814 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
10815
10816 delPeriodicTxPtrnParams =
10817 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
10818
10819 if (NULL == delPeriodicTxPtrnParams)
10820 {
10821 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10822 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
10823 __func__);
10824
10825 return VOS_STATUS_E_NOMEM;
10826 }
10827
10828 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
10829 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
10830
10831 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
10832 delPeriodicTxPtrnParams->pUserData = pWDA;
10833
10834 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
10835
10836 if (WDI_STATUS_PENDING == wdiStatus)
10837 {
10838 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10839 "Pending received for %s:%d", __func__, __LINE__ );
10840 }
10841 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
10842 {
10843 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10844 "Failure in %s:%d", __func__, __LINE__ );
10845 }
10846
10847 vos_mem_free(delPeriodicTxPtrnParams);
10848
10849 return CONVERT_WDI2VOS_STATUS(wdiStatus);
10850}
10851
Rajeev79dbe4c2013-10-05 11:03:42 +053010852#ifdef FEATURE_WLAN_BATCH_SCAN
10853/*
10854 * FUNCTION: WDA_ProcessStopBatchScanInd
10855 *
10856 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
10857 *
10858 * PARAM:
10859 * pWDA: pointer to WDA context
10860 * pReq: pointer to stop batch scan request
10861 */
10862VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
10863 tSirStopBatchScanInd *pReq)
10864{
10865 WDI_Status wdiStatus;
10866 WDI_StopBatchScanIndType wdiReq;
10867
10868 wdiReq.param = pReq->param;
10869
10870 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
10871
10872 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
10873 {
10874 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10875 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
10876 }
10877
10878 vos_mem_free(pReq);
10879
10880 return CONVERT_WDI2VOS_STATUS(wdiStatus);
10881}
10882/*==========================================================================
10883 FUNCTION WDA_ProcessTriggerBatchScanResultInd
10884
10885 DESCRIPTION
10886 API to pull batch scan result from FW
10887
10888 PARAMETERS
10889 pWDA: Pointer to WDA context
10890 pGetBatchScanReq: Pointer to get batch scan result indication
10891
10892 RETURN VALUE
10893 NONE
10894
10895===========================================================================*/
10896VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
10897 tSirTriggerBatchScanResultInd *pReq)
10898{
10899 WDI_Status wdiStatus;
10900 WDI_TriggerBatchScanResultIndType wdiReq;
10901
10902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10903 "------> %s " ,__func__);
10904
10905 wdiReq.param = pReq->param;
10906
10907 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
10908
10909 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
10910 {
10911 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10912 "Trigger batch scan result ind failed %s:%d",
10913 __func__, wdiStatus);
10914 }
10915
10916 vos_mem_free(pReq);
10917
10918 return CONVERT_WDI2VOS_STATUS(wdiStatus);
10919}
10920
10921/*==========================================================================
10922 FUNCTION WDA_SetBatchScanRespCallback
10923
10924 DESCRIPTION
10925 API to process set batch scan response from FW
10926
10927 PARAMETERS
10928 pRsp: Pointer to set batch scan response
10929 pUserData: Pointer to user data
10930
10931 RETURN VALUE
10932 NONE
10933
10934===========================================================================*/
10935void WDA_SetBatchScanRespCallback
10936(
10937 WDI_SetBatchScanRspType *pRsp,
10938 void* pUserData
10939)
10940{
10941 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
10942 tpAniSirGlobal pMac;
10943 void *pCallbackContext;
10944 tWDA_CbContext *pWDA = NULL ;
10945 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10946
10947
10948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10949 "<------ %s " ,__func__);
10950 if (NULL == pWdaParams)
10951 {
10952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10953 "%s: pWdaParams received NULL", __func__);
10954 VOS_ASSERT(0) ;
10955 return ;
10956 }
10957
10958 /*extract WDA context*/
10959 pWDA = pWdaParams->pWdaContext;
10960 if (NULL == pWDA)
10961 {
10962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10963 "%s:pWDA is NULL can't invole HDD callback",
10964 __func__);
10965 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10966 vos_mem_free(pWdaParams->wdaMsgParam);
10967 vos_mem_free(pWdaParams);
10968 VOS_ASSERT(0);
10969 return;
10970 }
10971
10972 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10973 vos_mem_free(pWdaParams->wdaMsgParam);
10974 vos_mem_free(pWdaParams);
10975
10976 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
10977 if (NULL == pMac)
10978 {
10979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10980 "%s:pMac is NULL", __func__);
10981 VOS_ASSERT(0);
10982 return;
10983 }
10984
10985 pHddSetBatchScanRsp =
10986 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
10987 if (NULL == pHddSetBatchScanRsp)
10988 {
10989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10990 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
10991 VOS_ASSERT(0);
10992 return;
10993 }
10994
10995 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
10996
10997 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
10998 /*call hdd callback with set batch scan response data*/
10999 if(pMac->pmc.setBatchScanReqCallback)
11000 {
11001 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
11002 }
11003 else
11004 {
11005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11006 "%s:HDD callback is null", __func__);
11007 VOS_ASSERT(0);
11008 }
11009
11010 vos_mem_free(pHddSetBatchScanRsp);
11011 return ;
11012}
11013
11014/*==========================================================================
11015 FUNCTION WDA_ProcessSetBatchScanReq
11016
11017 DESCRIPTION
11018 API to send set batch scan request to WDI
11019
11020 PARAMETERS
11021 pWDA: Pointer to WDA context
11022 pSetBatchScanReq: Pointer to set batch scan req
11023
11024 RETURN VALUE
11025 NONE
11026
11027===========================================================================*/
11028VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
11029 tSirSetBatchScanReq *pSetBatchScanReq)
11030{
11031 WDI_Status status;
11032 tWDA_ReqParams *pWdaParams ;
11033 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
11034
11035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11036 "------> %s " ,__func__);
11037
11038 pWdiSetBatchScanReq =
11039 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
11040 if (NULL == pWdiSetBatchScanReq)
11041 {
11042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11043 "%s: VOS MEM Alloc Failure", __func__);
11044 vos_mem_free(pSetBatchScanReq);
11045 VOS_ASSERT(0);
11046 return VOS_STATUS_E_NOMEM;
11047 }
11048
11049 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
11050 if (NULL == pWdaParams)
11051 {
11052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11053 "%s: VOS MEM Alloc Failure", __func__);
11054 VOS_ASSERT(0);
11055 vos_mem_free(pSetBatchScanReq);
11056 vos_mem_free(pWdiSetBatchScanReq);
11057 return VOS_STATUS_E_NOMEM;
11058 }
11059
11060 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
11061 pWdiSetBatchScanReq->numberOfScansToBatch =
11062 pSetBatchScanReq->numberOfScansToBatch;
11063 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
11064 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
11065 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
11066
11067 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
11068 pWdaParams->pWdaContext = pWDA;
11069 pWdaParams->wdaMsgParam = pSetBatchScanReq;
11070
11071 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
11072 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
11073 if (IS_WDI_STATUS_FAILURE(status))
11074 {
11075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11076 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
11077 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11078 vos_mem_free(pWdaParams->wdaMsgParam);
11079 vos_mem_free(pWdaParams);
11080 }
11081 return CONVERT_WDI2VOS_STATUS(status);
11082}
11083
11084#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053011085/*
11086 * FUNCTION: WDA_ProcessHT40OBSSScanInd
11087 *
11088 * DESCRIPTION: This function sends start/update OBSS scan
11089 * inidcation message to WDI
11090 *
11091 * PARAM:
11092 * pWDA: pointer to WDA context
11093 * pReq: pointer to start OBSS scan request
11094 */
11095VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
11096 tSirHT40OBSSScanInd *pReq)
11097{
11098 WDI_Status status;
11099 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
11100 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053011101
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053011102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11103 "------> %s " ,__func__);
11104 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
11105 wdiOBSSScanParams.pUserData = pWDA;
11106
11107 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
11108 pWdiOBSSScanInd->cmdType = pReq->cmdType;
11109 pWdiOBSSScanInd->scanType = pReq->scanType;
11110 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
11111 pReq->OBSSScanActiveDwellTime;
11112 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
11113 pReq->OBSSScanPassiveDwellTime;
11114 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
11115 pReq->BSSChannelWidthTriggerScanInterval;
11116 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
11117 pReq->BSSWidthChannelTransitionDelayFactor;
11118 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
11119 pReq->OBSSScanActiveTotalPerChannel;
11120 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
11121 pReq->OBSSScanPassiveTotalPerChannel;
11122 pWdiOBSSScanInd->OBSSScanActivityThreshold =
11123 pReq->OBSSScanActivityThreshold;
11124 pWdiOBSSScanInd->channelCount = pReq->channelCount;
11125 vos_mem_copy(pWdiOBSSScanInd->channels,
11126 pReq->channels,
11127 pReq->channelCount);
11128 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
11129 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
11130 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
11131 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
11132 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
11133
11134 vos_mem_copy(pWdiOBSSScanInd->ieField,
11135 pReq->ieField,
11136 pReq->ieFieldLen);
11137
11138 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
11139 if (WDI_STATUS_PENDING == status)
11140 {
11141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11142 "Pending received for %s:%d ",__func__,__LINE__ );
11143 }
11144 else if (WDI_STATUS_SUCCESS_SYNC != status)
11145 {
11146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11147 "Failure in %s:%d ",__func__,__LINE__ );
11148 }
11149 return CONVERT_WDI2VOS_STATUS(status) ;
11150}
11151/*
11152 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
11153 *
11154 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
11155 *
11156 * PARAM:
11157 * pWDA: pointer to WDA context
11158 * pReq: pointer to stop batch scan request
11159 */
11160VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
11161 tANI_U8 *bssIdx)
11162{
11163 WDI_Status status;
11164
11165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11166 "------> %s " ,__func__);
11167
11168 status = WDI_HT40OBSSStopScanInd(*bssIdx);
11169 if (WDI_STATUS_PENDING == status)
11170 {
11171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11172 "Pending received for %s:%d ",__func__,__LINE__ );
11173 }
11174 else if (WDI_STATUS_SUCCESS_SYNC != status)
11175 {
11176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11177 "Failure in %s:%d ",__func__,__LINE__ );
11178 }
11179 return CONVERT_WDI2VOS_STATUS(status) ;
11180}
Yue Mab9c86f42013-08-14 15:59:08 -070011181/*
Chittajit Mitraf5413a42013-10-18 14:20:08 -070011182 * FUNCTION: WDA_ProcessRateUpdateInd
11183 *
11184 */
11185VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
11186 tSirRateUpdateInd *pRateUpdateParams)
11187{
11188 WDI_Status wdiStatus;
11189 WDI_RateUpdateIndParams rateUpdateParams;
11190
11191 vos_mem_copy(rateUpdateParams.bssid,
11192 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
11193
11194 rateUpdateParams.ucastDataRateTxFlag =
11195 pRateUpdateParams->ucastDataRateTxFlag;
11196 rateUpdateParams.reliableMcastDataRateTxFlag =
11197 pRateUpdateParams->reliableMcastDataRateTxFlag;
11198 rateUpdateParams.mcastDataRate24GHzTxFlag =
11199 pRateUpdateParams->mcastDataRate24GHzTxFlag;
11200 rateUpdateParams.mcastDataRate5GHzTxFlag =
11201 pRateUpdateParams->mcastDataRate5GHzTxFlag;
11202
11203 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
11204 rateUpdateParams.reliableMcastDataRate =
11205 pRateUpdateParams->reliableMcastDataRate;
11206 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
11207 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
11208
11209 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
11210 rateUpdateParams.pUserData = pWDA;
11211
11212 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
11213
11214 if (WDI_STATUS_PENDING == wdiStatus)
11215 {
11216 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11217 "Pending received for %s:%d", __func__, __LINE__ );
11218 }
11219 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11220 {
11221 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11222 "Failure in %s:%d", __func__, __LINE__ );
11223 }
11224
11225 vos_mem_free(pRateUpdateParams);
11226
11227 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11228}
11229
11230/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011231 * -------------------------------------------------------------------------
11232 * DATA interface with WDI for Mgmt Frames
11233 * -------------------------------------------------------------------------
11234 */
Jeff Johnson295189b2012-06-20 16:38:30 -070011235/*
11236 * FUNCTION: WDA_TxComplete
11237 * Callback function for the WDA_TxPacket
11238 */
11239VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
11240 VOS_STATUS status )
11241{
11242
11243 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
11244 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011245 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011246
11247 if(NULL == wdaContext)
11248 {
11249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11250 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011251 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011252 VOS_ASSERT(0);
11253 return VOS_STATUS_E_FAILURE;
11254 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011255
11256 /*Check if frame was timed out or not*/
11257 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
11258 (v_PVOID_t)&uUserData);
11259
11260 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
11261 {
11262 /*Discard frame - no further processing is needed*/
11263 vos_pkt_return_packet(pData);
11264 return VOS_STATUS_SUCCESS;
11265 }
11266
Jeff Johnson295189b2012-06-20 16:38:30 -070011267 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
11268 if( NULL!=wdaContext->pTxCbFunc)
11269 {
11270 /*check if packet is freed already*/
11271 if(vos_atomic_set_U32(&wdaContext->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED) == (v_U32_t)pData)
11272 {
11273 wdaContext->pTxCbFunc(pMac, pData);
11274 }
11275 else
11276 {
11277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053011278 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011279 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070011280 //Return from here since we reaching here because the packet already timeout
11281 return status;
11282 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011283 }
11284
11285 /*
11286 * Trigger the event to bring the HAL TL Tx complete function to come
11287 * out of wait
11288 * Let the coe above to complete the packet first. When this event is set,
11289 * the thread waiting for the event may run and set Vospacket_freed causing the original
11290 * packet not being freed.
11291 */
11292 status = vos_event_set(&wdaContext->txFrameEvent);
11293 if(!VOS_IS_STATUS_SUCCESS(status))
11294 {
11295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011296 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011297 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011298 return status;
11299}
Jeff Johnson295189b2012-06-20 16:38:30 -070011300/*
11301 * FUNCTION: WDA_TxPacket
11302 * Forward TX management frame to WDI
11303 */
11304VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
11305 void *pFrmBuf,
11306 tANI_U16 frmLen,
11307 eFrameType frmType,
11308 eFrameTxDir txDir,
11309 tANI_U8 tid,
11310 pWDATxRxCompFunc pCompFunc,
11311 void *pData,
11312 pWDAAckFnTxComp pAckTxComp,
Kanchanapally, Vidyullathaf9426e52013-12-24 17:28:54 +053011313 tANI_U32 txFlag)
Jeff Johnson295189b2012-06-20 16:38:30 -070011314{
11315 VOS_STATUS status = VOS_STATUS_SUCCESS ;
11316 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
11317 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
11318 tANI_U8 eventIdx = 0;
11319 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
11320 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -070011321 if((NULL == pWDA)||(NULL == pFrmBuf))
11322 {
11323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053011324 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011325 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070011326 VOS_ASSERT(0);
11327 return VOS_STATUS_E_FAILURE;
11328 }
11329
11330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011331 "Tx Mgmt Frame Subtype: %d alloc(%p)", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070011332 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
11333 if(NULL == pMac)
11334 {
11335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011336 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011337 VOS_ASSERT(0);
11338 return VOS_STATUS_E_FAILURE;
11339 }
11340
11341
11342
11343 /* store the call back function in WDA context */
11344 pWDA->pTxCbFunc = pCompFunc;
11345 /* store the call back for the function of ackTxComplete */
11346 if( pAckTxComp )
11347 {
Jeff Johnsone7245742012-09-05 17:12:55 -070011348 if( NULL != pWDA->pAckTxCbFunc )
11349 {
11350 /* Already TxComp is active no need to active again */
11351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011352 "There is already one request pending for tx complete");
Jeff Johnsone7245742012-09-05 17:12:55 -070011353 pWDA->pAckTxCbFunc( pMac, 0);
11354 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011355
Jeff Johnsone7245742012-09-05 17:12:55 -070011356 if( VOS_STATUS_SUCCESS !=
11357 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11358 {
11359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11360 "Tx Complete timeout Timer Stop Failed ");
11361 }
11362 else
11363 {
11364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080011365 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070011366 }
11367 }
11368
11369 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
11370 pWDA->pAckTxCbFunc = pAckTxComp;
11371 if( VOS_STATUS_SUCCESS !=
11372 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
11373 {
11374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11375 "Tx Complete Timer Start Failed ");
11376 pWDA->pAckTxCbFunc = NULL;
11377 return eHAL_STATUS_FAILURE;
11378 }
11379 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011380 /* Reset the event to be not signalled */
11381 status = vos_event_reset(&pWDA->txFrameEvent);
11382 if(!VOS_IS_STATUS_SUCCESS(status))
11383 {
11384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011385 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011386 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
11387 if( pAckTxComp )
11388 {
11389 pWDA->pAckTxCbFunc = NULL;
11390 if( VOS_STATUS_SUCCESS !=
11391 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11392 {
11393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11394 "Tx Complete timeout Timer Stop Failed ");
11395 }
11396 }
11397 return VOS_STATUS_E_FAILURE;
11398 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011399
11400 /* If Peer Sta mask is set don't overwrite to self sta */
11401 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070011402 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011403 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070011404 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011405 else
11406 {
Ganesh K08bce952012-12-13 15:04:41 -080011407 /* Get system role, use the self station if in unknown role or STA role */
11408 systemRole = wdaGetGlobalSystemRole(pMac);
11409 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
11410 (( eSYSTEM_STA_ROLE == systemRole )
Mohit Khanna698ba2a2012-12-04 15:08:18 -080011411#if defined FEATURE_WLAN_CCX || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080011412 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011413#endif
Ganesh K08bce952012-12-13 15:04:41 -080011414 ))
11415 {
11416 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
11417 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080011418 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011419
Jeff Johnsone7245742012-09-05 17:12:55 -070011420 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
11421 disassoc frame reaches the HW, HAL has already deleted the peer station */
11422 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070011423 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080011424 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070011425 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070011426 {
Jeff Johnson295189b2012-06-20 16:38:30 -070011427 /*Send Probe request frames on self sta idx*/
11428 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070011429 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011430 /* Since we donot want probe responses to be retried, send probe responses
11431 through the NO_ACK queues */
11432 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
11433 {
11434 //probe response is sent out using self station and no retries options.
11435 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
11436 }
11437 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
11438 {
11439 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
11440 }
11441 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011442 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
11443
11444 /*Set frame tag to 0
11445 We will use the WDA user data in order to tag a frame as expired*/
11446 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
11447 (v_PVOID_t)0);
11448
11449
11450 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
11451 frmLen, ucTypeSubType, tid,
11452 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
11453 {
11454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011455 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011456 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
11457 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);/*reset the VosPacket_freed*/
11458 if( pAckTxComp )
11459 {
11460 pWDA->pAckTxCbFunc = NULL;
11461 if( VOS_STATUS_SUCCESS !=
11462 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11463 {
11464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11465 "Tx Complete timeout Timer Stop Failed ");
11466 }
11467 }
11468 return VOS_STATUS_E_FAILURE;
11469 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011470 /*
11471 * Wait for the event to be set by the TL, to get the response of TX
11472 * complete, this event should be set by the Callback function called by TL
11473 */
11474 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
11475 &eventIdx);
11476 if(!VOS_IS_STATUS_SUCCESS(status))
11477 {
11478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11479 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011480 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011481 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
11482 after the packet gets completed(packet freed once)*/
11483
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070011484 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
schang6295e542013-03-12 15:31:23 -070011485 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070011486
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011487 /*Tag Frame as timed out for later deletion*/
11488 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
11489 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
11490
Jeff Johnson295189b2012-06-20 16:38:30 -070011491 /* check whether the packet was freed already,so need not free again when
11492 * TL calls the WDA_Txcomplete routine
11493 */
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011494 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);
11495 /*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 -070011496 {
11497 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011498 } */
11499
Jeff Johnson295189b2012-06-20 16:38:30 -070011500 if( pAckTxComp )
11501 {
11502 pWDA->pAckTxCbFunc = NULL;
11503 if( VOS_STATUS_SUCCESS !=
11504 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11505 {
11506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11507 "Tx Complete timeout Timer Stop Failed ");
11508 }
11509 }
11510 status = VOS_STATUS_E_FAILURE;
11511 }
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053011512#ifdef WLAN_DUMP_MGMTFRAMES
11513 if (VOS_IS_STATUS_SUCCESS(status))
11514 {
11515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11516 "%s() TX packet : SubType %d", __func__,pFc->subType);
11517 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11518 pData, frmLen);
11519 }
11520#endif
11521
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080011522 if (VOS_IS_STATUS_SUCCESS(status))
11523 {
11524 if (pMac->fEnableDebugLog & 0x1)
11525 {
11526 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
11527 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
11528 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
11529 {
11530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
11531 pFc->type, pFc->subType);
11532 }
11533 }
11534 }
11535
11536
Jeff Johnson295189b2012-06-20 16:38:30 -070011537 return status;
11538}
Jeff Johnson295189b2012-06-20 16:38:30 -070011539/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011540 * FUNCTION: WDA_ProcessDHCPStartInd
11541 * Forward DHCP Start to WDI
11542 */
11543static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
11544 tAniDHCPInd *dhcpStartInd)
11545{
11546 WDI_Status status;
11547 WDI_DHCPInd *wdiDHCPInd = (WDI_DHCPInd*)vos_mem_malloc(sizeof(WDI_DHCPInd)) ;
11548 if (NULL == wdiDHCPInd)
11549 {
11550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11551 "%s: VOS MEM Alloc Failure", __func__);
11552 VOS_ASSERT(0);
11553 vos_mem_free(dhcpStartInd);
11554 return VOS_STATUS_E_NOMEM;
11555 }
11556
11557 wdiDHCPInd->device_mode = dhcpStartInd->device_mode;
11558 vos_mem_copy(wdiDHCPInd->macAddr, dhcpStartInd->macAddr,
11559 sizeof(tSirMacAddr));
11560
11561 status = WDI_dhcpStartInd(wdiDHCPInd);
11562
11563 if (IS_WDI_STATUS_FAILURE(status))
11564 {
11565 vos_mem_free(wdiDHCPInd);
11566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11567 "DHCP Start Indication failed");
11568 }
11569 vos_mem_free(dhcpStartInd);
11570 return CONVERT_WDI2VOS_STATUS(status) ;
11571}
11572
11573 /*
11574 * FUNCTION: WDA_ProcessDHCPStopInd
11575 * Forward DHCP Stop to WDI
11576 */
11577 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
11578 tAniDHCPInd *dhcpStopInd)
11579 {
11580 WDI_Status status;
11581 WDI_DHCPInd *wdiDHCPInd = (WDI_DHCPInd*)vos_mem_malloc(sizeof(WDI_DHCPInd)) ;
11582 if (NULL == wdiDHCPInd)
11583 {
11584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11585 "%s: VOS MEM Alloc Failure", __func__);
11586 VOS_ASSERT(0);
11587 vos_mem_free(dhcpStopInd);
11588 return VOS_STATUS_E_NOMEM;
11589 }
11590 wdiDHCPInd->device_mode = dhcpStopInd->device_mode;
11591 vos_mem_copy(wdiDHCPInd->macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
11592 status = WDI_dhcpStopInd(wdiDHCPInd);
11593 if (IS_WDI_STATUS_FAILURE(status))
11594 {
11595 vos_mem_free(wdiDHCPInd);
11596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11597 "DHCP Start Indication failed");
11598 }
11599 vos_mem_free(dhcpStopInd);
11600 return CONVERT_WDI2VOS_STATUS(status) ;
11601 }
11602
11603/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011604 * FUNCTION: WDA_McProcessMsg
11605 * Trigger DAL-AL to start CFG download
11606 */
11607VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
11608{
11609 VOS_STATUS status = VOS_STATUS_SUCCESS;
11610 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011611 if(NULL == pMsg)
11612 {
11613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011614 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011615 VOS_ASSERT(0);
11616 return VOS_STATUS_E_FAILURE;
11617 }
11618
11619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011620 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070011621
11622 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
11623 if(NULL == pWDA )
11624 {
11625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011626 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011627 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070011628 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070011629 return VOS_STATUS_E_FAILURE;
11630 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011631 /* Process all the WDA messages.. */
11632 switch( pMsg->type )
11633 {
11634 case WNI_CFG_DNLD_REQ:
11635 {
11636 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070011637 /* call WDA complete event if config download success */
11638 if( VOS_IS_STATUS_SUCCESS(status) )
11639 {
11640 vos_WDAComplete_cback(pVosContext);
11641 }
11642 else
11643 {
11644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11645 "WDA Config Download failure" );
11646 }
11647 break ;
11648 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011649 /*
11650 * Init SCAN request from PE, convert it into DAL format
11651 * and send it to DAL
11652 */
11653 case WDA_INIT_SCAN_REQ:
11654 {
11655 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
11656 break ;
11657 }
11658 /* start SCAN request from PE */
11659 case WDA_START_SCAN_REQ:
11660 {
11661 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
11662 break ;
11663 }
11664 /* end SCAN request from PE */
11665 case WDA_END_SCAN_REQ:
11666 {
11667 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
11668 break ;
11669 }
11670 /* end SCAN request from PE */
11671 case WDA_FINISH_SCAN_REQ:
11672 {
11673 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
11674 break ;
11675 }
11676 /* join request from PE */
11677 case WDA_CHNL_SWITCH_REQ:
11678 {
11679 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
11680 {
11681 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
11682 }
11683 else
11684 {
11685 WDA_ProcessChannelSwitchReq(pWDA,
11686 (tSwitchChannelParams*)pMsg->bodyptr) ;
11687 }
11688 break ;
11689 }
11690 /* ADD BSS request from PE */
11691 case WDA_ADD_BSS_REQ:
11692 {
11693 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
11694 break ;
11695 }
11696 case WDA_ADD_STA_REQ:
11697 {
11698 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
11699 break ;
11700 }
11701 case WDA_DELETE_BSS_REQ:
11702 {
Jeff Johnson295189b2012-06-20 16:38:30 -070011703 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
11704 break ;
11705 }
11706 case WDA_DELETE_STA_REQ:
11707 {
Jeff Johnson295189b2012-06-20 16:38:30 -070011708 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
11709 break ;
11710 }
11711 case WDA_CONFIG_PARAM_UPDATE_REQ:
11712 {
11713 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
11714 break ;
11715 }
11716 case WDA_SET_BSSKEY_REQ:
11717 {
11718 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
11719 break ;
11720 }
11721 case WDA_SET_STAKEY_REQ:
11722 {
11723 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
11724 break ;
11725 }
11726 case WDA_SET_STA_BCASTKEY_REQ:
11727 {
11728 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
11729 break ;
11730 }
11731 case WDA_REMOVE_BSSKEY_REQ:
11732 {
11733 WDA_ProcessRemoveBssKeyReq(pWDA,
11734 (tRemoveBssKeyParams *)pMsg->bodyptr);
11735 break ;
11736 }
11737 case WDA_REMOVE_STAKEY_REQ:
11738 {
11739 WDA_ProcessRemoveStaKeyReq(pWDA,
11740 (tRemoveStaKeyParams *)pMsg->bodyptr);
11741 break ;
11742 }
11743 case WDA_REMOVE_STA_BCASTKEY_REQ:
11744 {
11745 /* TODO: currently UMAC is not sending this request, Add the code for
11746 handling this request when UMAC supports */
11747 break;
11748 }
11749#ifdef FEATURE_WLAN_CCX
11750 case WDA_TSM_STATS_REQ:
11751 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070011752 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070011753 break;
11754 }
11755#endif
11756 case WDA_UPDATE_EDCA_PROFILE_IND:
11757 {
11758 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
11759 break;
11760 }
11761 case WDA_ADD_TS_REQ:
11762 {
11763 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
11764 break;
11765 }
11766 case WDA_DEL_TS_REQ:
11767 {
11768 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
11769 break;
11770 }
11771 case WDA_ADDBA_REQ:
11772 {
11773 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
11774 break;
11775 }
11776 case WDA_DELBA_IND:
11777 {
11778 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
11779 break;
11780 }
11781 case WDA_SET_LINK_STATE:
11782 {
11783 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
11784 break;
11785 }
11786 case WDA_GET_STATISTICS_REQ:
11787 {
11788 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
11789 break;
11790 }
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080011791#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
11792 case WDA_GET_ROAM_RSSI_REQ:
11793 {
11794 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
11795 break;
11796 }
11797#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011798 case WDA_PWR_SAVE_CFG:
11799 {
11800 if(pWDA->wdaState == WDA_READY_STATE)
11801 {
11802 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
11803 }
11804 else
11805 {
11806 if(NULL != pMsg->bodyptr)
11807 {
11808 vos_mem_free(pMsg->bodyptr);
11809 }
11810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11811 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
11812 }
11813 break;
11814 }
11815 case WDA_ENTER_IMPS_REQ:
11816 {
11817 if(pWDA->wdaState == WDA_READY_STATE)
11818 {
11819 WDA_ProcessEnterImpsReq(pWDA);
11820 }
11821 else
11822 {
11823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11824 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
11825 }
11826 break;
11827 }
11828 case WDA_EXIT_IMPS_REQ:
11829 {
11830 if(pWDA->wdaState == WDA_READY_STATE)
11831 {
11832 WDA_ProcessExitImpsReq(pWDA);
11833 }
11834 else
11835 {
11836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11837 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
11838 }
11839 break;
11840 }
11841 case WDA_ENTER_BMPS_REQ:
11842 {
11843 if(pWDA->wdaState == WDA_READY_STATE)
11844 {
11845 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
11846 }
11847 else
11848 {
11849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11850 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
11851 }
11852 break;
11853 }
11854 case WDA_EXIT_BMPS_REQ:
11855 {
11856 if(pWDA->wdaState == WDA_READY_STATE)
11857 {
11858 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
11859 }
11860 else
11861 {
11862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11863 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
11864 }
11865 break;
11866 }
11867 case WDA_ENTER_UAPSD_REQ:
11868 {
11869 if(pWDA->wdaState == WDA_READY_STATE)
11870 {
11871 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
11872 }
11873 else
11874 {
11875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11876 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
11877 }
11878 break;
11879 }
11880 case WDA_EXIT_UAPSD_REQ:
11881 {
11882 if(pWDA->wdaState == WDA_READY_STATE)
11883 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011884 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070011885 }
11886 else
11887 {
11888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11889 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
11890 }
11891 break;
11892 }
11893 case WDA_UPDATE_UAPSD_IND:
11894 {
11895 if(pWDA->wdaState == WDA_READY_STATE)
11896 {
11897 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
11898 }
11899 else
11900 {
11901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11902 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
11903 }
11904 break;
11905 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011906 case WDA_REGISTER_PE_CALLBACK :
11907 {
11908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11909 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
11910 /*TODO: store the PE callback */
11911 /* Do Nothing? MSG Body should be freed at here */
11912 if(NULL != pMsg->bodyptr)
11913 {
11914 vos_mem_free(pMsg->bodyptr);
11915 }
11916 break;
11917 }
11918 case WDA_SYS_READY_IND :
11919 {
11920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11921 "Handling msg type WDA_SYS_READY_IND " );
11922 pWDA->wdaState = WDA_READY_STATE;
11923 if(NULL != pMsg->bodyptr)
11924 {
11925 vos_mem_free(pMsg->bodyptr);
11926 }
11927 break;
11928 }
11929 case WDA_BEACON_FILTER_IND :
11930 {
11931 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
11932 break;
11933 }
11934 case WDA_BTC_SET_CFG:
11935 {
11936 /*TODO: handle this while dealing with BTC */
11937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11938 "Handling msg type WDA_BTC_SET_CFG " );
11939 /* Do Nothing? MSG Body should be freed at here */
11940 if(NULL != pMsg->bodyptr)
11941 {
11942 vos_mem_free(pMsg->bodyptr);
11943 }
11944 break;
11945 }
11946 case WDA_SIGNAL_BT_EVENT:
11947 {
11948 /*TODO: handle this while dealing with BTC */
11949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11950 "Handling msg type WDA_SIGNAL_BT_EVENT " );
11951 /* Do Nothing? MSG Body should be freed at here */
11952 if(NULL != pMsg->bodyptr)
11953 {
11954 vos_mem_free(pMsg->bodyptr);
11955 }
11956 break;
11957 }
11958 case WDA_CFG_RXP_FILTER_REQ:
11959 {
11960 WDA_ProcessConfigureRxpFilterReq(pWDA,
11961 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
11962 break;
11963 }
11964 case WDA_SET_HOST_OFFLOAD:
11965 {
11966 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
11967 break;
11968 }
11969 case WDA_SET_KEEP_ALIVE:
11970 {
11971 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
11972 break;
11973 }
11974#ifdef WLAN_NS_OFFLOAD
11975 case WDA_SET_NS_OFFLOAD:
11976 {
11977 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
11978 break;
11979 }
11980#endif //WLAN_NS_OFFLOAD
11981 case WDA_ADD_STA_SELF_REQ:
11982 {
11983 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
11984 break;
11985 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011986 case WDA_DEL_STA_SELF_REQ:
11987 {
11988 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
11989 break;
11990 }
11991 case WDA_WOWL_ADD_BCAST_PTRN:
11992 {
11993 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
11994 break;
11995 }
11996 case WDA_WOWL_DEL_BCAST_PTRN:
11997 {
11998 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
11999 break;
12000 }
12001 case WDA_WOWL_ENTER_REQ:
12002 {
12003 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
12004 break;
12005 }
12006 case WDA_WOWL_EXIT_REQ:
12007 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012008 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012009 break;
12010 }
12011 case WDA_TL_FLUSH_AC_REQ:
12012 {
12013 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
12014 break;
12015 }
12016 case WDA_SIGNAL_BTAMP_EVENT:
12017 {
12018 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
12019 break;
12020 }
12021#ifdef WDA_UT
12022 case WDA_WDI_EVENT_MSG:
12023 {
12024 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
12025 break ;
12026 }
12027#endif
12028 case WDA_UPDATE_BEACON_IND:
12029 {
12030 WDA_ProcessUpdateBeaconParams(pWDA,
12031 (tUpdateBeaconParams *)pMsg->bodyptr);
12032 break;
12033 }
12034 case WDA_SEND_BEACON_REQ:
12035 {
12036 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
12037 break;
12038 }
12039 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
12040 {
12041 WDA_ProcessUpdateProbeRspTemplate(pWDA,
12042 (tSendProbeRespParams *)pMsg->bodyptr);
12043 break;
12044 }
12045#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
12046 case WDA_SET_MAX_TX_POWER_REQ:
12047 {
12048 WDA_ProcessSetMaxTxPowerReq(pWDA,
12049 (tMaxTxPowerParams *)pMsg->bodyptr);
12050 break;
12051 }
12052#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070012053 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
12054 {
12055 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
12056 pMsg->bodyptr);
12057 break;
12058 }
schang86c22c42013-03-13 18:41:24 -070012059 case WDA_SET_TX_POWER_REQ:
12060 {
12061 WDA_ProcessSetTxPowerReq(pWDA,
12062 (tSirSetTxPowerReq *)pMsg->bodyptr);
12063 break;
12064 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012065 case WDA_SET_P2P_GO_NOA_REQ:
12066 {
12067 WDA_ProcessSetP2PGONOAReq(pWDA,
12068 (tP2pPsParams *)pMsg->bodyptr);
12069 break;
12070 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012071 /* timer related messages */
12072 case WDA_TIMER_BA_ACTIVITY_REQ:
12073 {
12074 WDA_BaCheckActivity(pWDA) ;
12075 break ;
12076 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012077
12078 /* timer related messages */
12079 case WDA_TIMER_TRAFFIC_STATS_IND:
12080 {
12081 WDA_TimerTrafficStatsInd(pWDA);
12082 break;
12083 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012084#ifdef WLAN_FEATURE_VOWIFI_11R
12085 case WDA_AGGR_QOS_REQ:
12086 {
12087 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
12088 break;
12089 }
12090#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070012091 case WDA_FTM_CMD_REQ:
12092 {
12093 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
12094 break ;
12095 }
Jeff Johnsone7245742012-09-05 17:12:55 -070012096#ifdef FEATURE_OEM_DATA_SUPPORT
12097 case WDA_START_OEM_DATA_REQ:
12098 {
12099 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
12100 break;
12101 }
12102#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070012103 /* Tx Complete Time out Indication */
12104 case WDA_TX_COMPLETE_TIMEOUT_IND:
12105 {
12106 WDA_ProcessTxCompleteTimeOutInd(pWDA);
12107 break;
12108 }
12109 case WDA_WLAN_SUSPEND_IND:
12110 {
12111 WDA_ProcessWlanSuspendInd(pWDA,
12112 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
12113 break;
12114 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012115 case WDA_WLAN_RESUME_REQ:
12116 {
12117 WDA_ProcessWlanResumeReq(pWDA,
12118 (tSirWlanResumeParam *)pMsg->bodyptr) ;
12119 break;
12120 }
12121
12122 case WDA_UPDATE_CF_IND:
12123 {
12124 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
12125 pMsg->bodyptr = NULL;
12126 break;
12127 }
12128#ifdef FEATURE_WLAN_SCAN_PNO
12129 case WDA_SET_PNO_REQ:
12130 {
12131 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
12132 break;
12133 }
12134 case WDA_UPDATE_SCAN_PARAMS_REQ:
12135 {
12136 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
12137 break;
12138 }
12139 case WDA_SET_RSSI_FILTER_REQ:
12140 {
12141 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
12142 break;
12143 }
12144#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012145#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012146 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012147 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012148 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012149 break;
12150 }
12151#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012152 case WDA_SET_TX_PER_TRACKING_REQ:
12153 {
12154 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
12155 break;
12156 }
12157
12158#ifdef WLAN_FEATURE_PACKET_FILTERING
12159 case WDA_8023_MULTICAST_LIST_REQ:
12160 {
12161 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
12162 break;
12163 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012164 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
12165 {
12166 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
12167 break;
12168 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012169 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
12170 {
12171 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
12172 break;
12173 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012174 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
12175 {
12176 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
12177 break;
12178 }
12179#endif // WLAN_FEATURE_PACKET_FILTERING
12180
12181
12182 case WDA_TRANSMISSION_CONTROL_IND:
12183 {
12184 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
12185 break;
12186 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012187 case WDA_SET_POWER_PARAMS_REQ:
12188 {
12189 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
12190 break;
12191 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012192#ifdef WLAN_FEATURE_GTK_OFFLOAD
12193 case WDA_GTK_OFFLOAD_REQ:
12194 {
12195 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
12196 break;
12197 }
12198
12199 case WDA_GTK_OFFLOAD_GETINFO_REQ:
12200 {
12201 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
12202 break;
12203 }
12204#endif //WLAN_FEATURE_GTK_OFFLOAD
12205
12206 case WDA_SET_TM_LEVEL_REQ:
12207 {
12208 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
12209 break;
12210 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053012211
Mohit Khanna4a70d262012-09-11 16:30:12 -070012212 case WDA_UPDATE_OP_MODE:
12213 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053012214 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
12215 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
12216 {
12217 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
12218 }
12219 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070012220 {
12221 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
12222 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
12223 else
12224 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012225 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070012226 }
12227 else
12228 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012229 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070012230 break;
12231 }
Chet Lanctot186b5732013-03-18 10:26:30 -070012232#ifdef WLAN_FEATURE_11W
12233 case WDA_EXCLUDE_UNENCRYPTED_IND:
12234 {
12235 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
12236 break;
12237 }
12238#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053012239#ifdef FEATURE_WLAN_TDLS
12240 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
12241 {
12242 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
12243 break;
12244 }
12245#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012246 case WDA_DHCP_START_IND:
12247 {
12248 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
12249 break;
12250 }
12251 case WDA_DHCP_STOP_IND:
12252 {
12253 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
12254 break;
12255 }
Leo Chang9056f462013-08-01 19:21:11 -070012256#ifdef FEATURE_WLAN_LPHB
12257 case WDA_LPHB_CONF_REQ:
12258 {
12259 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
12260 break;
12261 }
12262#endif
Yue Mab9c86f42013-08-14 15:59:08 -070012263 case WDA_ADD_PERIODIC_TX_PTRN_IND:
12264 {
12265 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
12266 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
12267 break;
12268 }
12269 case WDA_DEL_PERIODIC_TX_PTRN_IND:
12270 {
12271 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
12272 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
12273 break;
12274 }
12275
Rajeev79dbe4c2013-10-05 11:03:42 +053012276#ifdef FEATURE_WLAN_BATCH_SCAN
12277 case WDA_SET_BATCH_SCAN_REQ:
12278 {
12279 WDA_ProcessSetBatchScanReq(pWDA,
12280 (tSirSetBatchScanReq *)pMsg->bodyptr);
12281 break;
12282 }
Chittajit Mitraf5413a42013-10-18 14:20:08 -070012283 case WDA_RATE_UPDATE_IND:
12284 {
12285 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
12286 break;
12287 }
Rajeev79dbe4c2013-10-05 11:03:42 +053012288 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
12289 {
12290 WDA_ProcessTriggerBatchScanResultInd(pWDA,
12291 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
12292 break;
12293 }
12294 case WDA_STOP_BATCH_SCAN_IND:
12295 {
12296 WDA_ProcessStopBatchScanInd(pWDA,
12297 (tSirStopBatchScanInd *)pMsg->bodyptr);
12298 break;
12299 }
12300#endif
12301
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053012302 case WDA_HT40_OBSS_SCAN_IND:
12303 {
12304 WDA_ProcessHT40OBSSScanInd(pWDA,
12305 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
12306 break;
12307 }
12308 case WDA_HT40_OBSS_STOP_SCAN_IND:
12309 {
12310 WDA_ProcessHT40OBSSStopScanInd(pWDA,
12311 (tANI_U8*)pMsg->bodyptr);
12312 break;
12313 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012314 default:
12315 {
12316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12317 "No Handling for msg type %x in WDA "
12318 ,pMsg->type);
12319 /* Do Nothing? MSG Body should be freed at here */
12320 if(NULL != pMsg->bodyptr)
12321 {
12322 vos_mem_free(pMsg->bodyptr);
12323 }
12324 //WDA_VOS_ASSERT(0) ;
12325 }
12326 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012327 return status ;
12328}
12329
Jeff Johnson295189b2012-06-20 16:38:30 -070012330/*
12331 * FUNCTION: WDA_LowLevelIndCallback
12332 * IND API callback from WDI, send Ind to PE
12333 */
12334void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
12335 void* pUserData )
12336{
12337 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
12338#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
12339 tSirRSSINotification rssiNotification;
12340#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012341 if(NULL == pWDA)
12342 {
12343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012344 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012345 VOS_ASSERT(0);
12346 return ;
12347 }
12348
12349 switch(wdiLowLevelInd->wdiIndicationType)
12350 {
12351 case WDI_RSSI_NOTIFICATION_IND:
12352 {
12353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12354 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012355#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
12356 rssiNotification.bReserved =
12357 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
12358 rssiNotification.bRssiThres1NegCross =
12359 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
12360 rssiNotification.bRssiThres1PosCross =
12361 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
12362 rssiNotification.bRssiThres2NegCross =
12363 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
12364 rssiNotification.bRssiThres2PosCross =
12365 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
12366 rssiNotification.bRssiThres3NegCross =
12367 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
12368 rssiNotification.bRssiThres3PosCross =
12369 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080012370 rssiNotification.avgRssi = (v_S7_t)
12371 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070012372 WLANTL_BMPSRSSIRegionChangedNotification(
12373 pWDA->pVosContext,
12374 &rssiNotification);
12375#endif
12376 break ;
12377 }
12378 case WDI_MISSED_BEACON_IND:
12379 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080012380 tpSirSmeMissedBeaconInd pMissBeacInd =
12381 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070012382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12383 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012384 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080012385 if(NULL == pMissBeacInd)
12386 {
12387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12388 "%s: VOS MEM Alloc Failure", __func__);
12389 break;
12390 }
12391 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
12392 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
12393 pMissBeacInd->bssIdx =
12394 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
12395 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012396 break ;
12397 }
12398 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
12399 {
12400 /* TODO: Decode Ind and send Ind to PE */
12401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12402 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
12403 break ;
12404 }
12405
12406 case WDI_MIC_FAILURE_IND:
12407 {
12408 tpSirSmeMicFailureInd pMicInd =
12409 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
12410
12411 if(NULL == pMicInd)
12412 {
12413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012414 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012415 break;
12416 }
12417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12418 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012419 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
12420 pMicInd->length = sizeof(tSirSmeMicFailureInd);
12421 vos_mem_copy(pMicInd->bssId,
12422 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
12423 sizeof(tSirMacAddr));
12424 vos_mem_copy(pMicInd->info.srcMacAddr,
12425 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
12426 sizeof(tSirMacAddr));
12427 vos_mem_copy(pMicInd->info.taMacAddr,
12428 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
12429 sizeof(tSirMacAddr));
12430 vos_mem_copy(pMicInd->info.dstMacAddr,
12431 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
12432 sizeof(tSirMacAddr));
12433 vos_mem_copy(pMicInd->info.rxMacAddr,
12434 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
12435 sizeof(tSirMacAddr));
12436 pMicInd->info.multicast =
12437 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
12438 pMicInd->info.keyId=
12439 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
12440 pMicInd->info.IV1=
12441 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
12442 vos_mem_copy(pMicInd->info.TSC,
12443 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070012444 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
12445 (void *)pMicInd , 0) ;
12446 break ;
12447 }
12448 case WDI_FATAL_ERROR_IND:
12449 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070012450 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070012451 /* TODO: Decode Ind and send Ind to PE */
12452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12453 "Received WDI_FATAL_ERROR_IND from WDI ");
12454 break ;
12455 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012456 case WDI_DEL_STA_IND:
12457 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012458 tpDeleteStaContext pDelSTACtx =
12459 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
12460
12461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12462 "Received WDI_DEL_STA_IND from WDI ");
12463 if(NULL == pDelSTACtx)
12464 {
12465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012466 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012467 break;
12468 }
12469 vos_mem_copy(pDelSTACtx->addr2,
12470 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
12471 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012472 vos_mem_copy(pDelSTACtx->bssId,
12473 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
12474 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012475 pDelSTACtx->assocId =
12476 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
12477 pDelSTACtx->reasonCode =
12478 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
12479 pDelSTACtx->staId =
12480 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070012481 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
12482 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012483 break ;
12484 }
12485 case WDI_COEX_IND:
12486 {
12487 tANI_U32 index;
12488 vos_msg_t vosMsg;
12489 tSirSmeCoexInd *pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
12490 if(NULL == pSmeCoexInd)
12491 {
12492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012493 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012494 break;
12495 }
12496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12497 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012498 /* Message Header */
12499 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
12500 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070012501 /* Info from WDI Indication */
12502 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
12503 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
12504 {
12505 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
12506 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012507 /* VOS message wrapper */
12508 vosMsg.type = eWNI_SME_COEX_IND;
12509 vosMsg.bodyptr = (void *)pSmeCoexInd;
12510 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070012511 /* Send message to SME */
12512 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12513 {
12514 /* free the mem and return */
12515 vos_mem_free((v_VOID_t *)pSmeCoexInd);
12516 }
12517 else
12518 {
12519 /* DEBUG */
12520 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12521 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
12522 pSmeCoexInd->coexIndType,
12523 pSmeCoexInd->coexIndData[0],
12524 pSmeCoexInd->coexIndData[1],
12525 pSmeCoexInd->coexIndData[2],
12526 pSmeCoexInd->coexIndData[3]);
12527 }
12528 break;
12529 }
12530 case WDI_TX_COMPLETE_IND:
12531 {
12532 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
12533 /* Calling TxCompleteAck Indication from wda context*/
12534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12535 "Complete Indication received from HAL");
12536 if( pWDA->pAckTxCbFunc )
12537 {
12538 if( VOS_STATUS_SUCCESS !=
12539 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12540 {
12541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12542 "Tx Complete timeout Timer Stop Failed ");
12543 }
12544 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
12545 pWDA->pAckTxCbFunc = NULL;
12546 }
12547 else
12548 {
12549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12550 "Tx Complete Indication is received after timeout ");
12551 }
12552 break;
12553 }
Viral Modid86bde22012-12-10 13:09:21 -080012554 case WDI_P2P_NOA_START_IND :
12555 {
12556 tSirP2PNoaStart *pP2pNoaStart =
12557 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
12558
12559 if (NULL == pP2pNoaStart)
12560 {
12561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12562 "Memory allocation failure, "
12563 "WDI_P2P_NOA_START_IND not forwarded");
12564 break;
12565 }
12566 pP2pNoaStart->status =
12567 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
12568 pP2pNoaStart->bssIdx =
12569 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
12570 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
12571 (void *)pP2pNoaStart , 0) ;
12572 break;
12573 }
12574
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053012575#ifdef FEATURE_WLAN_TDLS
12576 case WDI_TDLS_IND :
12577 {
12578 tSirTdlsInd *pTdlsInd =
12579 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
12580
12581 if (NULL == pTdlsInd)
12582 {
12583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12584 "Memory allocation failure, "
12585 "WDI_TDLS_IND not forwarded");
12586 break;
12587 }
12588 pTdlsInd->status =
12589 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
12590 pTdlsInd->assocId =
12591 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
12592 pTdlsInd->staIdx =
12593 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
12594 pTdlsInd->reasonCode =
12595 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
12596 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
12597 (void *)pTdlsInd , 0) ;
12598 break;
12599 }
12600#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012601 case WDI_P2P_NOA_ATTR_IND :
12602 {
12603 tSirP2PNoaAttr *pP2pNoaAttr =
12604 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12606 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070012607 if (NULL == pP2pNoaAttr)
12608 {
12609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12610 "Memory allocation failure, "
12611 "WDI_P2P_NOA_ATTR_IND not forwarded");
12612 break;
12613 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012614 pP2pNoaAttr->index =
12615 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
12616 pP2pNoaAttr->oppPsFlag =
12617 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
12618 pP2pNoaAttr->ctWin =
12619 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
12620
12621 pP2pNoaAttr->uNoa1IntervalCnt =
12622 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
12623 pP2pNoaAttr->uNoa1Duration =
12624 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
12625 pP2pNoaAttr->uNoa1Interval =
12626 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
12627 pP2pNoaAttr->uNoa1StartTime =
12628 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070012629 pP2pNoaAttr->uNoa2IntervalCnt =
12630 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
12631 pP2pNoaAttr->uNoa2Duration =
12632 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
12633 pP2pNoaAttr->uNoa2Interval =
12634 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
12635 pP2pNoaAttr->uNoa2StartTime =
12636 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070012637 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
12638 (void *)pP2pNoaAttr , 0) ;
12639 break;
12640 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012641#ifdef FEATURE_WLAN_SCAN_PNO
12642 case WDI_PREF_NETWORK_FOUND_IND:
12643 {
12644 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070012645 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
12646 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
12647 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
12648 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
12649
Jeff Johnson295189b2012-06-20 16:38:30 -070012650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12651 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070012652 if (NULL == pPrefNetworkFoundInd)
12653 {
12654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12655 "Memory allocation failure, "
12656 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053012657 if (NULL !=
12658 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
12659 {
12660 wpalMemoryFree(
12661 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
12662 );
12663 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
12664 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012665 break;
12666 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012667 /* Message Header */
12668 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070012669 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070012670
12671 /* Info from WDI Indication */
12672 pPrefNetworkFoundInd->ssId.length =
12673 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070012674 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070012675 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
12676 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
12677 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070012678 if (NULL !=
12679 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
12680 {
12681 pPrefNetworkFoundInd->frameLength =
12682 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
12683 vos_mem_copy( pPrefNetworkFoundInd->data,
12684 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
12685 pPrefNetworkFoundInd->frameLength);
12686 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
12687 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
12688 }
12689 else
12690 {
12691 pPrefNetworkFoundInd->frameLength = 0;
12692 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012693 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070012694 /* VOS message wrapper */
12695 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
12696 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
12697 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070012698 /* Send message to SME */
12699 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12700 {
12701 /* free the mem and return */
12702 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
12703 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012704 break;
12705 }
12706#endif // FEATURE_WLAN_SCAN_PNO
12707
12708#ifdef WLAN_WAKEUP_EVENTS
12709 case WDI_WAKE_REASON_IND:
12710 {
12711 vos_msg_t vosMsg;
12712 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
12713 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
12714 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
12715
12716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12717 "[WAKE_REASON WDI] WAKE_REASON_IND Type (0x%x) data (ulReason=0x%x, ulReasonArg=0x%x, ulStoredDataLen=0x%x)",
12718 wdiLowLevelInd->wdiIndicationType,
12719 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
12720 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
12721 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
12722
12723 if (NULL == pWakeReasonInd)
12724 {
12725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12726 "Memory allocation failure, "
12727 "WDI_WAKE_REASON_IND not forwarded");
12728 break;
12729 }
12730
12731 vos_mem_zero(pWakeReasonInd, allocSize);
12732
12733 /* Message Header */
12734 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
12735 pWakeReasonInd->mesgLen = allocSize;
12736
12737 /* Info from WDI Indication */
12738 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
12739 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
12740 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
12741 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
12742 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
12743 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
12744 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
12745 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
12746
12747 /* VOS message wrapper */
12748 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
12749 vosMsg.bodyptr = (void *) pWakeReasonInd;
12750 vosMsg.bodyval = 0;
12751
12752 /* Send message to SME */
12753 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12754 {
12755 /* free the mem and return */
12756 vos_mem_free((v_VOID_t *) pWakeReasonInd);
12757 }
12758
12759 break;
12760 }
12761#endif // WLAN_WAKEUP_EVENTS
12762
12763 case WDI_TX_PER_HIT_IND:
12764 {
12765 vos_msg_t vosMsg;
12766 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
12767 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
12768 /* VOS message wrapper */
12769 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
12770 vosMsg.bodyptr = NULL;
12771 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070012772 /* Send message to SME */
12773 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12774 {
12775 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
12776 }
12777 break;
12778 }
12779
Leo Chang9056f462013-08-01 19:21:11 -070012780#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070012781 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070012782 {
Leo Changd9df8aa2013-09-26 13:32:26 -070012783 vos_msg_t vosMsg;
12784 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070012785
Leo Changd9df8aa2013-09-26 13:32:26 -070012786 lphbInd =
12787 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
12788 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070012789 {
12790 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12791 "%s: LPHB IND buffer alloc Fail", __func__);
12792 return ;
12793 }
12794
Leo Changd9df8aa2013-09-26 13:32:26 -070012795 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070012796 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070012797 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070012798 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070012799 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070012800 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
12801
12802 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070012803 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070012804 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
12805
Leo Changd9df8aa2013-09-26 13:32:26 -070012806 vosMsg.type = eWNI_SME_LPHB_IND;
12807 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070012808 vosMsg.bodyval = 0;
12809 /* Send message to SME */
12810 if (VOS_STATUS_SUCCESS !=
12811 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12812 {
12813 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
12814 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070012815 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070012816 }
12817 break;
12818 }
12819#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070012820 case WDI_PERIODIC_TX_PTRN_FW_IND:
12821 {
12822 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12823 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
12824 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
12825 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
12826 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
12827 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
12828 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
12829
12830 break;
12831 }
Leo Chang9056f462013-08-01 19:21:11 -070012832
Ravi Joshid2ca7c42013-07-23 08:37:49 -070012833 case WDI_IBSS_PEER_INACTIVITY_IND:
12834 {
12835 tSirIbssPeerInactivityInd *pIbssInd =
12836 (tSirIbssPeerInactivityInd *)
12837 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
12838
12839 if (NULL == pIbssInd)
12840 {
12841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12842 "Memory allocation failure, "
12843 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
12844 break;
12845 }
12846
12847 pIbssInd->bssIdx =
12848 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
12849 pIbssInd->staIdx =
12850 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
12851 vos_mem_copy(pIbssInd->peerAddr,
12852 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
12853 sizeof(tSirMacAddr));
12854 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
12855 break;
12856 }
12857
Rajeev79dbe4c2013-10-05 11:03:42 +053012858#ifdef FEATURE_WLAN_BATCH_SCAN
12859 case WDI_BATCH_SCAN_RESULT_IND:
12860 {
12861 void *pBatchScanResult;
12862 void *pCallbackContext;
12863 tpAniSirGlobal pMac;
12864
12865 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12866 "Received WDI_BATCHSCAN_RESULT_IND from FW");
12867
12868 /*sanity check*/
12869 if(NULL == pWDA)
12870 {
12871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12872 "%s:pWDA is NULL", __func__);
12873 VOS_ASSERT(0);
12874 return;
12875 }
12876
12877 pBatchScanResult =
12878 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
12879 if (NULL == pBatchScanResult)
12880 {
12881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12882 "%s:Batch scan result from FW is null can't invoke HDD callback",
12883 __func__);
12884 VOS_ASSERT(0);
12885 return;
12886 }
12887
12888 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12889 if (NULL == pMac)
12890 {
12891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12892 "%s:pMac is NULL", __func__);
12893 VOS_ASSERT(0);
12894 return;
12895 }
12896
12897 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
12898 /*call hdd callback with set batch scan response data*/
12899 if(pMac->pmc.batchScanResultCallback)
12900 {
12901 pMac->pmc.batchScanResultCallback(pCallbackContext,
12902 pBatchScanResult);
12903 }
12904 else
12905 {
12906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12907 "%s:HDD callback is null", __func__);
12908 VOS_ASSERT(0);
12909 }
12910 break;
12911 }
12912#endif
12913
Leo Chang0b0e45a2013-12-15 15:18:55 -080012914#ifdef FEATURE_WLAN_CH_AVOID
12915 case WDI_CH_AVOID_IND:
12916 {
12917 vos_msg_t vosMsg;
12918 tSirChAvoidIndType *chAvoidInd;
12919
12920 chAvoidInd =
12921 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
12922 if (NULL == chAvoidInd)
12923 {
12924 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12925 "%s: CH_AVOID IND buffer alloc Fail", __func__);
12926 return ;
12927 }
12928
12929 chAvoidInd->avoidRangeCount =
12930 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
12931 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
12932 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
12933 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
12934
12935 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12936 "%s : WDA CH avoid notification", __func__);
12937
12938 vosMsg.type = eWNI_SME_CH_AVOID_IND;
12939 vosMsg.bodyptr = chAvoidInd;
12940 vosMsg.bodyval = 0;
12941 /* Send message to SME */
12942 if (VOS_STATUS_SUCCESS !=
12943 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12944 {
12945 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12946 "post eWNI_SME_CH_AVOID_IND to SME Failed");
12947 vos_mem_free(chAvoidInd);
12948 }
12949 break;
12950 }
12951#endif /* FEATURE_WLAN_CH_AVOID */
12952
Jeff Johnson295189b2012-06-20 16:38:30 -070012953 default:
12954 {
12955 /* TODO error */
12956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12957 "Received UNKNOWN Indication from WDI ");
12958 }
12959 }
12960 return ;
12961}
12962
Jeff Johnson295189b2012-06-20 16:38:30 -070012963/*
12964 * BA related processing in WDA.
12965 */
Jeff Johnson295189b2012-06-20 16:38:30 -070012966void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
12967 void* pUserData)
12968{
12969 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12970 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070012971 if(NULL == pWdaParams)
12972 {
12973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012974 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012975 VOS_ASSERT(0) ;
12976 return ;
12977 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012978 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070012979 vos_mem_free(pWdaParams->wdaMsgParam) ;
12980 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12981 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012983 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012984 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
12985 {
12986 tANI_U8 i = 0 ;
12987 tBaActivityInd *baActivityInd = NULL ;
12988 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
12989 tANI_U8 allocSize = sizeof(tBaActivityInd)
12990 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
12991 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
12992 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012993 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012994 if(NULL == baActivityInd)
12995 {
12996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012997 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012998 VOS_ASSERT(0) ;
12999 return;
13000 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013001 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
13002 sizeof(tSirMacAddr)) ;
13003 baActivityInd->baCandidateCnt = baCandidateCount ;
13004
13005 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
13006 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
13007
13008 for(i = 0 ; i < baCandidateCount ; i++)
13009 {
13010 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013011 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
13012 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013013 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
13014 {
13015 baCandidate->baInfo[tid].fBaEnable =
13016 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
13017 baCandidate->baInfo[tid].startingSeqNum =
13018 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
13019 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070013020 wdiBaCandidate++ ;
13021 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013022 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013023 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
13024 }
13025 else
13026 {
13027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13028 "BA Trigger RSP with Failure received ");
13029 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013030 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013031}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013032
13033
13034/*
13035 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
13036 * during MCC
13037 */
13038void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
13039{
13040 wpt_uint32 enabled;
13041 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
13042 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
13043 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
13044
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053013045 if (NULL == pMac )
13046 {
13047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13048 "%s: Invoked with invalid MAC context ", __func__ );
13049 VOS_ASSERT(0);
13050 return;
13051 }
13052
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013053 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
13054 != eSIR_SUCCESS)
13055 {
13056 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13057 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
13058 return;
13059 }
13060
13061 if(!enabled)
13062 {
13063 return;
13064 }
13065
13066 if(NULL == pWDA)
13067 {
13068 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13069 "%s:WDA context is NULL", __func__);
13070 VOS_ASSERT(0);
13071 return;
13072 }
13073
13074 if(activate)
13075 {
13076 if( VOS_STATUS_SUCCESS !=
13077 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
13078 {
13079 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13080 "Traffic Stats Timer Start Failed ");
13081 return;
13082 }
13083 WDI_DS_ActivateTrafficStats();
13084 }
13085 else
13086 {
13087 WDI_DS_DeactivateTrafficStats();
13088 WDI_DS_ClearTrafficStats();
13089
13090 if( VOS_STATUS_SUCCESS !=
13091 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
13092 {
13093 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13094 "Traffic Stats Timer Stop Failed ");
13095 return;
13096 }
13097 }
13098}
13099
13100/*
13101 * Traffic Stats Timer handler
13102 */
13103void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
13104{
13105 WDI_Status wdiStatus;
13106 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
13107 WDI_TrafficStatsIndType trafficStatsIndParams;
13108 wpt_uint32 length, enabled;
13109 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13110
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053013111 if (NULL == pMac )
13112 {
13113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13114 "%s: Invoked with invalid MAC context ", __func__ );
13115 VOS_ASSERT(0);
13116 return;
13117 }
13118
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013119 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
13120 != eSIR_SUCCESS)
13121 {
13122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13123 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
13124 return;
13125 }
13126
13127 if(!enabled)
13128 {
13129 WDI_DS_DeactivateTrafficStats();
13130 return;
13131 }
13132
13133 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
13134
13135 if(pWdiTrafficStats != NULL)
13136 {
13137 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
13138 trafficStatsIndParams.length = length;
13139 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080013140 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013141 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
13142 trafficStatsIndParams.pUserData = pWDA;
13143
13144 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
13145
13146 if(WDI_STATUS_PENDING == wdiStatus)
13147 {
13148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13149 "Pending received for %s:%d ",__func__,__LINE__ );
13150 }
13151 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
13152 {
13153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13154 "Failure in %s:%d ",__func__,__LINE__ );
13155 }
13156
13157 WDI_DS_ClearTrafficStats();
13158 }
13159 else
13160 {
13161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13162 "pWdiTrafficStats is Null");
13163 }
13164
13165 if( VOS_STATUS_SUCCESS !=
13166 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
13167 {
13168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13169 "Traffic Stats Timer Start Failed ");
13170 return;
13171 }
13172}
13173
Jeff Johnson295189b2012-06-20 16:38:30 -070013174/*
13175 * BA Activity check timer handler
13176 */
13177void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
13178{
13179 tANI_U8 curSta = 0 ;
13180 tANI_U8 tid = 0 ;
13181 tANI_U8 size = 0 ;
13182 tANI_U8 baCandidateCount = 0 ;
13183 tANI_U8 newBaCandidate = 0 ;
13184 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
13185
13186 if(NULL == pWDA)
13187 {
13188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013189 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013190 VOS_ASSERT(0);
13191 return ;
13192 }
13193 if(WDA_MAX_STA < pWDA->wdaMaxSta)
13194 {
13195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13196 "Inconsistent STA entries in WDA");
13197 VOS_ASSERT(0) ;
13198 }
13199 /* walk through all STA entries and find out TX packet count */
13200 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
13201 {
Gopichand Nakkala976e3252013-01-03 15:45:56 -080013202#ifdef WLAN_SOFTAP_VSTA_FEATURE
13203 // We can only do BA on "hard" STAs.
13204 if (!(IS_HWSTA_IDX(curSta)))
13205 {
13206 continue;
13207 }
13208#endif //WLAN_SOFTAP_VSTA_FEATURE
13209 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
13210 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070013211 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013212 tANI_U32 txPktCount = 0 ;
13213 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013214 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070013215 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
13216 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070013217 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
13218 curSta, tid, &txPktCount)))
13219 {
13220#if 0
13221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
13222 "************* %d:%d, %d ",curSta, txPktCount,
13223 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
13224#endif
13225 if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070013226 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Jeff Johnson295189b2012-06-20 16:38:30 -070013227 && (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
13228 curSta, tid)))
13229 {
13230 /* get prepare for sending message to HAL */
13231 //baCandidate[baCandidateCount].staIdx = curSta ;
13232 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
13233 newBaCandidate = WDA_ENABLE_BA ;
13234 }
13235 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
13236 }
13237 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013238 /* fill the entry for all the sta with given TID's */
13239 if(WDA_ENABLE_BA == newBaCandidate)
13240 {
13241 /* move to next BA candidate */
13242 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
13243 size += sizeof(WDI_TriggerBAReqCandidateType) ;
13244 baCandidateCount++ ;
13245 newBaCandidate = WDA_DISABLE_BA ;
13246 }
13247 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013248 /* prepare and send message to hal */
13249 if( 0 < baCandidateCount)
13250 {
13251 WDI_Status status = WDI_STATUS_SUCCESS ;
13252 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
13253 tWDA_ReqParams *pWdaParams =
13254 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013255 if(NULL == pWdaParams)
13256 {
13257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013258 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013259 VOS_ASSERT(0) ;
13260 return;
13261 }
13262 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
13263 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
13264 if(NULL == wdiTriggerBaReq)
13265 {
13266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013267 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013268 VOS_ASSERT(0) ;
13269 vos_mem_free(pWdaParams);
13270 return;
13271 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013272 do
13273 {
13274 WDI_TriggerBAReqinfoType *triggerBaInfo =
13275 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
13276 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
13277 /* TEMP_FIX: Need to see if WDI need check for assoc session for
13278 * for each request */
13279 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
13280 triggerBaInfo->ucBASessionID = 0;
13281 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
13282 } while(0) ;
13283 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
13284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013285 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013286 pWdaParams->pWdaContext = pWDA;
13287 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
13288 pWdaParams->wdaMsgParam = NULL;
13289 status = WDI_TriggerBAReq(wdiTriggerBaReq,
13290 WDA_TriggerBaReqCallback, pWdaParams) ;
13291 if(IS_WDI_STATUS_FAILURE(status))
13292 {
13293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13294 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
13295 vos_mem_free(pWdaParams->wdaMsgParam) ;
13296 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13297 vos_mem_free(pWdaParams) ;
13298 }
13299 }
13300 else
13301 {
13302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
13303 "There is no TID for initiating BA");
13304 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013305 if( VOS_STATUS_SUCCESS !=
13306 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
13307 {
13308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13309 "BA Activity Timer Stop Failed ");
13310 return ;
13311 }
13312 if( VOS_STATUS_SUCCESS !=
13313 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
13314 {
13315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13316 "BA Activity Timer Start Failed ");
13317 return;
13318 }
13319 return ;
13320}
Jeff Johnson295189b2012-06-20 16:38:30 -070013321/*
13322 * WDA common routine to create timer used by WDA.
13323 */
13324static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
13325{
Jeff Johnson295189b2012-06-20 16:38:30 -070013326 VOS_STATUS status = VOS_STATUS_SUCCESS ;
13327 tANI_U32 val = 0 ;
13328 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13329
13330 if(NULL == pMac)
13331 {
13332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013333 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013334 VOS_ASSERT(0);
13335 return VOS_STATUS_E_FAILURE;
13336 }
13337 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
13338 != eSIR_SUCCESS)
13339 {
13340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13341 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
13342 return VOS_STATUS_E_FAILURE;
13343 }
13344 val = SYS_MS_TO_TICKS(val) ;
13345
13346 /* BA activity check timer */
13347 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
13348 "BA Activity Check timer", WDA_TimerHandler,
13349 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
13350 if(status != TX_SUCCESS)
13351 {
13352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13353 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013354 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013355 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013356 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013357 /* Tx Complete Timeout timer */
13358 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
13359 "Tx Complete Check timer", WDA_TimerHandler,
13360 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013361 if(status != TX_SUCCESS)
13362 {
13363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13364 "Unable to create Tx Complete Timeout timer");
13365 /* Destroy timer of BA activity check timer */
13366 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
13367 if(status != TX_SUCCESS)
13368 {
13369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13370 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013371 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013372 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013373 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013374 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013375
13376 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
13377
13378 /* Traffic Stats timer */
13379 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
13380 "Traffic Stats timer", WDA_TimerHandler,
13381 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
13382 if(status != TX_SUCCESS)
13383 {
13384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13385 "Unable to create traffic stats timer");
13386 /* Destroy timer of BA activity check timer */
13387 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
13388 if(status != TX_SUCCESS)
13389 {
13390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13391 "Unable to Destroy BA activity timer");
13392 }
13393 /* Destroy timer of tx complete timer */
13394 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
13395 if(status != TX_SUCCESS)
13396 {
13397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13398 "Unable to Tx complete timer");
13399 }
13400 return VOS_STATUS_E_FAILURE ;
13401 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013402 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013403}
Jeff Johnson295189b2012-06-20 16:38:30 -070013404/*
13405 * WDA common routine to destroy timer used by WDA.
13406 */
13407static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
13408{
13409 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013410 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
13411 if(status != TX_SUCCESS)
13412 {
13413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13414 "Unable to Destroy Tx Complete Timeout timer");
13415 return eSIR_FAILURE ;
13416 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013417 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
13418 if(status != TX_SUCCESS)
13419 {
13420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13421 "Unable to Destroy BA activity timer");
13422 return eSIR_FAILURE ;
13423 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013424 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
13425 if(status != TX_SUCCESS)
13426 {
13427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13428 "Unable to Destroy traffic stats timer");
13429 return eSIR_FAILURE ;
13430 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013431 return eSIR_SUCCESS ;
13432}
Jeff Johnson295189b2012-06-20 16:38:30 -070013433/*
13434 * WDA timer handler.
13435 */
13436void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
13437{
13438 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
13439 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013440 /*
13441 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
13442 */
13443 wdaMsg.type = timerInfo ;
13444 wdaMsg.bodyptr = NULL;
13445 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013446 /* post the message.. */
13447 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
13448 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
13449 {
13450 vosStatus = VOS_STATUS_E_BADMSG;
13451 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013452}
Jeff Johnson295189b2012-06-20 16:38:30 -070013453/*
13454 * WDA Tx Complete timeout Indication.
13455 */
13456void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
13457{
13458 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013459 if( pWDA->pAckTxCbFunc )
13460 {
13461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013462 "TxComplete timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070013463 pWDA->pAckTxCbFunc( pMac, 0);
13464 pWDA->pAckTxCbFunc = NULL;
13465 }
13466 else
13467 {
13468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013469 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070013470 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013471}
Jeff Johnson295189b2012-06-20 16:38:30 -070013472/*
13473 * WDA Set REG Domain to VOS NV
13474 */
Abhishek Singha306a442013-11-07 18:39:01 +053013475eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
13476 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070013477{
Abhishek Singha306a442013-11-07 18:39:01 +053013478 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070013479 {
13480 return eHAL_STATUS_INVALID_PARAMETER;
13481 }
13482 return eHAL_STATUS_SUCCESS;
13483}
Jeff Johnson295189b2012-06-20 16:38:30 -070013484
Jeff Johnson295189b2012-06-20 16:38:30 -070013485#ifdef FEATURE_WLAN_SCAN_PNO
13486/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013487 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013488 *
13489 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013490void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013491{
13492 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013494 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013495 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070013496 {
13497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013498 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013499 VOS_ASSERT(0) ;
13500 return ;
13501 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013502
Yue Ma7f44bbe2013-04-12 11:47:39 -070013503 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13504 vos_mem_free(pWdaParams->wdaMsgParam);
13505 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013506
13507 return ;
13508}
Jeff Johnson295189b2012-06-20 16:38:30 -070013509/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013510 * FUNCTION: WDA_PNOScanReqCallback
13511 * Free memory.
13512 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
13513 */
13514void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013515{
Yue Ma7f44bbe2013-04-12 11:47:39 -070013516 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13517
13518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13519 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13520
13521 if(NULL == pWdaParams)
13522 {
13523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13524 "%s: pWdaParams received NULL", __func__);
13525 VOS_ASSERT(0);
13526 return;
13527 }
13528
13529 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13530 {
13531 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13532 vos_mem_free(pWdaParams->wdaMsgParam);
13533 vos_mem_free(pWdaParams);
13534 }
13535
13536 return;
13537}
13538/*
13539 * FUNCTION: WDA_UpdateScanParamsRespCallback
13540 *
13541 */
13542void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
13543{
13544 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013546 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013547 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070013548 {
13549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013550 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013551 VOS_ASSERT(0) ;
13552 return ;
13553 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013554
13555 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13556 vos_mem_free(pWdaParams->wdaMsgParam);
13557 vos_mem_free(pWdaParams);
13558
Jeff Johnson295189b2012-06-20 16:38:30 -070013559 return ;
13560}
Jeff Johnson295189b2012-06-20 16:38:30 -070013561/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013562 * FUNCTION: WDA_UpdateScanParamsReqCallback
13563 * Free memory.
13564 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
13565 */
13566void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
13567{
13568 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13569
13570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13571 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13572
13573 if(NULL == pWdaParams)
13574 {
13575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13576 "%s: pWdaParams received NULL", __func__);
13577 VOS_ASSERT(0);
13578 return;
13579 }
13580
13581 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13582 {
13583 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13584 vos_mem_free(pWdaParams->wdaMsgParam);
13585 vos_mem_free(pWdaParams);
13586 }
13587
13588 return;
13589}
13590/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013591 * FUNCTION: WDA_ProcessSetPreferredNetworkList
13592 * Request to WDI to set Preferred Network List.Offload
13593 */
13594VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
13595 tSirPNOScanReq *pPNOScanReqParams)
13596{
Jeff Johnson43971f52012-07-17 12:26:56 -070013597 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013598 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
13599 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
13600 tWDA_ReqParams *pWdaParams ;
13601 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070013602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013603 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013604 if(NULL == pwdiPNOScanReqInfo)
13605 {
13606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013607 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013608 VOS_ASSERT(0);
13609 return VOS_STATUS_E_NOMEM;
13610 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013611 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13612 if(NULL == pWdaParams)
13613 {
13614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013615 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013616 VOS_ASSERT(0);
13617 vos_mem_free(pwdiPNOScanReqInfo);
13618 return VOS_STATUS_E_NOMEM;
13619 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013620 //
13621 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
13622 //
13623 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
13624 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070013625 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
13626 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
13627 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013628 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
13629 {
13630 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
13631 &pPNOScanReqParams->aNetworks[i],
13632 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
13633 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013634 /*Scan timer intervals*/
13635 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
13636 &pPNOScanReqParams->scanTimers,
13637 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070013638 /*Probe template for 2.4GHz band*/
13639 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
13640 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
13641 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013642 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
13643 pPNOScanReqParams->p24GProbeTemplate,
13644 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070013645 /*Probe template for 5GHz band*/
13646 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
13647 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
13648 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013649 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
13650 pPNOScanReqParams->p5GProbeTemplate,
13651 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013652 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
13653 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013654
Jeff Johnson295189b2012-06-20 16:38:30 -070013655 /* Store Params pass it to WDI */
13656 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
13657 pWdaParams->pWdaContext = pWDA;
13658 /* Store param pointer as passed in by caller */
13659 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013660 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013661 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013662 if(IS_WDI_STATUS_FAILURE(status))
13663 {
13664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13665 "Failure in Set PNO REQ WDI API, free all the memory " );
13666 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13667 vos_mem_free(pWdaParams->wdaMsgParam);
13668 pWdaParams->wdaWdiApiMsgParam = NULL;
13669 pWdaParams->wdaMsgParam = NULL;
13670 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013671 return CONVERT_WDI2VOS_STATUS(status) ;
13672}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013673
13674#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
13675
13676void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
13677{
13678 /*Convert the CSR Auth types to WDI Auth types */
13679 switch (csrAuthType)
13680 {
13681 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
13682 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
13683 break;
13684#ifdef FEATURE_WLAN_CCX
13685 case eCSR_AUTH_TYPE_CCKM_WPA:
13686 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
13687 break;
13688#endif
13689 case eCSR_AUTH_TYPE_WPA:
13690 *AuthType = eWDA_AUTH_TYPE_WPA;
13691 break;
13692 case eCSR_AUTH_TYPE_WPA_PSK:
13693 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
13694 break;
13695#ifdef FEATURE_WLAN_CCX
13696 case eCSR_AUTH_TYPE_CCKM_RSN:
13697 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
13698 break;
13699#endif
13700 case eCSR_AUTH_TYPE_RSN:
13701 *AuthType = eWDA_AUTH_TYPE_RSN;
13702 break;
13703 case eCSR_AUTH_TYPE_RSN_PSK:
13704 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
13705 break;
13706#if defined WLAN_FEATURE_VOWIFI_11R
13707 case eCSR_AUTH_TYPE_FT_RSN:
13708 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
13709 break;
13710 case eCSR_AUTH_TYPE_FT_RSN_PSK:
13711 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
13712 break;
13713#endif
13714#ifdef FEATURE_WLAN_WAPI
13715 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
13716 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
13717 break;
13718 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
13719 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
13720 break;
13721#endif /* FEATURE_WLAN_WAPI */
13722 case eCSR_AUTH_TYPE_SHARED_KEY:
13723 case eCSR_AUTH_TYPE_AUTOSWITCH:
13724 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
13725 break;
13726#if 0
13727 case eCSR_AUTH_TYPE_SHARED_KEY:
13728 *AuthType = eWDA_AUTH_TYPE_SHARED_KEY;
13729 break;
13730 case eCSR_AUTH_TYPE_AUTOSWITCH:
13731 *AuthType = eWDA_AUTH_TYPE_AUTOSWITCH;
13732#endif
13733 default:
13734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13735 "%s: Unknown Auth Type", __func__);
13736 break;
13737 }
13738}
13739void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
13740{
13741 switch (csrEncrType)
13742 {
13743 case eCSR_ENCRYPT_TYPE_NONE:
13744 *EncrType = WDI_ED_NONE;
13745 break;
13746 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
13747 case eCSR_ENCRYPT_TYPE_WEP40:
13748 *EncrType = WDI_ED_WEP40;
13749 break;
13750 case eCSR_ENCRYPT_TYPE_WEP104:
13751 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
13752 *EncrType = WDI_ED_WEP104;
13753 break;
13754 case eCSR_ENCRYPT_TYPE_TKIP:
13755 *EncrType = WDI_ED_TKIP;
13756 break;
13757 case eCSR_ENCRYPT_TYPE_AES:
13758 *EncrType = WDI_ED_CCMP;
13759 break;
13760#ifdef WLAN_FEATURE_11W
13761 case eCSR_ENCRYPT_TYPE_AES_CMAC:
13762 *EncrType = WDI_ED_AES_128_CMAC;
13763 break;
13764#endif
13765#ifdef FEATURE_WLAN_WAPI
13766 case eCSR_ENCRYPT_TYPE_WPI:
13767 *EncrType = WDI_ED_WPI;
13768 break;
13769#endif
13770 case eCSR_ENCRYPT_TYPE_ANY:
13771 *EncrType = WDI_ED_ANY;
13772 break;
13773
13774 default:
13775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13776 "%s: Unknown Encryption Type", __func__);
13777 break;
13778 }
13779}
13780
13781/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013782 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013783 * Request to WDI to set Roam Offload Scan
13784 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013785VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013786 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
13787{
13788 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013789 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
13790 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013791 tWDA_ReqParams *pWdaParams ;
13792 v_U8_t csrAuthType;
13793 WDI_RoamNetworkType *pwdiRoamNetworkType;
13794 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
13795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13796 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013797 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013798 {
13799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13800 "%s: VOS MEM Alloc Failure", __func__);
13801 VOS_ASSERT(0);
13802 return VOS_STATUS_E_NOMEM;
13803 }
13804 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13805 if (NULL == pWdaParams)
13806 {
13807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13808 "%s: VOS MEM Alloc Failure", __func__);
13809 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013810 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013811 return VOS_STATUS_E_NOMEM;
13812 }
13813
13814 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013815 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013816 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013817 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
13818 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013819 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
13820 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
13821 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
13822 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
13823 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
13824 sizeof(pwdiRoamNetworkType->currAPbssid));
13825 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
13826 csrAuthType);
13827 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
13828 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
13829 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
13830 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
13831 pwdiRoamOffloadScanInfo->LookupThreshold =
13832 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080013833 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
13834 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013835 pwdiRoamOffloadScanInfo->RoamRssiDiff =
13836 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080013837 pwdiRoamOffloadScanInfo->MAWCEnabled =
13838 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013839 pwdiRoamOffloadScanInfo->Command =
13840 pRoamOffloadScanReqParams->Command ;
13841 pwdiRoamOffloadScanInfo->StartScanReason =
13842 pRoamOffloadScanReqParams->StartScanReason ;
13843 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
13844 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
13845 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
13846 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
13847 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
13848 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
13849 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
13850 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
13851 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
13852 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
13853 pwdiRoamOffloadScanInfo->IsCCXEnabled =
13854 pRoamOffloadScanReqParams->IsCCXEnabled ;
13855 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
13856 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
13857 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
13858 pwdiRoamNetworkType->ssId.ucLength =
13859 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
13860 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
13861 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
13862 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
13863 pwdiRoamNetworkType->ChannelCount =
13864 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
13865 pwdiRoamOffloadScanInfo->ChannelCacheType =
13866 pRoamOffloadScanReqParams->ChannelCacheType;
13867 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
13868 pRoamOffloadScanReqParams->ValidChannelList,
13869 pRoamOffloadScanReqParams->ValidChannelCount);
13870 pwdiRoamOffloadScanInfo->ValidChannelCount =
13871 pRoamOffloadScanReqParams->ValidChannelCount;
13872 pwdiRoamOffloadScanInfo->us24GProbeSize =
13873 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
13874 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
13875 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
13876 pRoamOffloadScanReqParams->p24GProbeTemplate,
13877 pwdiRoamOffloadScanInfo->us24GProbeSize);
13878 pwdiRoamOffloadScanInfo->us5GProbeSize =
13879 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
13880 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
13881 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
13882 pRoamOffloadScanReqParams->p5GProbeTemplate,
13883 pwdiRoamOffloadScanInfo->us5GProbeSize);
13884 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
13885 pRoamOffloadScanReqParams->MDID.mdiePresent;
13886 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
13887 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013888 pwdiRoamOffloadScanInfo->nProbes =
13889 pRoamOffloadScanReqParams->nProbes;
13890 pwdiRoamOffloadScanInfo->HomeAwayTime =
13891 pRoamOffloadScanReqParams->HomeAwayTime;
13892 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013893 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013894 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013895 pWdaParams->pWdaContext = pWDA;
13896 /* Store param pointer as passed in by caller */
13897 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013898 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013899 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
13900 if(IS_WDI_STATUS_FAILURE(status))
13901 {
13902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13903 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
13904 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13905 vos_mem_free(pWdaParams->wdaMsgParam);
13906 pWdaParams->wdaWdiApiMsgParam = NULL;
13907 pWdaParams->wdaMsgParam = NULL;
13908 }
13909 return CONVERT_WDI2VOS_STATUS(status) ;
13910}
13911#endif
13912
Jeff Johnson295189b2012-06-20 16:38:30 -070013913/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013914 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013915 *
13916 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013917void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013918{
13919 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13920
13921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013922 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013923
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053013924 if(NULL == pWdaParams)
13925 {
13926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013927 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053013928 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013929 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053013930 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013931
Jeff Johnson295189b2012-06-20 16:38:30 -070013932 vos_mem_free(pWdaParams->wdaMsgParam) ;
13933 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13934 vos_mem_free(pWdaParams) ;
13935
13936 return ;
13937}
13938/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013939 * FUNCTION: WDA_RssiFilterReqCallback
13940 * Free memory.
13941 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
13942 */
13943void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
13944{
13945 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13946
13947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13948 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13949
13950 if(NULL == pWdaParams)
13951 {
13952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13953 "%s: pWdaParams received NULL", __func__);
13954 VOS_ASSERT(0);
13955 return;
13956 }
13957
13958 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13959 {
13960 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13961 vos_mem_free(pWdaParams->wdaMsgParam);
13962 vos_mem_free(pWdaParams);
13963 }
13964
13965 return;
13966}
13967/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013968 * FUNCTION: WDA_ProcessSetPreferredNetworkList
13969 * Request to WDI to set Preferred Network List.Offload
13970 */
13971VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
13972 tSirSetRSSIFilterReq* pRssiFilterParams)
13973{
Jeff Johnson43971f52012-07-17 12:26:56 -070013974 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013975 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
13976 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
13977 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013979 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013980 if(NULL == pwdiSetRssiFilterReqInfo)
13981 {
13982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013983 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013984 VOS_ASSERT(0);
13985 return VOS_STATUS_E_NOMEM;
13986 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013987 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13988 if(NULL == pWdaParams)
13989 {
13990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013991 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013992 VOS_ASSERT(0);
13993 vos_mem_free(pwdiSetRssiFilterReqInfo);
13994 return VOS_STATUS_E_NOMEM;
13995 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013996 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013997 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
13998 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013999
Jeff Johnson295189b2012-06-20 16:38:30 -070014000 /* Store Params pass it to WDI */
14001 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
14002 pWdaParams->pWdaContext = pWDA;
14003 /* Store param pointer as passed in by caller */
14004 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014005 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014006 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014007 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014008 if(IS_WDI_STATUS_FAILURE(status))
14009 {
14010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14011 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
14012 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14013 vos_mem_free(pWdaParams->wdaMsgParam);
14014 pWdaParams->wdaWdiApiMsgParam = NULL;
14015 pWdaParams->wdaMsgParam = NULL;
14016 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014017 return CONVERT_WDI2VOS_STATUS(status) ;
14018}
14019
Jeff Johnson295189b2012-06-20 16:38:30 -070014020/*
14021 * FUNCTION: WDA_ProcessUpdateScanParams
14022 * Request to WDI to update Scan Parameters
14023 */
14024VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
14025 tSirUpdateScanParams *pUpdateScanParams)
14026{
Jeff Johnson43971f52012-07-17 12:26:56 -070014027 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014028 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
14029 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
14030 sizeof(WDI_UpdateScanParamsInfoType)) ;
14031 tWDA_ReqParams *pWdaParams ;
14032 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014034 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014035 if(NULL == wdiUpdateScanParamsInfoType)
14036 {
14037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014038 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014039 VOS_ASSERT(0);
14040 return VOS_STATUS_E_NOMEM;
14041 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014042 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14043 if ( NULL == pWdaParams )
14044 {
14045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014046 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014047 VOS_ASSERT(0);
14048 vos_mem_free(wdiUpdateScanParamsInfoType);
14049 return VOS_STATUS_E_NOMEM;
14050 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014051 //
14052 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
14053 //
Jeff Johnson295189b2012-06-20 16:38:30 -070014054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14055 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
14056 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
14057 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080014058 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070014059 pUpdateScanParams->b11dEnabled,
14060 pUpdateScanParams->b11dResolved,
14061 pUpdateScanParams->ucChannelCount,
14062 pUpdateScanParams->usPassiveMinChTime,
14063 pUpdateScanParams->usPassiveMaxChTime,
14064 pUpdateScanParams->usActiveMinChTime,
14065 pUpdateScanParams->usActiveMaxChTime,
14066 sizeof(tSirUpdateScanParams),
14067 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
14068
Jeff Johnson295189b2012-06-20 16:38:30 -070014069 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
14070 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070014071 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
14072 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070014073 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
14074 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070014075 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
14076 pUpdateScanParams->usActiveMaxChTime;
14077 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
14078 pUpdateScanParams->usActiveMinChTime;
14079 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
14080 pUpdateScanParams->usPassiveMaxChTime;
14081 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
14082 pUpdateScanParams->usPassiveMinChTime;
14083
Jeff Johnson295189b2012-06-20 16:38:30 -070014084 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053014085 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
14086 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070014087
Jeff Johnson295189b2012-06-20 16:38:30 -070014088 for ( i = 0; i <
14089 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
14090 i++)
14091 {
14092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14093 "Update Scan Parameters channel: %d",
14094 pUpdateScanParams->aChannels[i]);
14095
14096 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
14097 pUpdateScanParams->aChannels[i];
14098 }
14099
Yue Ma7f44bbe2013-04-12 11:47:39 -070014100 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
14101 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014102
Jeff Johnson295189b2012-06-20 16:38:30 -070014103 /* Store Params pass it to WDI */
14104 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
14105 pWdaParams->pWdaContext = pWDA;
14106 /* Store param pointer as passed in by caller */
14107 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070014108
Jeff Johnson295189b2012-06-20 16:38:30 -070014109
14110
14111 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014112 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014113 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014114 if(IS_WDI_STATUS_FAILURE(status))
14115 {
14116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14117 "Failure in Update Scan Params EQ WDI API, free all the memory " );
14118 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14119 vos_mem_free(pWdaParams->wdaMsgParam);
14120 vos_mem_free(pWdaParams);
14121 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014122 return CONVERT_WDI2VOS_STATUS(status) ;
14123}
14124#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014125
14126#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
14127/*
14128 * FUNCTION: WDA_RoamOffloadScanReqCallback
14129 *
14130 */
14131void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
14132{
14133 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014134 vos_msg_t vosMsg;
14135 wpt_uint8 reason = 0;
14136
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070014137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014138 "<------ %s " ,__func__);
14139 if (NULL == pWdaParams)
14140 {
14141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14142 "%s: pWdaParams received NULL", __func__);
14143 VOS_ASSERT(0) ;
14144 return ;
14145 }
14146 if ( pWdaParams != NULL )
14147 {
14148 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
14149 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014150 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014151 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14152 }
14153 if ( pWdaParams->wdaMsgParam != NULL)
14154 {
14155 vos_mem_free(pWdaParams->wdaMsgParam);
14156 }
14157
14158 vos_mem_free(pWdaParams) ;
14159 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014160 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
14161 vosMsg.bodyptr = NULL;
14162 if (WDI_STATUS_SUCCESS != status)
14163 {
14164 reason = 0;
14165 }
14166 vosMsg.bodyval = reason;
14167 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14168 {
14169 /* free the mem and return */
14170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070014171 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014172 }
14173
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014174 return ;
14175}
14176#endif
14177
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014178/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014179 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014180 *
14181 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014182void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014183{
14184 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14185
14186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14187 "<------ %s " ,__func__);
14188
14189 if(NULL == pWdaParams)
14190 {
14191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14192 "%s: pWdaParams received NULL", __func__);
14193 VOS_ASSERT(0);
14194 return;
14195 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014196
14197 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14198 vos_mem_free(pWdaParams->wdaMsgParam);
14199 vos_mem_free(pWdaParams);
14200
14201 return;
14202}
14203/*
14204 * FUNCTION: WDA_SetPowerParamsReqCallback
14205 * Free memory.
14206 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
14207 */
14208void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
14209{
14210 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14211
14212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14213 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14214
14215 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014216 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070014217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14218 "%s: pWdaParams received NULL", __func__);
14219 VOS_ASSERT(0);
14220 return;
14221 }
14222
14223 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14224 {
14225 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14226 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014227 vos_mem_free(pWdaParams);
14228 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014229
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014230 return;
14231}
14232
Jeff Johnson295189b2012-06-20 16:38:30 -070014233#ifdef WLAN_FEATURE_PACKET_FILTERING
14234/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014235 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014236 *
14237 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014238void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014239 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
14240 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014241{
14242 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014244 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014245 if(NULL == pWdaParams)
14246 {
14247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014248 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014249 VOS_ASSERT(0) ;
14250 return ;
14251 }
14252
14253 vos_mem_free(pWdaParams->wdaMsgParam) ;
14254 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14255 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014256 //print a msg, nothing else to do
14257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014258 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070014259 return ;
14260}
Jeff Johnson295189b2012-06-20 16:38:30 -070014261/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014262 * FUNCTION: WDA_8023MulticastListReqCallback
14263 * Free memory.
14264 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
14265 */
14266void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
14267{
14268 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14269
14270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14271 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14272
14273 if(NULL == pWdaParams)
14274 {
14275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14276 "%s: pWdaParams received NULL", __func__);
14277 VOS_ASSERT(0);
14278 return;
14279 }
14280
14281 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14282 {
14283 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14284 vos_mem_free(pWdaParams->wdaMsgParam);
14285 vos_mem_free(pWdaParams);
14286 }
14287
14288 return;
14289}
14290/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014291 * FUNCTION: WDA_Process8023MulticastListReq
14292 * Request to WDI to add 8023 Multicast List
14293 */
14294VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
14295 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
14296{
Jeff Johnson43971f52012-07-17 12:26:56 -070014297 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014298 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
14299 tWDA_ReqParams *pWdaParams ;
14300 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014302 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014303 pwdiFltPktSetMcListReqParamsType =
14304 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
14305 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
14306 ) ;
14307 if(NULL == pwdiFltPktSetMcListReqParamsType)
14308 {
14309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014310 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014311 return VOS_STATUS_E_NOMEM;
14312 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014313 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14314 if(NULL == pWdaParams)
14315 {
14316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014317 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014318 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
14319 return VOS_STATUS_E_NOMEM;
14320 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014321
Jeff Johnson295189b2012-06-20 16:38:30 -070014322 //
14323 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
14324 //
14325 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070014326 pRcvFltMcAddrList->ulMulticastAddrCnt;
14327
14328 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
14329 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
14330 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
14331 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
14332
Jeff Johnson295189b2012-06-20 16:38:30 -070014333 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
14334 {
14335 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
14336 &(pRcvFltMcAddrList->multicastAddr[i]),
14337 sizeof(tSirMacAddr));
14338 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014339 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
14340 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014341
Jeff Johnson295189b2012-06-20 16:38:30 -070014342 /* Store Params pass it to WDI */
14343 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
14344 pWdaParams->pWdaContext = pWDA;
14345 /* Store param pointer as passed in by caller */
14346 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070014347 status = WDI_8023MulticastListReq(
14348 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014349 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014350 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014351 if(IS_WDI_STATUS_FAILURE(status))
14352 {
14353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14354 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
14355 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14356 vos_mem_free(pWdaParams->wdaMsgParam);
14357 vos_mem_free(pWdaParams);
14358 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014359 return CONVERT_WDI2VOS_STATUS(status) ;
14360}
Jeff Johnson295189b2012-06-20 16:38:30 -070014361/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014362 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014363 *
14364 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014365void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014366 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
14367 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014368{
14369 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014371 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014372 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070014373 if(NULL == pWdaParams)
14374 {
14375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014376 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014377 VOS_ASSERT(0) ;
14378 return ;
14379 }
14380
14381 vos_mem_free(pWdaParams->wdaMsgParam) ;
14382 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14383 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014384 //print a msg, nothing else to do
14385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014386 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070014387 return ;
14388}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014389
14390/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014391 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
14392 * Free memory.
14393 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014394 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014395void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014396 void* pUserData)
14397{
14398 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14399
14400 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14401 "<------ %s, wdiStatus: %d",
14402 __func__, wdiStatus);
14403
14404 if (NULL == pWdaParams)
14405 {
14406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14407 "%s: Invalid pWdaParams pointer", __func__);
14408 VOS_ASSERT(0);
14409 return;
14410 }
14411
14412 if (IS_WDI_STATUS_FAILURE(wdiStatus))
14413 {
14414 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14415 vos_mem_free(pWdaParams->wdaMsgParam);
14416 vos_mem_free(pWdaParams);
14417 }
14418
14419 return;
14420}
14421
Jeff Johnson295189b2012-06-20 16:38:30 -070014422/*
14423 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
14424 * Request to WDI to set Receive Filters
14425 */
14426VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
14427 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
14428{
Jeff Johnson43971f52012-07-17 12:26:56 -070014429 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014430 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
14431 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
14432 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
14433 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
14434 tWDA_ReqParams *pWdaParams ;
14435 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014437 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014438 if(NULL == pwdiSetRcvPktFilterReqParamsType)
14439 {
14440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014441 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014442 VOS_ASSERT(0);
14443 return VOS_STATUS_E_NOMEM;
14444 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014445 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14446 if(NULL == pWdaParams)
14447 {
14448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014449 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014450 VOS_ASSERT(0);
14451 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
14452 return VOS_STATUS_E_NOMEM;
14453 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014454 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
14455 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
14456 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
14457 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070014458 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
14459 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
14460
14461 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
14462 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014463
14464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14465 "FID %d FT %d NParams %d CT %d",
14466 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
14467 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
14468 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
14469 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070014470 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
14471 {
14472 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
14473 &pRcvPktFilterCfg->paramsData[i],
14474 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070014475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014476 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070014477 pwdiSetRcvPktFilterReqParamsType->
14478 wdiPktFilterCfg.paramsData[i].protocolLayer,
14479 pwdiSetRcvPktFilterReqParamsType->
14480 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070014481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014482 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070014483 pwdiSetRcvPktFilterReqParamsType->
14484 wdiPktFilterCfg.paramsData[i].dataOffset,
14485 pwdiSetRcvPktFilterReqParamsType->
14486 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070014487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014488 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070014489 pwdiSetRcvPktFilterReqParamsType->
14490 wdiPktFilterCfg.paramsData[i].compareData[0],
14491 pwdiSetRcvPktFilterReqParamsType->
14492 wdiPktFilterCfg.paramsData[i].compareData[1],
14493 pwdiSetRcvPktFilterReqParamsType->
14494 wdiPktFilterCfg.paramsData[i].compareData[2],
14495 pwdiSetRcvPktFilterReqParamsType->
14496 wdiPktFilterCfg.paramsData[i].compareData[3],
14497 pwdiSetRcvPktFilterReqParamsType->
14498 wdiPktFilterCfg.paramsData[i].compareData[4],
14499 pwdiSetRcvPktFilterReqParamsType->
14500 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070014501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014502 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070014503 pwdiSetRcvPktFilterReqParamsType->
14504 wdiPktFilterCfg.paramsData[i].dataMask[0],
14505 pwdiSetRcvPktFilterReqParamsType->
14506 wdiPktFilterCfg.paramsData[i].dataMask[1],
14507 pwdiSetRcvPktFilterReqParamsType->
14508 wdiPktFilterCfg.paramsData[i].dataMask[2],
14509 pwdiSetRcvPktFilterReqParamsType->
14510 wdiPktFilterCfg.paramsData[i].dataMask[3],
14511 pwdiSetRcvPktFilterReqParamsType->
14512 wdiPktFilterCfg.paramsData[i].dataMask[4],
14513 pwdiSetRcvPktFilterReqParamsType->
14514 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070014515 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014516 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014517 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014518 /* Store Params pass it to WDI */
14519 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
14520 pWdaParams->pWdaContext = pWDA;
14521 /* Store param pointer as passed in by caller */
14522 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070014523 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014524 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014525 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014526 if(IS_WDI_STATUS_FAILURE(status))
14527 {
14528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14529 "Failure in SetFilter(),free all the memory,status %d ",status);
14530 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14531 vos_mem_free(pWdaParams->wdaMsgParam);
14532 vos_mem_free(pWdaParams);
14533 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014534 return CONVERT_WDI2VOS_STATUS(status) ;
14535}
Jeff Johnson295189b2012-06-20 16:38:30 -070014536/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014537 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014538 *
14539 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014540void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014541 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
14542 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014543{
14544 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14545 tWDA_CbContext *pWDA;
14546 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
14547 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
14548 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
14549 tANI_U8 i;
14550 vos_msg_t vosMsg;
14551
14552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014553 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014554 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
14555
Jeff Johnsone7245742012-09-05 17:12:55 -070014556 if(NULL == pRcvFltPktMatchCntRsp)
14557 {
14558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014559 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070014560 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014561 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070014562 return ;
14563 }
14564
Jeff Johnson295189b2012-06-20 16:38:30 -070014565 if(NULL == pWdaParams)
14566 {
14567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014568 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014569 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014570 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070014571 return ;
14572 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014573 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
14574 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070014575 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
14576 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
14577
14578 /* Message Header */
14579 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
14580 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
14581
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014582 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070014583
14584 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
14585 {
14586 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
14587 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
14588 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014589 /* VOS message wrapper */
14590 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
14591 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
14592 vosMsg.bodyval = 0;
14593 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14594 {
14595 /* free the mem and return */
14596 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
14597 }
14598
14599 vos_mem_free(pWdaParams->wdaMsgParam) ;
14600 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14601 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070014602
14603 return;
14604}
14605/*
14606 * FUNCTION: WDA_FilterMatchCountReqCallback
14607 * Free memory and send RSP back to SME.
14608 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
14609 */
14610void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
14611{
14612 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14613 vos_msg_t vosMsg;
14614
14615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14616 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14617
14618 if(NULL == pWdaParams)
14619 {
14620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14621 "%s: pWdaParams received NULL", __func__);
14622 VOS_ASSERT(0);
14623 return;
14624 }
14625
14626 /* VOS message wrapper */
14627 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
14628 vosMsg.bodyptr = NULL;
14629 vosMsg.bodyval = 0;
14630
14631 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14632 {
14633 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14634 vos_mem_free(pWdaParams->wdaMsgParam);
14635 vos_mem_free(pWdaParams);
14636 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
14637 }
14638
14639 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070014640}
Jeff Johnson295189b2012-06-20 16:38:30 -070014641/*
14642 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
14643 * Request to WDI to get PC Filter Match Count
14644 */
14645VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
14646{
Jeff Johnson43971f52012-07-17 12:26:56 -070014647 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014648 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
14649 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
14650 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014652 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014653 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
14654 {
14655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014656 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014657 VOS_ASSERT(0);
14658 return VOS_STATUS_E_NOMEM;
14659 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014660 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14661 if(NULL == pWdaParams)
14662 {
14663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014664 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014665 VOS_ASSERT(0);
14666 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
14667 return VOS_STATUS_E_NOMEM;
14668 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014669
Yue Ma7f44bbe2013-04-12 11:47:39 -070014670 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
14671 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014672
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014673 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
14674 pRcvFltPktMatchRsp->bssId,
14675 sizeof(wpt_macAddr));
14676
Jeff Johnson295189b2012-06-20 16:38:30 -070014677 /* Store Params pass it to WDI */
14678 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
14679 pWdaParams->pWdaContext = pWDA;
14680 /* Store param pointer as passed in by caller */
14681 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070014682 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014683 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014684 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014685 if(IS_WDI_STATUS_FAILURE(status))
14686 {
14687 /* failure returned by WDI API */
14688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14689 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
14690 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14691 vos_mem_free(pWdaParams) ;
14692 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
14693 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
14694 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014695 return CONVERT_WDI2VOS_STATUS(status) ;
14696}
Jeff Johnson295189b2012-06-20 16:38:30 -070014697/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014698 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014699 *
14700 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014701void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014702 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
14703 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014704{
14705 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014707 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014708/* WDA_VOS_ASSERT(NULL != pWdaParams); */
14709 if(NULL == pWdaParams)
14710 {
14711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014712 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014713 VOS_ASSERT(0) ;
14714 return ;
14715 }
14716
14717 vos_mem_free(pWdaParams->wdaMsgParam) ;
14718 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14719 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014720 //print a msg, nothing else to do
14721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014722 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070014723 return ;
14724}
Jeff Johnson295189b2012-06-20 16:38:30 -070014725/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014726 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
14727 * Free memory.
14728 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
14729 */
14730void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
14731{
14732 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14733
14734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14735 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14736
14737 if(NULL == pWdaParams)
14738 {
14739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14740 "%s: Invalid pWdaParams pointer", __func__);
14741 VOS_ASSERT(0);
14742 return;
14743 }
14744
14745 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14746 {
14747 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14748 vos_mem_free(pWdaParams->wdaMsgParam);
14749 vos_mem_free(pWdaParams);
14750 }
14751
14752 return;
14753}
14754/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014755 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
14756 * Request to WDI to clear Receive Filters
14757 */
14758VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
14759 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
14760{
Jeff Johnson43971f52012-07-17 12:26:56 -070014761 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014762 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
14763 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
14764 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014766 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014767 if(NULL == pwdiRcvFltPktClearReqParamsType)
14768 {
14769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014770 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014771 VOS_ASSERT(0);
14772 return VOS_STATUS_E_NOMEM;
14773 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014774 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14775 if(NULL == pWdaParams)
14776 {
14777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014778 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014779 VOS_ASSERT(0);
14780 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
14781 return VOS_STATUS_E_NOMEM;
14782 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014783 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
14784 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070014785 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
14786 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
14787 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
14788 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014789
Yue Ma7f44bbe2013-04-12 11:47:39 -070014790 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014791 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014792 /* Store Params pass it to WDI */
14793 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
14794 pWdaParams->pWdaContext = pWDA;
14795 /* Store param pointer as passed in by caller */
14796 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070014797 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014798 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014799 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014800 if(IS_WDI_STATUS_FAILURE(status))
14801 {
14802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14803 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
14804 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080014805 vos_mem_free(pWdaParams->wdaMsgParam);
14806 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014807 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014808 return CONVERT_WDI2VOS_STATUS(status) ;
14809}
14810#endif // WLAN_FEATURE_PACKET_FILTERING
14811
Jeff Johnson295189b2012-06-20 16:38:30 -070014812/*
14813 * FUNCTION: WDA_ProcessSetPowerParamsReq
14814 * Request to WDI to set power params
14815 */
14816VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
14817 tSirSetPowerParamsReq *pPowerParams)
14818{
Jeff Johnson43971f52012-07-17 12:26:56 -070014819 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014820 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
14821 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014822 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014824 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014825 if(NULL == pwdiSetPowerParamsReqInfo)
14826 {
14827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014828 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014829 VOS_ASSERT(0);
14830 return VOS_STATUS_E_NOMEM;
14831 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014832 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14833 if(NULL == pWdaParams)
14834 {
14835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014836 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014837 VOS_ASSERT(0);
14838 vos_mem_free(pwdiSetPowerParamsReqInfo);
14839 return VOS_STATUS_E_NOMEM;
14840 }
Jeff Johnsone7245742012-09-05 17:12:55 -070014841
Jeff Johnson295189b2012-06-20 16:38:30 -070014842
14843 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
14844 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070014845 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
14846 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070014847 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
14848 pPowerParams->uListenInterval;
14849 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
14850 pPowerParams->uBcastMcastFilter;
14851 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
14852 pPowerParams->uEnableBET;
14853 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
14854 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070014855 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
14856 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070014857 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
14858 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014859
Jeff Johnson295189b2012-06-20 16:38:30 -070014860 /* Store Params pass it to WDI */
14861 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
14862 pWdaParams->pWdaContext = pWDA;
14863 /* Store param pointer as passed in by caller */
14864 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014865 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014866 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014867 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014868 if(IS_WDI_STATUS_FAILURE(status))
14869 {
14870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14871 "Failure in Set power params REQ WDI API, free all the memory " );
14872 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14873 vos_mem_free(pWdaParams->wdaMsgParam);
14874 pWdaParams->wdaWdiApiMsgParam = NULL;
14875 pWdaParams->wdaMsgParam = NULL;
14876 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014877 return CONVERT_WDI2VOS_STATUS(status) ;
14878}
14879
14880/*
14881 * FUNCTION: WDA_SetTmLevelRspCallback
14882 * Set TM Level response
14883 */
14884void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
14885{
14886 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14887
14888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014889 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014890
14891 if(NULL == pWdaParams)
14892 {
14893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014894 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014895 VOS_ASSERT(0) ;
14896 return ;
14897 }
14898
14899 /* Dose not need to send notification to upper layer
14900 * Just free allocated resources */
14901 if( pWdaParams != NULL )
14902 {
14903 if( pWdaParams->wdaWdiApiMsgParam != NULL )
14904 {
14905 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14906 }
14907 vos_mem_free(pWdaParams->wdaMsgParam) ;
14908 vos_mem_free(pWdaParams) ;
14909 }
14910}
14911
14912/*
14913 * FUNCTION: WDA_ProcessSetTmLevelReq
14914 * Set TM Level request
14915 */
14916VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
14917 tAniSetTmLevelReq *setTmLevelReq)
14918{
14919 WDI_Status status = WDI_STATUS_SUCCESS ;
14920 tWDA_ReqParams *pWdaParams ;
14921 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
14922 (WDI_SetTmLevelReqType *)vos_mem_malloc(
14923 sizeof(WDI_SetTmLevelReqType)) ;
14924 if(NULL == wdiSetTmLevelReq)
14925 {
14926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014927 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014928 VOS_ASSERT(0);
14929 return VOS_STATUS_E_NOMEM;
14930 }
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__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014937 VOS_ASSERT(0);
14938 vos_mem_free(wdiSetTmLevelReq);
14939 return VOS_STATUS_E_NOMEM;
14940 }
14941
14942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014943 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014944
14945 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
14946 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
14947
14948 pWdaParams->pWdaContext = pWDA;
14949 pWdaParams->wdaMsgParam = setTmLevelReq;
14950 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
14951
14952 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
14953 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
14954
14955 if(IS_WDI_STATUS_FAILURE(status))
14956 {
14957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080014958 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070014959 vos_mem_free(pWdaParams->wdaMsgParam) ;
14960 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14961 vos_mem_free(pWdaParams) ;
14962 }
14963
14964 return CONVERT_WDI2VOS_STATUS(status) ;
14965}
14966
14967VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
14968 tpTxControlParams pTxCtrlParam)
14969{
14970 VOS_STATUS wdaStatus;
14971
14972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014973 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014974 if( pTxCtrlParam == NULL )
14975 {
14976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014977 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014978 return VOS_STATUS_E_FAILURE;
14979 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014980 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
14981 {
14982 wdaStatus = WDA_SuspendDataTx(pWDA);
14983 }
14984 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
14985 {
14986 wdaStatus = WDA_ResumeDataTx(pWDA);
14987 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014988 return wdaStatus;
14989}
14990
14991 /* FUNCTION WDA_featureCapsExchange
14992 * WDA API to invoke capability exchange between host and FW.
14993 */
14994void WDA_featureCapsExchange(v_PVOID_t pVosContext)
14995{
14996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014997 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070014998 WDI_featureCapsExchangeReq( NULL, pVosContext);
14999}
15000
Yathish9f22e662012-12-10 14:21:35 -080015001/* FUNCTION WDA_disableCapablityFeature
15002 * WDA API to diable Active mode offload in host.
15003 */
15004void WDA_disableCapablityFeature(tANI_U8 feature_index)
15005{
15006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15007 "%s:enter", __func__ );
15008 WDI_disableCapablityFeature(feature_index);
15009}
15010
Jeff Johnson295189b2012-06-20 16:38:30 -070015011 /* FUNCTION WDA_getHostWlanFeatCaps
15012 * Wrapper for WDI API, that will return if the feature (enum value).passed
15013 * to this API is supported or not in Host
15014 * return value
15015 * 0 - implies feature is NOT Supported
15016 * any non zero value - implies feature is SUPPORTED
15017 */
15018tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
15019{
15020 return WDI_getHostWlanFeatCaps(featEnumValue);
15021}
15022
15023 /* FUNCTION WDA_getFwWlanFeatCaps
15024 * Wrapper for WDI API, that will return if the feature (enum value).passed
15025 * to this API is supported or not in FW
15026 * return value
15027 * 0 - implies feature is NOT Supported
15028 * any non zero value - implies feature is SUPPORTED
15029 */
15030tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
15031{
15032 return WDI_getFwWlanFeatCaps(featEnumValue);
15033}
15034
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015035
Jeff Johnson295189b2012-06-20 16:38:30 -070015036/*
15037 * FUNCTION: WDA_shutdown
15038 * Shutdown WDA/WDI without handshaking with Riva.
15039 * Synchronous function.
15040 */
15041VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
15042{
15043 WDI_Status wdiStatus;
15044 //tANI_U8 eventIdx = 0;
15045 VOS_STATUS status = VOS_STATUS_SUCCESS;
15046 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070015047 if (NULL == pWDA)
15048 {
15049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015050 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070015051 VOS_ASSERT(0);
15052 return VOS_STATUS_E_FAILURE;
15053 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015054 /* FTM mode stay START_STATE */
15055 if( (WDA_READY_STATE != pWDA->wdaState) &&
15056 (WDA_INIT_STATE != pWDA->wdaState) &&
15057 (WDA_START_STATE != pWDA->wdaState) )
15058 {
15059 VOS_ASSERT(0);
15060 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015061
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015062 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
15063 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070015064 {
15065 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015066 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015067 }
Leo Chang9d76f622013-08-23 16:34:52 -070015068 else
15069 {
15070 vos_event_destroy(&pWDA->ftmStopDoneEvent);
15071 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015072
Jeff Johnson295189b2012-06-20 16:38:30 -070015073 /* call WDI shutdown */
15074 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070015075 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
15076 {
15077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15078 "error in WDA Stop" );
15079 status = VOS_STATUS_E_FAILURE;
15080 }
15081 /* WDI stop is synchrnous, shutdown is complete when it returns */
15082 pWDA->wdaState = WDA_STOP_STATE;
15083
Jeff Johnson295189b2012-06-20 16:38:30 -070015084 /* shutdown should perform the stop & close actions. */
15085 /* Destroy the event */
15086 status = vos_event_destroy(&pWDA->txFrameEvent);
15087 if(!VOS_IS_STATUS_SUCCESS(status))
15088 {
15089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015090 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070015091 status = VOS_STATUS_E_FAILURE;
15092 }
15093 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
15094 if(!VOS_IS_STATUS_SUCCESS(status))
15095 {
15096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015097 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070015098 status = VOS_STATUS_E_FAILURE;
15099 }
15100 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
15101 if(!VOS_IS_STATUS_SUCCESS(status))
15102 {
15103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015104 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070015105 status = VOS_STATUS_E_FAILURE;
15106 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015107 /* free WDA context */
15108 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
15109 if ( !VOS_IS_STATUS_SUCCESS(status) )
15110 {
15111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15112 "error in WDA close " );
15113 status = VOS_STATUS_E_FAILURE;
15114 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015115 return status;
15116}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080015117
Jeff Johnsone7245742012-09-05 17:12:55 -070015118/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080015119 * FUNCTION: WDA_setNeedShutdown
15120 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070015121 */
15122
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080015123void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070015124{
15125 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070015126 if(pWDA == NULL)
15127 {
15128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15129 "Could not get the WDA Context pointer" );
15130 return;
15131 }
Jeff Johnsone7245742012-09-05 17:12:55 -070015132 pWDA->needShutdown = TRUE;
15133}
15134/*
15135 * FUNCTION: WDA_needShutdown
15136 * WDA needs a shutdown
15137 */
15138
15139v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
15140{
15141 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070015142 if(pWDA == NULL)
15143 {
15144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15145 "Could not get the WDA Context pointer" );
15146 return 0;
15147 }
15148 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070015149}
15150
Mohit Khanna4a70d262012-09-11 16:30:12 -070015151#ifdef WLAN_FEATURE_11AC
15152/*
15153 * FUNCTION: WDA_SetBeaconFilterReqCallback
15154 *
15155 */
15156void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
15157{
15158 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015160 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015161 if(NULL == pWdaParams)
15162 {
15163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015164 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015165 VOS_ASSERT(0) ;
15166 return ;
15167 }
Jeff Johnsone7245742012-09-05 17:12:55 -070015168
Mohit Khanna4a70d262012-09-11 16:30:12 -070015169 vos_mem_free(pWdaParams->wdaMsgParam) ;
15170 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15171 vos_mem_free(pWdaParams) ;
15172 /*
15173 * No respone required for SetBeaconFilter req so just free the request
15174 * param here
15175 */
15176
15177 return ;
15178}
15179
15180VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
15181 tUpdateVHTOpMode *pData)
15182{
15183 WDI_Status status = WDI_STATUS_SUCCESS ;
15184 tWDA_ReqParams *pWdaParams ;
15185 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
15186 sizeof(WDI_UpdateVHTOpMode)) ;
15187 if(NULL == wdiTemp)
15188 {
15189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015190 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015191 VOS_ASSERT(0);
15192 return VOS_STATUS_E_NOMEM;
15193 }
15194 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15195 if(NULL == pWdaParams)
15196 {
15197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015198 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015199 VOS_ASSERT(0);
15200 vos_mem_free(wdiTemp);
15201 return VOS_STATUS_E_NOMEM;
15202 }
15203
15204 wdiTemp->opMode = pData->opMode;
15205 wdiTemp->staId = pData->staId;
15206
15207 pWdaParams->pWdaContext = pWDA;
15208 /* Store Req pointer, as this will be used for response */
15209 pWdaParams->wdaMsgParam = (void *)pData;
15210 /* store Params pass it to WDI */
15211 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
15212
15213 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
15214
15215 if(IS_WDI_STATUS_FAILURE(status))
15216 {
15217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15218 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
15219 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15220 vos_mem_free(pWdaParams->wdaMsgParam);
15221 vos_mem_free(pWdaParams);
15222 }
15223 return CONVERT_WDI2VOS_STATUS(status) ;
15224}
15225#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015226
15227/*==========================================================================
15228 FUNCTION WDA_TransportChannelDebug
15229
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070015230 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015231 Display Transport Channel debugging information
15232 User may request to display DXE channel snapshot
15233 Or if host driver detects any abnormal stcuk may display
15234
15235 PARAMETERS
schang6295e542013-03-12 15:31:23 -070015236 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080015237 displaySnapshot : Display DXE snapshot option
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015238 enableStallDetect : Enable stall detect feature
15239 This feature will take effect to data performance
15240 Not integrate till fully verification
15241
15242 RETURN VALUE
15243 NONE
15244
15245===========================================================================*/
15246void WDA_TransportChannelDebug
15247(
schang6295e542013-03-12 15:31:23 -070015248 tpAniSirGlobal pMac,
15249 v_BOOL_t displaySnapshot,
15250 v_BOOL_t toggleStallDetect
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015251)
15252{
Madan Mohan Koyyalamudi24a00f92012-10-22 15:21:02 -070015253 WDI_TransportChannelDebug(displaySnapshot, toggleStallDetect);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015254 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070015255}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070015256
15257/*==========================================================================
15258 FUNCTION WDA_SetEnableSSR
15259
15260 DESCRIPTION
15261 API to enable/disable SSR on WDI timeout
15262
15263 PARAMETERS
15264 enableSSR : enable/disable SSR
15265
15266 RETURN VALUE
15267 NONE
15268
15269===========================================================================*/
15270void WDA_SetEnableSSR(v_BOOL_t enableSSR)
15271{
15272 WDI_SetEnableSSR(enableSSR);
15273}
Leo Chang9056f462013-08-01 19:21:11 -070015274
15275#ifdef FEATURE_WLAN_LPHB
15276/*
15277 * FUNCTION: WDA_LPHBconfRspCallback
15278 *
15279 */
15280void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
15281{
15282 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15283
15284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15285 "<------ %s " ,__func__);
15286 if (NULL == pWdaParams)
15287 {
15288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15289 "%s: pWdaParams received NULL", __func__);
15290 VOS_ASSERT(0) ;
15291 return ;
15292 }
15293
15294 /* Do not need to send notification to upper layer
15295 * Just free allocated resources */
15296 if (pWdaParams != NULL)
15297 {
15298 if (pWdaParams->wdaWdiApiMsgParam != NULL)
15299 {
15300 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15301 }
15302 vos_mem_free(pWdaParams->wdaMsgParam) ;
15303 vos_mem_free(pWdaParams) ;
15304 }
15305
15306 return;
15307}
15308
15309/*
15310 * FUNCTION: WDA_ProcessLPHBConfReq
15311 *
15312 */
15313VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
15314 tSirLPHBReq *pData)
15315{
15316 WDI_Status wdiStatus;
15317 tWDA_ReqParams *pWdaParams ;
15318
15319 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15320 "------> %s " , __func__);
15321
15322 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15323 if (NULL == pWdaParams)
15324 {
15325 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15326 "%s: VOS MEM Alloc Failure", __func__);
15327 VOS_ASSERT(0);
15328 vos_mem_free(pData);
15329 return VOS_STATUS_E_NOMEM;
15330 }
15331
15332 pWdaParams->pWdaContext = pWDA;
15333 pWdaParams->wdaMsgParam = (void *)pData;
15334 pWdaParams->wdaWdiApiMsgParam = NULL;
15335
15336 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
15337 if (WDI_STATUS_PENDING == wdiStatus)
15338 {
15339 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15340 "Pending received for %s:%d ", __func__, __LINE__);
15341 }
15342 else if (WDI_STATUS_SUCCESS != wdiStatus)
15343 {
15344 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15345 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
15346 vos_mem_free(pWdaParams->wdaMsgParam);
15347 vos_mem_free(pWdaParams);
15348 }
15349
15350 return CONVERT_WDI2VOS_STATUS(wdiStatus);
15351}
15352#endif /* FEATURE_WLAN_LPHB */
15353