blob: 32d90d14fcef0d13729a42cc0970395479279ac3 [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Kiet Lam1ed83fc2014-02-19 01:15:45 -08002 * Copyright (c) 2012-2014 The Linux Foundation. All rights reserved.
3 *
4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5 *
6 *
7 * Permission to use, copy, modify, and/or distribute this software for
8 * any purpose with or without fee is hereby granted, provided that the
9 * above copyright notice and this permission notice appear in all
10 * copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
13 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
14 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
15 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 * PERFORMANCE OF THIS SOFTWARE.
20 */
21
22/*
Kiet Lama7f454d2014-07-24 12:04:06 -070023 * This file was originally distributed by Qualcomm Atheros, Inc.
24 * under proprietary terms before Copyright ownership was assigned
25 * to the Linux Foundation.
Kiet Lam1ed83fc2014-02-19 01:15:45 -080026 */
27
Jeff Johnson295189b2012-06-20 16:38:30 -070028
Kiet Lama7f454d2014-07-24 12:04:06 -070029
30
Jeff Johnson295189b2012-06-20 16:38:30 -070031/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070032 W L A N _ Q C T _ WDA . C
Jeff Johnson295189b2012-06-20 16:38:30 -070033 OVERVIEW:
Jeff Johnson295189b2012-06-20 16:38:30 -070034 This software unit holds the implementation of the WLAN Transport Layer.
Jeff Johnson295189b2012-06-20 16:38:30 -070035 The functions externalized by this module are to be called ONLY by other
36 WLAN modules that properly register with the Transport Layer initially.
Jeff Johnson295189b2012-06-20 16:38:30 -070037 DEPENDENCIES:
Jeff Johnson295189b2012-06-20 16:38:30 -070038 Are listed for each API below.
39
Jeff Johnson295189b2012-06-20 16:38:30 -070040 Copyright (c) 2010-2011 QUALCOMM Incorporated.
41 All Rights Reserved.
42 Qualcomm Confidential and Proprietary
43===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070044/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070045 EDIT HISTORY FOR FILE
46
Jeff Johnson295189b2012-06-20 16:38:30 -070047 This section contains comments describing changes made to the module.
48 Notice that changes are listed in reverse chronological order.
49
Jeff Johnson295189b2012-06-20 16:38:30 -070050 $Header$$DateTime$$Author$
51
Jeff Johnson295189b2012-06-20 16:38:30 -070052 when who what, where, why
53---------- --- -------------------------------------------------
5410/05/2011 haparna Adding support for Keep Alive Feature
552010-12-30 smiryala UMAC convergence changes
562010-08-19 adwivedi WLAN DAL AL(WDA) layer for Prima
57===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070058#include "vos_mq.h"
59#include "vos_api.h"
60#include "vos_packet.h"
61#include "vos_nvitem.h"
62#include "sirApi.h"
63#include "wlan_qct_pal_packet.h"
Mihir Shete40a55652014-03-02 14:14:47 +053064#include "wlan_qct_pal_device.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070065#include "wlan_qct_wda.h"
66#include "wlan_qct_wda_msg.h"
67#include "wlan_qct_wdi_cfg.h"
68#include "wlan_qct_wdi.h"
69#include "wlan_qct_wdi_ds.h"
70#include "wlan_hal_cfg.h"
71/**********************/
72#include "wniApi.h"
73#include "cfgApi.h"
74#include "limApi.h"
75#include "wlan_qct_tl.h"
76#include "wlan_qct_tli_ba.h"
77#include "limUtils.h"
78#include "btcApi.h"
79#include "vos_sched.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070080#include "pttMsgApi.h"
81#include "wlan_qct_sys.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070082/* Used MACRO's */
83/* Get WDA context from vOSS module */
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080084#define WDA_2_4_GHZ_MAX_FREQ 3000
Jeff Johnson295189b2012-06-20 16:38:30 -070085#define VOS_GET_WDA_CTXT(a) vos_get_context(VOS_MODULE_ID_WDA, a)
86#define VOS_GET_MAC_CTXT(a) vos_get_context(VOS_MODULE_ID_PE, a)
Jeff Johnson295189b2012-06-20 16:38:30 -070087#define WDA_BA_TX_FRM_THRESHOLD (5)
Jeff Johnson295189b2012-06-20 16:38:30 -070088#define CONVERT_WDI2SIR_STATUS(x) \
89 ((WDI_STATUS_SUCCESS != (x)) ? eSIR_FAILURE : eSIR_SUCCESS)
90
91#define IS_WDI_STATUS_FAILURE(status) \
92 ((WDI_STATUS_SUCCESS != (status)) && (WDI_STATUS_PENDING != (status)))
Jeff Johnson295189b2012-06-20 16:38:30 -070093#define CONVERT_WDI2VOS_STATUS(x) \
94 ((IS_WDI_STATUS_FAILURE(x)) ? VOS_STATUS_E_FAILURE : VOS_STATUS_SUCCESS)
95
96/* macro's for acessing TL API/data structures */
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070097#define WDA_TL_GET_STA_STATE(a, b, c) WLANTL_GetSTAState(a, b, c)
Jeff Johnson295189b2012-06-20 16:38:30 -070098#define WDA_TL_GET_TX_PKTCOUNT(a, b, c, d) WLANTL_GetTxPktCount(a, b, c, d)
Jeff Johnson295189b2012-06-20 16:38:30 -070099#define WDA_GET_BA_TXFLAG(a, b, c) \
100 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) & (1 << (c)))
101
102#define WDA_SET_BA_TXFLAG(a, b, c) \
103 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) |= (1 << (c)))
104
105#define WDA_CLEAR_BA_TXFLAG(a, b, c) \
106 (((a)->wdaStaInfo[b].ucUseBaBitmap) &= ~(1 << c))
Jeff Johnson295189b2012-06-20 16:38:30 -0700107#define WDA_TL_BA_SESSION_ADD(a, b, c, d, e, f, g) \
108 WLANTL_BaSessionAdd(a, b, c, d, e, f, g)
Jeff Johnson295189b2012-06-20 16:38:30 -0700109/* timer related Macros */
110#define WDA_CREATE_TIMER(a, b, c, d, e, f, g) \
111 tx_timer_create(a, b, c, d, e, f, g)
112#define WDA_START_TIMER(a) tx_timer_activate(a)
113#define WDA_STOP_TIMER(a) tx_timer_deactivate(a)
114#define WDA_DESTROY_TIMER(a) tx_timer_delete(a)
Jeff Johnson32d95a32012-09-10 13:15:23 -0700115#define WDA_WDI_START_TIMEOUT (WDI_RESPONSE_TIMEOUT + 5000)
Jeff Johnson295189b2012-06-20 16:38:30 -0700116
117#define WDA_LAST_POLLED_THRESHOLD(a, curSta, tid) \
118 ((a)->wdaStaInfo[curSta].framesTxed[tid] + WDA_BA_TX_FRM_THRESHOLD)
Jeff Johnson295189b2012-06-20 16:38:30 -0700119#define WDA_BA_MAX_WINSIZE (64)
Jeff Johnson295189b2012-06-20 16:38:30 -0700120#define WDA_INVALID_KEY_INDEX 0xFF
Jeff Johnson295189b2012-06-20 16:38:30 -0700121#define WDA_NUM_PWR_SAVE_CFG 11
Jeff Johnson295189b2012-06-20 16:38:30 -0700122#define WDA_TX_COMPLETE_TIME_OUT_VALUE 1000
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800123#define WDA_TRAFFIC_STATS_TIME_OUT_VALUE 1000
Jeff Johnson295189b2012-06-20 16:38:30 -0700124
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700125#define WDA_MAX_RETRIES_TILL_RING_EMPTY 1000 /* MAX 10000 msec = 10 seconds wait */
Jeff Johnson295189b2012-06-20 16:38:30 -0700126
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700127#define WDA_WAIT_MSEC_TILL_RING_EMPTY 10 /* 10 msec wait per cycle */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700128#define WDA_IS_NULL_MAC_ADDRESS(mac_addr) \
129 ((mac_addr[0] == 0x00) && (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) &&\
130 (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) && (mac_addr[3] == 0x00))
131
132#define WDA_MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
133#define WDA_MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x"
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -0800134#define WDA_DUMPCMD_WAIT_TIMEOUT 10000
135
Jeff Johnson295189b2012-06-20 16:38:30 -0700136/* extern declarations */
137extern void vos_WDAComplete_cback(v_PVOID_t pVosContext);
Hoonki Lee9af07cf2013-04-24 01:21:58 -0700138extern wpt_uint8 WDI_GetActiveSessionsCount (void *pWDICtx, wpt_macAddr macBSSID, wpt_boolean skipBSSID);
139
Jeff Johnson295189b2012-06-20 16:38:30 -0700140/* forward declarations */
141void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
142 void *pBodyptr, tANI_U32 bodyVal) ;
143VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
144 WDI_StartReqParamsType *wdiStartParams ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700145VOS_STATUS WDA_wdiCompleteCB(v_PVOID_t pVosContext) ;
146VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams);
147
148extern v_BOOL_t sys_validateStaConfig( void *pImage, unsigned long cbFile,
149 void **ppStaConfig, v_SIZE_t *pcbStaConfig ) ;
Sachin Ahujaa4b33a32014-06-18 13:22:00 +0530150void processCfgDownloadReq(tpAniSirGlobal pMac) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700151void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
152 WDI_ConfigBSSReqInfoType *wdiBssParams, tAddBssParams *wdaBssParams) ;
153void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
154 WDI_ConfigStaReqInfoType *wdiStaParams, tAddStaParams *wdaStaParams) ;
155void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
156 void* pUserData ) ;
157static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA) ;
158static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA);
159void WDA_BaCheckActivity(tWDA_CbContext *pWDA) ;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800160void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700161void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams, void* pUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -0700162#ifdef WLAN_FEATURE_VOWIFI_11R
163VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA, tAggrAddTsParams *pAggrAddTsReqParams);
164#endif /* WLAN_FEATURE_VOWIFI_11R */
165
Jeff Johnson295189b2012-06-20 16:38:30 -0700166void WDA_TimerHandler(v_VOID_t *pWDA, tANI_U32 timerInfo) ;
167void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pContext) ;
168VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700169#ifdef FEATURE_WLAN_SCAN_PNO
170static VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA, tSirPNOScanReq *pPNOScanReqParams);
171static VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA, tSirSetRSSIFilterReq* pRssiFilterParams);
172static VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA, tSirUpdateScanParams *pUpdateScanParams);
173#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700174#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -0700175VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,tSirRoamOffloadScanReq *pRoamOffloadScanReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700176void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData);
177void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType);
178void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType);
179#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700180#ifdef WLAN_FEATURE_PACKET_FILTERING
181static VOS_STATUS WDA_Process8023MulticastListReq (
182 tWDA_CbContext *pWDA,
183 tSirRcvFltMcAddrList *pRcvFltMcAddrLis
184 );
185static VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (
186 tWDA_CbContext *pWDA,
187 tSirRcvPktFilterCfgType *pRcvPktFilterCfg
188 );
189static VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (
190 tWDA_CbContext *pWDA,
191 tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp
192 );
193static VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (
194 tWDA_CbContext *pWDA,
195 tSirRcvFltPktClearParam *pRcvFltPktClearParam
196 );
197#endif // WLAN_FEATURE_PACKET_FILTERING
Jeff Johnson295189b2012-06-20 16:38:30 -0700198VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA, tSirSetPowerParamsReq *pPowerParams);
Jeff Johnson295189b2012-06-20 16:38:30 -0700199static VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
200 tpTxControlParams pTxCtrlParam);
Jeff Johnson295189b2012-06-20 16:38:30 -0700201VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
202 v_U8_t *pDefaultKeyId,
203 v_U8_t *pNumKeys,
204 WDI_KeysType *pWdiKeys );
205
206#ifdef WLAN_FEATURE_GTK_OFFLOAD
207static VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA, tpSirGtkOffloadParams pGtkOffloadParams);
208static VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA, tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp);
209#endif // WLAN_FEATURE_GTK_OFFLOAD
210
c_hpothu92367912014-05-01 15:18:17 +0530211v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
212 tSirBcnMissRateReq *pData);
213
Jeff Johnson295189b2012-06-20 16:38:30 -0700214VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
215 tAniSetTmLevelReq *setTmLevelReq);
Mohit Khanna4a70d262012-09-11 16:30:12 -0700216#ifdef WLAN_FEATURE_11AC
217VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
218 tUpdateVHTOpMode *pData);
219#endif
Leo Chang9056f462013-08-01 19:21:11 -0700220
221#ifdef FEATURE_WLAN_LPHB
222VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
223 tSirLPHBReq *pData);
224#endif /* FEATURE_WLAN_LPHB */
Sunil Duttbd736ed2014-05-26 21:19:41 +0530225
Dino Mycle41bdc942014-06-10 11:30:24 +0530226#ifdef WLAN_FEATURE_EXTSCAN
227VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
228 tSirEXTScanStartReqParams *wdaRequest);
229VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
230 tSirEXTScanStopReqParams *wdaRequest);
231VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
232 tSirEXTScanGetCachedResultsReqParams *wdaRequest);
233VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
234 tSirGetEXTScanCapabilitiesReqParams *wdaRequest);
235VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
236 tSirEXTScanSetBssidHotListReqParams *wdaRequest);
237VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
238 tSirEXTScanResetBssidHotlistReqParams *wdaRequest);
239VOS_STATUS WDA_ProcessEXTScanSetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
240 tSirEXTScanSetSignificantChangeReqParams *wdaRequest);
241VOS_STATUS WDA_ProcessEXTScanResetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
242 tSirEXTScanResetSignificantChangeReqParams *wdaRequest);
243#endif /* WLAN_FEATURE_EXTSCAN */
244
Sunil Duttbd736ed2014-05-26 21:19:41 +0530245#ifdef WLAN_FEATURE_LINK_LAYER_STATS
246VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
247 tSirLLStatsSetReq *wdaRequest);
248
249VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
250 tSirLLStatsGetReq *wdaRequest);
251
252VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
253 tSirLLStatsClearReq *wdaRequest);
254#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +0530255
256v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
257 tSirFWStatsGetReq *wdaRequest);
258
Srinivas Dasari4dae48f2014-11-26 21:14:16 +0530259VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
260 u8 *wdaRequest);
261
Jeff Johnson295189b2012-06-20 16:38:30 -0700262/*
263 * FUNCTION: WDA_open
264 * Allocate the WDA context
265 */
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530266VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t devHandle,
Jeff Johnson295189b2012-06-20 16:38:30 -0700267 tMacOpenParameters *pMacParams )
268{
269 tWDA_CbContext *wdaContext;
270 VOS_STATUS status;
271 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700272 /* Allocate WDA context */
273 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
274 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
275 if(!VOS_IS_STATUS_SUCCESS(status))
276 {
277 return VOS_STATUS_E_NOMEM;
278 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700279 /*__asm int 3;*/
280 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
281
282 /* Initialize data structures */
283 wdaContext->pVosContext = pVosContext;
284 wdaContext->wdaState = WDA_INIT_STATE;
285 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
286
287 /* Initialize WDA-WDI synchronization event */
288 status = vos_event_init(&wdaContext->wdaWdiEvent);
289 if(!VOS_IS_STATUS_SUCCESS(status))
290 {
291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800292 "WDI Sync Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800293 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700294 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700295 /* Init Frame transfer event */
296 status = vos_event_init(&wdaContext->txFrameEvent);
297 if(!VOS_IS_STATUS_SUCCESS(status))
298 {
299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800300 "VOS Mgmt Frame Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800301 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700302 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700303 status = vos_event_init(&wdaContext->suspendDataTxEvent);
304 if(!VOS_IS_STATUS_SUCCESS(status))
305 {
306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800307 "VOS suspend data tx Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800308 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700309 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700310 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
311 if(!VOS_IS_STATUS_SUCCESS(status))
312 {
313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800314 "VOS wait On Wdi Ind Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800315 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700316 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700317 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700318 wdaContext->driverMode = pMacParams->driverType;
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530319 if(WDI_STATUS_SUCCESS != WDI_Init(devHandle, &wdaContext->pWdiContext,
Jeff Johnson295189b2012-06-20 16:38:30 -0700320 &wdiDevCapability, pMacParams->driverType))
321 {
322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
323 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800324 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700325 }
326 else
327 {
328 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
329 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
330 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700331 /* update max STA in WDA used for BA */
332 wdaContext->wdaMaxSta = pMacParams->maxStation;
333 /* store the frameTransRequired flag in wdaContext, to send this to HAL
334 * in WDA_Start
335 */
336 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
337 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700338 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800339
340error:
341 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
342 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700343}
344
Jeff Johnson295189b2012-06-20 16:38:30 -0700345/*
346 * FUNCTION: WDA_preStart
347 * Trigger DAL-AL to start CFG download
348 */
349VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
350{
351 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
352 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700353 /*
354 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
355 */
356 wdaMsg.type = WNI_CFG_DNLD_REQ ;
357 wdaMsg.bodyptr = NULL;
358 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700359 /* post the message.. */
360 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
361 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
362 {
363 vosStatus = VOS_STATUS_E_BADMSG;
364 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700365 return( vosStatus );
366}
Jeff Johnson295189b2012-06-20 16:38:30 -0700367/*
368 * FUNCTION: WDA_wdiStartCallback
369 * Once WDI_Start is finished, WDI start callback will be called by WDI
370 * to indicate completion of WDI_Start.
371 */
372void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
373 void *pVosContext)
374{
375 tWDA_CbContext *wdaContext;
376 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700377 if (NULL == pVosContext)
378 {
379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700380 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700381 return;
382 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700383 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
384 if (NULL == wdaContext)
385 {
386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700387 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700388 return;
389 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700390 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
391 {
392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700393 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700394 }
395 else
396 {
397 wdaContext->wdaState = WDA_START_STATE;
398 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700399 /* extract and save version information from the Start Response */
400 wdaContext->wcnssWlanCompiledVersion.major =
401 wdiRspParams->wlanCompiledVersion.major;
402 wdaContext->wcnssWlanCompiledVersion.minor =
403 wdiRspParams->wlanCompiledVersion.minor;
404 wdaContext->wcnssWlanCompiledVersion.version =
405 wdiRspParams->wlanCompiledVersion.version;
406 wdaContext->wcnssWlanCompiledVersion.revision =
407 wdiRspParams->wlanCompiledVersion.revision;
408 wdaContext->wcnssWlanReportedVersion.major =
409 wdiRspParams->wlanReportedVersion.major;
410 wdaContext->wcnssWlanReportedVersion.minor =
411 wdiRspParams->wlanReportedVersion.minor;
412 wdaContext->wcnssWlanReportedVersion.version =
413 wdiRspParams->wlanReportedVersion.version;
414 wdaContext->wcnssWlanReportedVersion.revision =
415 wdiRspParams->wlanReportedVersion.revision;
416 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
417 wdiRspParams->wcnssSoftwareVersion,
418 sizeof(wdaContext->wcnssSoftwareVersionString));
419 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
420 wdiRspParams->wcnssHardwareVersion,
421 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700422 /* Notify WDA_start that WDI_Start has completed */
423 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700424 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700425 {
426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700427 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700428 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700429 return;
430}
431
Jeff Johnson295189b2012-06-20 16:38:30 -0700432/*
433 * FUNCTION: WDA_start
434 * Prepare TLV configuration and call WDI_Start.
435 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700436VOS_STATUS WDA_start(v_PVOID_t pVosContext)
437{
438 tWDA_CbContext *wdaContext;
439 VOS_STATUS status;
440 WDI_Status wdiStatus;
441 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700442 if (NULL == pVosContext)
443 {
444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700445 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700446 return VOS_STATUS_E_FAILURE;
447 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700448 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
449 if (NULL == wdaContext)
450 {
451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700452 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700453 return VOS_STATUS_E_FAILURE;
454 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700455 /* Non-FTM mode, WDA status for START must be INIT
456 * FTM mode, WDA Status for START can be INIT or STOP */
457 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
458 (WDA_STOP_STATE != wdaContext->wdaState) )
459 {
460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
461 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700462 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700463 return VOS_STATUS_E_FAILURE;
464 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700465 /* initialize the wdiStartParam. Note that we can create this on
466 the stack since we won't exit until WDI_Start() completes or
467 times out */
468 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700469 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700470 /* prepare the config TLV for the WDI */
471 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
472 if ( !VOS_IS_STATUS_SUCCESS(status) )
473 {
474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700475 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700476 return VOS_STATUS_E_FAILURE;
477 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700478 /* note from here onwards if an error occurs we must
479 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700480 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
481 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
482 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700483 /* initialize the WDA-WDI synchronization event */
484 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700485 /* call WDI start */
486 wdiStatus = WDI_Start(&wdiStartParam,
487 (WDI_StartRspCb)WDA_wdiStartCallback,
488 (v_VOID_t *)pVosContext);
489 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
490 {
491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700492 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700493 vos_mem_free(wdiStartParam.pConfigBuffer);
494 return VOS_STATUS_E_FAILURE;
495 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700496 /* wait for WDI start to invoke our callback */
497 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
498 WDA_WDI_START_TIMEOUT );
499 if ( !VOS_IS_STATUS_SUCCESS(status) )
500 {
501 if ( VOS_STATUS_E_TIMEOUT == status )
502 {
503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700504 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700505 }
506 else
507 {
508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
509 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700510 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700511 }
512 vos_mem_free(wdiStartParam.pConfigBuffer);
Siddharth Bhalbea38ad2014-10-12 14:10:52 +0530513 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700514 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700515 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700516 /* we no longer need the config TLV */
517 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700518 /* if we are not in the START state then WDI_Start() failed */
519 if (WDA_START_STATE != wdaContext->wdaState)
520 {
521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700522 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700523 return VOS_STATUS_E_FAILURE;
524 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700525 /* FTM mode does not need to monitor BA activity */
526 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
527 {
528 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800529 if(VOS_STATUS_SUCCESS == status)
530 {
531 wdaContext->wdaTimersCreated = VOS_TRUE;
532 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700533 }
Leo Chang9d76f622013-08-23 16:34:52 -0700534 else
535 {
536 vos_event_init(&wdaContext->ftmStopDoneEvent);
537 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700538 return status;
539}
540
Jeff Johnson295189b2012-06-20 16:38:30 -0700541/*
542 * FUNCTION: WDA_prepareConfigTLV
543 * Function to prepare CFG for DAL(WDA)
544 */
545VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
546 WDI_StartReqParamsType *wdiStartParams )
547{
548 /* get pMac to acess CFG data base */
549 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
550 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
551 tHalCfg *tlvStruct = NULL ;
552 tANI_U8 *tlvStructStart = NULL ;
553 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
554 v_PVOID_t *configParam;
555 tANI_U32 configParamSize;
556 tANI_U32 *configDataValue;
557 WDI_WlanVersionType wcnssCompiledApiVersion;
Wilson Tsaof8b37942013-09-06 10:49:00 -0700558 tANI_U8 i;
559
Jeff Johnson295189b2012-06-20 16:38:30 -0700560 if ((NULL == pMac)||(NULL == wdaContext))
561 {
562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700563 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700564 VOS_ASSERT(0);
565 return VOS_STATUS_E_FAILURE;
566 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700567 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
568 WNI_CFG_STA_ID_LEN +
569 WNI_CFG_EDCA_WME_ACBK_LEN +
570 WNI_CFG_EDCA_WME_ACBE_LEN +
571 WNI_CFG_EDCA_WME_ACVI_LEN +
572 WNI_CFG_EDCA_WME_ACVO_LEN +
573 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700574 /* malloc memory for all configs in one shot */
575 configParam = vos_mem_malloc(configParamSize);
576
577 if(NULL == configParam )
578 {
579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700580 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700581 VOS_ASSERT(0) ;
582 return VOS_STATUS_E_NOMEM;
583 }
584 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700585 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700586 tlvStruct = (tHalCfg *)configParam;
587 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700588 /* TODO: Remove Later */
589 /* QWLAN_HAL_CFG_STA_ID */
590 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
591 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
592 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
593 eSIR_SUCCESS)
594 {
595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
596 "Failed to get value for WNI_CFG_STA_ID");
597 goto handle_failure;
598 }
599 tlvStruct->length = strLength ;
600 /* calculate the pad bytes to have the CFG in aligned format */
601 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
602 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700603 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
604 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700605 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
606 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
607 tlvStruct->length = sizeof(tANI_U32);
608 configDataValue = (tANI_U32 *)(tlvStruct + 1);
609 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
610 != eSIR_SUCCESS)
611 {
612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
613 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
614 goto handle_failure;
615 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700616 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
617 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700618 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
619 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
620 tlvStruct->length = sizeof(tANI_U32);
621 configDataValue = (tANI_U32 *)(tlvStruct + 1);
622 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
623 eSIR_SUCCESS)
624 {
625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
626 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
627 goto handle_failure;
628 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700629 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
630 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700631 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
632 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
633 tlvStruct->length = sizeof(tANI_U32);
634 configDataValue = (tANI_U32 *)(tlvStruct + 1);
635 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
636 != eSIR_SUCCESS)
637 {
638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
639 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
640 goto handle_failure;
641 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700642 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
643 + sizeof(tHalCfg) + tlvStruct->length)) ;
644
645 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
646 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
647 tlvStruct->length = sizeof(tANI_U32);
648 configDataValue = (tANI_U32 *)(tlvStruct + 1);
649 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
650 configDataValue ) != eSIR_SUCCESS)
651 {
652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
653 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
654 goto handle_failure;
655 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700656 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
657 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700658 /* QWLAN_HAL_CFG_CAL_PERIOD */
659 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
660 tlvStruct->length = sizeof(tANI_U32);
661 configDataValue = (tANI_U32 *)(tlvStruct + 1);
662 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
663 != eSIR_SUCCESS)
664 {
665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
666 "Failed to get value for WNI_CFG_CAL_PERIOD");
667 goto handle_failure;
668 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700669 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
670 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700671 /* QWLAN_HAL_CFG_CAL_CONTROL */
672 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
673 tlvStruct->length = sizeof(tANI_U32);
674 configDataValue = (tANI_U32 *)(tlvStruct + 1);
675 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
676 != eSIR_SUCCESS)
677 {
678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
679 "Failed to get value for WNI_CFG_CAL_CONTROL");
680 goto handle_failure;
681 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700682 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
683 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700684 /* QWLAN_HAL_CFG_PROXIMITY */
685 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
686 tlvStruct->length = sizeof(tANI_U32);
687 configDataValue = (tANI_U32 *)(tlvStruct + 1);
688 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
689 != eSIR_SUCCESS)
690 {
691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
692 "Failed to get value for WNI_CFG_PROXIMITY");
693 goto handle_failure;
694 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700695 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
696 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700697 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
698 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
699 tlvStruct->length = sizeof(tANI_U32);
700 configDataValue = (tANI_U32 *)(tlvStruct + 1);
701 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
702 != eSIR_SUCCESS)
703 {
704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
705 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
706 goto handle_failure;
707 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700708 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
709 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700710 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
711 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
712 tlvStruct->length = sizeof(tANI_U32);
713 configDataValue = (tANI_U32 *)(tlvStruct + 1);
714 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
715 eSIR_SUCCESS)
716 {
717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
718 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
719 goto handle_failure;
720 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700721 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
722 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700723 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
724 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
725 tlvStruct->length = sizeof(tANI_U32);
726 configDataValue = (tANI_U32 *)(tlvStruct + 1);
727 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
728 configDataValue ) != eSIR_SUCCESS)
729 {
730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
731 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
732 goto handle_failure;
733 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700734 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
735 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700736 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
737 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
738 tlvStruct->length = sizeof(tANI_U32);
739 configDataValue = (tANI_U32 *)(tlvStruct + 1);
740 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
741 eSIR_SUCCESS)
742 {
743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
744 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
745 goto handle_failure;
746 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700747 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
748 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700749 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
750 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
751 tlvStruct->length = sizeof(tANI_U32);
752 configDataValue = (tANI_U32 *)(tlvStruct + 1);
753 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
754 eSIR_SUCCESS)
755 {
756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
757 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
758 goto handle_failure;
759 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700760 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
761 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700762 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
763 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
764 tlvStruct->length = sizeof(tANI_U32);
765 configDataValue = (tANI_U32 *)(tlvStruct + 1);
766 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
767 eSIR_SUCCESS)
768 {
769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
770 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
771 goto handle_failure;
772 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700773 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
774 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700775 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
776 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
777 tlvStruct->length = sizeof(tANI_U32);
778 configDataValue = (tANI_U32 *)(tlvStruct + 1);
779 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
780 configDataValue ) != eSIR_SUCCESS)
781 {
782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
783 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
784 goto handle_failure;
785 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700786 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
787 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700788 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
789 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
790 tlvStruct->length = sizeof(tANI_U32);
791 configDataValue = (tANI_U32 *)(tlvStruct + 1);
792 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
793 configDataValue ) != eSIR_SUCCESS)
794 {
795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
796 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
797 goto handle_failure;
798 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700799 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
800 + sizeof(tHalCfg) + tlvStruct->length));
801
802 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
803 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
804 tlvStruct->length = sizeof(tANI_U32);
805 configDataValue = (tANI_U32 *)(tlvStruct + 1);
806 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
807 configDataValue ) != eSIR_SUCCESS)
808 {
809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
810 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
811 goto handle_failure;
812 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700813 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
814 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700815 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
816 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
817 tlvStruct->length = sizeof(tANI_U32);
818 configDataValue = (tANI_U32 *)(tlvStruct + 1);
819 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
820 configDataValue ) != eSIR_SUCCESS)
821 {
822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
823 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
824 goto handle_failure;
825 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700826 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
827 + sizeof(tHalCfg) + tlvStruct->length));
828
829 /* QWLAN_HAL_CFG_FIXED_RATE */
830 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
831 tlvStruct->length = sizeof(tANI_U32);
832 configDataValue = (tANI_U32 *)(tlvStruct + 1);
833 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
834 != eSIR_SUCCESS)
835 {
836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
837 "Failed to get value for WNI_CFG_FIXED_RATE");
838 goto handle_failure;
839 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700840 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
841 + sizeof(tHalCfg) + tlvStruct->length));
842
843 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
844 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
845 tlvStruct->length = sizeof(tANI_U32);
846 configDataValue = (tANI_U32 *)(tlvStruct + 1);
847 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
848 != eSIR_SUCCESS)
849 {
850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
851 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
852 goto handle_failure;
853 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700854 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
855 + sizeof(tHalCfg) + tlvStruct->length));
856
857 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
858 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
859 tlvStruct->length = sizeof(tANI_U32);
860 configDataValue = (tANI_U32 *)(tlvStruct + 1);
861 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
862 configDataValue ) != eSIR_SUCCESS)
863 {
864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
865 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
866 goto handle_failure;
867 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700868 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
869 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700870 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
871 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
872 tlvStruct->length = sizeof(tANI_U32);
873 configDataValue = (tANI_U32 *)(tlvStruct + 1);
874 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
875 configDataValue ) != eSIR_SUCCESS)
876 {
877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
878 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
879 goto handle_failure;
880 }
881 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
882 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700883 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
884 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
885 tlvStruct->length = sizeof(tANI_U32);
886 configDataValue = (tANI_U32 *)(tlvStruct + 1);
887 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
888 configDataValue ) != eSIR_SUCCESS)
889 {
890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
891 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
892 goto handle_failure;
893 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700894 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
895 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700896 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
897 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
898 tlvStruct->length = sizeof(tANI_U32);
899 configDataValue = (tANI_U32 *)(tlvStruct + 1);
900 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
901 configDataValue ) != eSIR_SUCCESS)
902 {
903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
904 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
905 goto handle_failure;
906 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700907 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
908 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700909 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
910 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
911 tlvStruct->length = sizeof(tANI_U32);
912 configDataValue = (tANI_U32 *)(tlvStruct + 1);
913 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_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_FIXED_RATE_MULTICAST_5GHZ");
918 goto handle_failure;
919 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700920 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
921 + sizeof(tHalCfg) + tlvStruct->length);
922
Jeff Johnson295189b2012-06-20 16:38:30 -0700923 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
924 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
925 tlvStruct->length = sizeof(tANI_U32);
926 configDataValue = (tANI_U32 *)(tlvStruct + 1);
927 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
928 configDataValue ) != eSIR_SUCCESS)
929 {
930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
931 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
932 goto handle_failure;
933 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700934 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
935 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700936 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
937 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
938 tlvStruct->length = sizeof(tANI_U32);
939 configDataValue = (tANI_U32 *)(tlvStruct + 1);
940 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
941 configDataValue ) != eSIR_SUCCESS)
942 {
943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
944 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
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_MAX_BA_SESSIONS */
950 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
951 tlvStruct->length = sizeof(tANI_U32);
952 configDataValue = (tANI_U32 *)(tlvStruct + 1);
953 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
954 eSIR_SUCCESS)
955 {
956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
957 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
958 goto handle_failure;
959 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700960 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
961 + sizeof(tHalCfg) + tlvStruct->length);
962
963 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
964 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
965 tlvStruct->length = sizeof(tANI_U32);
966 configDataValue = (tANI_U32 *)(tlvStruct + 1);
967 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
968 configDataValue ) != eSIR_SUCCESS)
969 {
970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
971 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
972 goto handle_failure;
973 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700974 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
975 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700976 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
977 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
978 tlvStruct->length = sizeof(tANI_U32);
979 configDataValue = (tANI_U32 *)(tlvStruct + 1);
980 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
981 configDataValue ) != eSIR_SUCCESS)
982 {
983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
984 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
985 goto handle_failure;
986 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700987 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
988 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700989 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
990 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
991 tlvStruct->length = sizeof(tANI_U32);
992 configDataValue = (tANI_U32 *)(tlvStruct + 1);
993 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
994 configDataValue ) != eSIR_SUCCESS)
995 {
996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
997 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
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_NUM_BEACON_PER_RSSI_AVERAGE */
1003 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
1004 tlvStruct->length = sizeof(tANI_U32);
1005 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1006 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
1007 configDataValue ) != eSIR_SUCCESS)
1008 {
1009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1010 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
1011 goto handle_failure;
1012 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001013 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1014 + sizeof(tHalCfg) + tlvStruct->length);
1015
1016 /* QWLAN_HAL_CFG_STATS_PERIOD */
1017 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
1018 tlvStruct->length = sizeof(tANI_U32);
1019 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1020 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
1021 eSIR_SUCCESS)
1022 {
1023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1024 "Failed to get value for WNI_CFG_STATS_PERIOD");
1025 goto handle_failure;
1026 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001027 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1028 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001029 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
1030 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
1031 tlvStruct->length = sizeof(tANI_U32);
1032 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1033 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
1034 eSIR_SUCCESS)
1035 {
1036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1037 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
1038 goto handle_failure;
1039 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001040 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1041 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001042 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1043 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1044 tlvStruct->length = sizeof(tANI_U32);
1045 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1046 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1047 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001048 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1049 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001050 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1051 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1052 tlvStruct->length = sizeof(tANI_U32);
1053 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1054 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1055 != eSIR_SUCCESS)
1056 {
1057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1058 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1059 goto handle_failure;
1060 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001061 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1062 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001063 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1064 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1065 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1066 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1067 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1068 &strLength) != eSIR_SUCCESS)
1069 {
1070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1071 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1072 goto handle_failure;
1073 }
1074 tlvStruct->length = strLength;
1075 /* calculate the pad bytes to have the CFG in aligned format */
1076 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1077 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001078 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1079 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001080 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1081 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1082 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1083 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1084 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1085 &strLength) != eSIR_SUCCESS)
1086 {
1087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1088 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1089 goto handle_failure;
1090 }
1091 tlvStruct->length = strLength;
1092 /* calculate the pad bytes to have the CFG in aligned format */
1093 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1094 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001095 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1096 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001097 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1098 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1099 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1100 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1101 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1102 &strLength) != eSIR_SUCCESS)
1103 {
1104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1105 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1106 goto handle_failure;
1107 }
1108 tlvStruct->length = strLength;
1109 /* calculate the pad bytes to have the CFG in aligned format */
1110 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1111 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001112 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1113 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001114 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1115 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1116 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1117 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1118 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1119 &strLength) != eSIR_SUCCESS)
1120 {
1121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1122 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1123 goto handle_failure;
1124 }
1125 tlvStruct->length = strLength;
1126 /* calculate the pad bytes to have the CFG in aligned format */
1127 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1128 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001129 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1130 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001131 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1132 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1133 tlvStruct->length = sizeof(tANI_U32);
1134 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1135 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1136 != eSIR_SUCCESS)
1137 {
1138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1139 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1140 goto handle_failure;
1141 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001142 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1143 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001144 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1145 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1146 tlvStruct->length = sizeof(tANI_U32);
1147 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1148 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1149 != eSIR_SUCCESS)
1150 {
1151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1152 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1153 goto handle_failure;
1154 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001155 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1156 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001157 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1158 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1159 tlvStruct->length = sizeof(tANI_U32);
1160 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1161 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1162 != eSIR_SUCCESS)
1163 {
1164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1165 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1166 goto handle_failure;
1167 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001168 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1169 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001170 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1171 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1172 tlvStruct->length = sizeof(tANI_U32);
1173 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1174 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1175 != eSIR_SUCCESS)
1176 {
1177 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1178 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1179 goto handle_failure;
1180 }
1181 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1182 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001183 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1184 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1185 tlvStruct->length = sizeof(tANI_U32);
1186 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1187 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1188 != eSIR_SUCCESS)
1189 {
1190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1191 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1192 goto handle_failure;
1193 }
1194 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1195 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001196 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1197 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1198 tlvStruct->length = sizeof(tANI_U32);
1199 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1200 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1201 != eSIR_SUCCESS)
1202 {
1203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1204 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1205 goto handle_failure;
1206 }
1207 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1208 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001209 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1210 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1211 tlvStruct->length = sizeof(tANI_U32);
1212 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1213 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1214 != eSIR_SUCCESS)
1215 {
1216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1217 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1218 goto handle_failure;
1219 }
1220 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1221 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001222 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1223 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1224 tlvStruct->length = sizeof(tANI_U32);
1225 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1226 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1227 != eSIR_SUCCESS)
1228 {
1229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1230 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1231 goto handle_failure;
1232 }
1233 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1234 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001235 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1236 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1237 tlvStruct->length = sizeof(tANI_U32);
1238 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1239 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1240 != eSIR_SUCCESS)
1241 {
1242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1243 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1244 goto handle_failure;
1245 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001246 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1247 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001248 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1249 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1250 tlvStruct->length = sizeof(tANI_U32);
1251 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1252 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1253 != eSIR_SUCCESS)
1254 {
1255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1256 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1257 goto handle_failure;
1258 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001259 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1260 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001261 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1262 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1263 tlvStruct->length = sizeof(tANI_U32);
1264 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1265 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1266 != eSIR_SUCCESS)
1267 {
1268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1269 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1270 goto handle_failure;
1271 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001272 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1273 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001274 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1275 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1276 * into FW, so the parameters are added here.
1277 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001278 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1279 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1280 tlvStruct->length = sizeof(tANI_U32);
1281 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1282 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1283 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1284 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001285 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1286 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1287 tlvStruct->length = sizeof(tANI_U32);
1288 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1289 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1290 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1291 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001292 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1293 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1294 tlvStruct->length = sizeof(tANI_U32);
1295 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1296 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1297 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1298 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001299 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1300 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1301 tlvStruct->length = sizeof(tANI_U32);
1302 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1303 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1304 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1305 + sizeof(tHalCfg) + tlvStruct->length) ;
1306
1307 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1308 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1309 tlvStruct->length = sizeof(tANI_U32);
1310 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1311 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1312 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1313 + sizeof(tHalCfg) + tlvStruct->length) ;
1314
1315 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1316 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1317 tlvStruct->length = sizeof(tANI_U32);
1318 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1319 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1320 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1321 + sizeof(tHalCfg) + tlvStruct->length) ;
1322
1323 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1324 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1325 tlvStruct->length = sizeof(tANI_U32);
1326 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1327 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1328 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1329 + sizeof(tHalCfg) + tlvStruct->length) ;
1330
1331 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1332 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1333 tlvStruct->length = sizeof(tANI_U32);
1334 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1335 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1336 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1337 + sizeof(tHalCfg) + tlvStruct->length) ;
1338
1339 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1340 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1341 tlvStruct->length = sizeof(tANI_U32);
1342 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1343 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1344 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1345 + sizeof(tHalCfg) + tlvStruct->length) ;
1346
1347 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1348 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1349 tlvStruct->length = sizeof(tANI_U32);
1350 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1351 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1352 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1353 + sizeof(tHalCfg) + tlvStruct->length) ;
1354
1355 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1356 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1357 tlvStruct->length = sizeof(tANI_U32);
1358 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1359 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1360 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1361 + sizeof(tHalCfg) + tlvStruct->length) ;
1362
1363 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1364 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1365 tlvStruct->length = sizeof(tANI_U32);
1366 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1367 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1368 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1369 + sizeof(tHalCfg) + tlvStruct->length) ;
1370
1371 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1372 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1373 tlvStruct->length = sizeof(tANI_U32);
1374 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1375 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1376 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1377 + sizeof(tHalCfg) + tlvStruct->length) ;
1378
1379 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1380 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1381 tlvStruct->length = sizeof(tANI_U32);
1382 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1383 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1384 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1385 + sizeof(tHalCfg) + tlvStruct->length) ;
1386
1387 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1388 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1389 tlvStruct->length = sizeof(tANI_U32);
1390 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1391 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1392 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1393 + sizeof(tHalCfg) + tlvStruct->length) ;
1394
1395 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1396 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1397 tlvStruct->length = sizeof(tANI_U32);
1398 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1399 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1400 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1401 + sizeof(tHalCfg) + tlvStruct->length) ;
1402
Wilson Tsaof8b37942013-09-06 10:49:00 -07001403 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM; i++)
1404 {
1405 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WAN_FREQ */
1406 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ + i*4;
1407 tlvStruct->length = sizeof(tANI_U32);
1408 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1409 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWANFreq[i];
1410 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1411 + sizeof(tHalCfg) + tlvStruct->length) ;
1412
1413 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WLAN_FREQ */
1414 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ + i*4;
1415 tlvStruct->length = sizeof(tANI_U32);
1416 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1417 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWLANFreq[i];
1418 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1419 + sizeof(tHalCfg) + tlvStruct->length) ;
1420
1421 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG */
1422 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG + i*4;
1423 tlvStruct->length = sizeof(tANI_U32);
1424 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1425 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig[i];
1426 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1427 + sizeof(tHalCfg) + tlvStruct->length) ;
1428
1429 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG2 */
1430 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 + i*4;
1431 tlvStruct->length = sizeof(tANI_U32);
1432 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1433 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig2[i];
1434 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1435 + sizeof(tHalCfg) + tlvStruct->length) ;
1436 }
1437
1438 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF */
1439 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF ;
1440 tlvStruct->length = sizeof(tANI_U32);
1441 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1442 *configDataValue = pMac->btc.btcConfig.mwsCoexModemBackoff;
1443 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1444 + sizeof(tHalCfg) + tlvStruct->length) ;
1445
1446 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG; i++)
1447 {
1448 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_CONFIGX */
1449 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_CONFIG1 + i;
1450 tlvStruct->length = sizeof(tANI_U32);
1451 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1452 *configDataValue = pMac->btc.btcConfig.mwsCoexConfig[i];
1453 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1454 + sizeof(tHalCfg) + tlvStruct->length) ;
1455 }
1456
1457 /* [COEX] QWLAN_HAL_CFG_SAR_POWER_BACKOFF */
1458 tlvStruct->type = QWLAN_HAL_CFG_SAR_POWER_BACKOFF ;
1459 tlvStruct->length = sizeof(tANI_U32);
1460 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1461 *configDataValue = pMac->btc.btcConfig.SARPowerBackoff;
1462 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1463 + sizeof(tHalCfg) + tlvStruct->length) ;
1464
Jeff Johnson32d95a32012-09-10 13:15:23 -07001465 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001466 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1467 tlvStruct->length = sizeof(tANI_U32);
1468 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1469 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1470 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1471 wcnssCompiledApiVersion.minor,
1472 wcnssCompiledApiVersion.version,
1473 wcnssCompiledApiVersion.revision);
1474 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1475 + sizeof(tHalCfg) + tlvStruct->length) ;
1476
Jeff Johnsond13512a2012-07-17 11:42:19 -07001477 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1478 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1479 tlvStruct->length = sizeof(tANI_U32);
1480 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1481 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1482 configDataValue ) != eSIR_SUCCESS)
1483 {
1484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1485 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1486 goto handle_failure;
1487 }
1488
1489 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1490 + sizeof(tHalCfg) + tlvStruct->length) ;
1491 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1492 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1493 tlvStruct->length = sizeof(tANI_U32);
1494 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1495 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1496 configDataValue ) != eSIR_SUCCESS)
1497 {
1498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1499 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1500 goto handle_failure;
1501 }
1502
1503 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1504 + sizeof(tHalCfg) + tlvStruct->length) ;
1505
1506 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1507 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1508 tlvStruct->length = sizeof(tANI_U32);
1509 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1510 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1511 != eSIR_SUCCESS)
1512 {
1513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1514 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1515 goto handle_failure;
1516 }
1517
1518 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1519 + sizeof(tHalCfg) + tlvStruct->length) ;
1520
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001521 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1522 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1523 tlvStruct->length = sizeof(tANI_U32);
1524 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1525 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1526 != eSIR_SUCCESS)
1527 {
1528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1529 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1530 goto handle_failure;
1531 }
1532
1533 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1534 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001535#ifdef WLAN_SOFTAP_VSTA_FEATURE
1536 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1537 tlvStruct->length = sizeof(tANI_U32);
1538 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1539 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1540 != eSIR_SUCCESS)
1541 {
1542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1543 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1544 goto handle_failure;
1545 }
1546
1547 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1548 + sizeof(tHalCfg) + tlvStruct->length) ;
1549#endif
1550
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001551 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1552 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1553 tlvStruct->length = sizeof(tANI_U32);
1554 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1555
1556 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1557 != eSIR_SUCCESS)
1558 {
1559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1560 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1561 goto handle_failure;
1562 }
1563
1564 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1565 + sizeof(tHalCfg) + tlvStruct->length) ;
1566
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301567/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1568 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1569 tlvStruct->length = sizeof(tANI_U32);
1570 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1571 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1572 configDataValue ) != eSIR_SUCCESS)
1573 {
1574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1575 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1576 goto handle_failure;
1577 }
1578
1579 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1580 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301581#ifdef FEATURE_WLAN_TDLS
1582 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1583 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1584 tlvStruct->length = sizeof(tANI_U32);
1585 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1586 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
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_QOS_WMM_UAPSD_MASK");
1591 goto handle_failure;
1592 }
1593 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1594 + sizeof(tHalCfg) + tlvStruct->length) ;
1595
1596 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1597 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1598 tlvStruct->length = sizeof(tANI_U32);
1599 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1600 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1601 configDataValue ) != eSIR_SUCCESS)
1602 {
1603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1604 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1605 goto handle_failure;
1606 }
1607 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1608 + sizeof(tHalCfg) + tlvStruct->length) ;
1609 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1610 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1611 tlvStruct->length = sizeof(tANI_U32);
1612 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1613 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1614 configDataValue ) != eSIR_SUCCESS)
1615 {
1616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1617 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1618 goto handle_failure;
1619 }
1620 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1621 + sizeof(tHalCfg) + tlvStruct->length) ;
1622 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1623 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1624 tlvStruct->length = sizeof(tANI_U32);
1625 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1626 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1627 configDataValue ) != eSIR_SUCCESS)
1628 {
1629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1630 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1631 goto handle_failure;
1632 }
1633 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1634 + sizeof(tHalCfg) + tlvStruct->length) ;
Naresh Jayaramf73f3762014-02-04 16:13:20 +05301635 /* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */
1636 tlvStruct->type = QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE;
1637 tlvStruct->length = sizeof(tANI_U32);
1638 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1639 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_OFF_CHANNEL_ENABLED,
1640 configDataValue ) != eSIR_SUCCESS)
1641 {
1642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1643 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1644 goto handle_failure;
1645 }
1646 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1647 + sizeof(tHalCfg) + tlvStruct->length) ;
1648
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301649#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301650
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001651 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1652 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1653 tlvStruct->length = sizeof(tANI_U32);
1654 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1655 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1656 configDataValue ) != eSIR_SUCCESS)
1657 {
1658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1659 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1660 goto handle_failure;
1661 }
1662
1663 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1664 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001665
1666 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1667 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1668 tlvStruct->length = sizeof(tANI_U32);
1669 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1670 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1671 != eSIR_SUCCESS)
1672 {
1673 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1674 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1675 goto handle_failure;
1676 }
1677 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1678 + sizeof(tHalCfg) + tlvStruct->length));
1679
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301680 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1681 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1682 tlvStruct->length = sizeof(tANI_U32);
1683 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1684 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1685 configDataValue ) != eSIR_SUCCESS)
1686 {
1687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1688 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1689 goto handle_failure;
1690 }
1691
1692 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1693 + sizeof(tHalCfg) + tlvStruct->length) ;
1694
Madan Mohan Koyyalamudi2558bc92013-08-24 16:54:31 +05301695 /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
1696 tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
1697 tlvStruct->length = sizeof(tANI_U32);
1698 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1699 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
1700 configDataValue ) != eSIR_SUCCESS)
1701 {
1702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1703 "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
1704 goto handle_failure;
1705 }
1706 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1707 + sizeof(tHalCfg) + tlvStruct->length) ;
1708
Kiet Lam4bbd3cb2013-11-07 20:03:49 +05301709 /* QWLAN_HAL_CFG_ATH_DISABLE */
1710 tlvStruct->type = QWLAN_HAL_CFG_ATH_DISABLE ;
1711 tlvStruct->length = sizeof(tANI_U32);
1712 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1713 if(wlan_cfgGetInt(pMac, WNI_CFG_ATH_DISABLE,
1714 configDataValue ) != eSIR_SUCCESS)
1715 {
1716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1717 "Failed to get value for WNI_CFG_ATH_DISABLE");
1718 goto handle_failure;
1719 }
1720 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1721 + sizeof(tHalCfg) + tlvStruct->length) ;
1722
c_hpothu6d7dc922013-12-02 12:36:41 +05301723 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_WLAN_LEN */
1724 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1725 tlvStruct->length = sizeof(tANI_U32);
1726 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1727 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_WLAN_LEN,
1728 configDataValue ) != eSIR_SUCCESS)
1729 {
1730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1731 "Failed to get value for WNI_CFG_BTC_ACTIVE_WLAN_LEN");
1732 goto handle_failure;
1733 }
1734 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1735 + sizeof(tHalCfg) + tlvStruct->length) ;
1736
1737 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1738 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1739 tlvStruct->length = sizeof(tANI_U32);
1740 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1741 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_BT_LEN,
1742 configDataValue ) != eSIR_SUCCESS)
1743 {
1744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1745 "Failed to get value for WNI_CFG_BTC_ACTIVE_BT_LEN");
1746 goto handle_failure;
1747 }
1748 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1749 + sizeof(tHalCfg) + tlvStruct->length) ;
1750
1751 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN */
1752 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1753 tlvStruct->length = sizeof(tANI_U32);
1754 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1755 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN,
1756 configDataValue ) != eSIR_SUCCESS)
1757 {
1758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1759 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN");
1760 goto handle_failure;
1761 }
1762 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1763 + sizeof(tHalCfg) + tlvStruct->length) ;
1764
1765 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1766 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1767 tlvStruct->length = sizeof(tANI_U32);
1768 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1769 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_BT_LEN,
1770 configDataValue ) != eSIR_SUCCESS)
1771 {
1772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1773 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_BT_LEN");
1774 goto handle_failure;
1775 }
1776 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1777 + sizeof(tHalCfg) + tlvStruct->length) ;
1778
AnjaneeDevi Kapparapu50239e32014-01-07 18:09:33 +05301779 /* QWLAN_HAL_CFG_ASD_PROBE_INTERVAL */
1780 tlvStruct->type = QWLAN_HAL_CFG_ASD_PROBE_INTERVAL ;
1781 tlvStruct->length = sizeof(tANI_U32);
1782 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1783 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_PROBE_INTERVAL,
1784 configDataValue ) != eSIR_SUCCESS)
1785 {
1786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1787 "Failed to get value for WNI_CFG_ASD_PROBE_INTERVAL");
1788 goto handle_failure;
1789 }
1790 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1791 + sizeof(tHalCfg) + tlvStruct->length) ;
1792
1793 /* QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD */
1794 tlvStruct->type = QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD ;
1795 tlvStruct->length = sizeof(tANI_U32);
1796 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1797 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_TRIGGER_THRESHOLD,
1798 configDataValue ) != eSIR_SUCCESS)
1799 {
1800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1801 "Failed to get value for WNI_CFG_ASD_TRIGGER_THRESHOLD");
1802 goto handle_failure;
1803 }
1804 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1805 + sizeof(tHalCfg) + tlvStruct->length) ;
1806
1807 /* QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD */
1808 tlvStruct->type = QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD ;
1809 tlvStruct->length = sizeof(tANI_U32);
1810 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1811 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD,
1812 configDataValue ) != eSIR_SUCCESS)
1813 {
1814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1815 "Failed to get value for WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD");
1816 goto handle_failure;
1817 }
1818 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1819 + sizeof(tHalCfg) + tlvStruct->length) ;
1820
Leela Venkata Kiran Kumar Reddy Chirala22c159b2013-12-23 18:19:13 -08001821 /* QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO */
1822 tlvStruct->type = QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO ;
1823 tlvStruct->length = sizeof(tANI_U32);
1824 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1825 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CTS2S_DURING_SCO,
1826 configDataValue ) != eSIR_SUCCESS)
1827 {
1828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1829 "Failed to get value for WNI_CFG_BTC_CTS2S_DURING_SCO");
1830 goto handle_failure;
1831 }
1832 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1833 + sizeof(tHalCfg) + tlvStruct->length) ;
1834
c_hpothu5bd1ae42014-03-07 20:28:22 +05301835 /* QWLAN_HAL_CFG_RA_FILTER_ENABLE */
1836 tlvStruct->type = QWLAN_HAL_CFG_RA_FILTER_ENABLE ;
1837 tlvStruct->length = sizeof(tANI_U32);
1838 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1839
1840 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_FILTER_ENABLE,
1841 configDataValue ) != eSIR_SUCCESS)
1842 {
1843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1844 "Failed to get value for WNI_CFG_RA_FILTER_ENABLE");
1845 goto handle_failure;
1846 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05301847 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1848 + sizeof(tHalCfg) + tlvStruct->length) ;
1849
1850 /* QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL */
1851 tlvStruct->type = QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL ;
1852 tlvStruct->length = sizeof(tANI_U32);
1853 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1854
1855 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_RATE_LIMIT_INTERVAL,
1856 configDataValue ) != eSIR_SUCCESS)
1857 {
1858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1859 "Failed to get value for WNI_CFG_RA_RATE_LIMIT_INTERVAL");
1860 goto handle_failure;
1861 }
c_hpothu2d0f1c42014-04-01 18:38:51 +05301862 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1863 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu5bd1ae42014-03-07 20:28:22 +05301864
c_hpothu2d0f1c42014-04-01 18:38:51 +05301865 /* QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE */
1866 tlvStruct->type = QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE ;
1867 tlvStruct->length = sizeof(tANI_U32);
1868 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1869
1870 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE,
1871 configDataValue ) != eSIR_SUCCESS)
1872 {
1873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1874 "Failed to get value for WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE");
1875 goto handle_failure;
1876 }
1877 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1878 + sizeof(tHalCfg) + tlvStruct->length) ;
1879
1880 /* QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE */
1881 tlvStruct->type = QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE ;
1882 tlvStruct->length = sizeof(tANI_U32);
1883 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1884
1885 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE,
1886 configDataValue ) != eSIR_SUCCESS)
1887 {
1888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1889 "Failed to get value for WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE");
1890 goto handle_failure;
1891 }
1892 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1893 + sizeof(tHalCfg) + tlvStruct->length) ;
1894
1895 /* QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD */
1896 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD ;
1897 tlvStruct->length = sizeof(tANI_U32);
1898 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1899
1900 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD,
1901 configDataValue ) != eSIR_SUCCESS)
1902 {
1903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1904 "Failed to get value for WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD");
1905 goto handle_failure;
1906 }
1907 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1908 + sizeof(tHalCfg) + tlvStruct->length) ;
1909
1910 /* QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD */
1911 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD ;
1912 tlvStruct->length = sizeof(tANI_U32);
1913 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1914
1915 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD,
1916 configDataValue ) != eSIR_SUCCESS)
1917 {
1918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1919 "Failed to get value for WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD");
1920 goto handle_failure;
1921 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05301922 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1923 + sizeof(tHalCfg) + tlvStruct->length) ;
1924
Mihir Shetec34258c2014-07-30 17:50:27 +05301925 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP */
1926 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP ;
1927 tlvStruct->length = sizeof(tANI_U32);
1928 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1929
1930 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_SP,
1931 configDataValue ) != eSIR_SUCCESS)
1932 {
1933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1934 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_SP");
1935 goto handle_failure;
1936 }
1937 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1938 + sizeof(tHalCfg) + tlvStruct->length) ;
1939
1940 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT */
1941 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT ;
1942 tlvStruct->length = sizeof(tANI_U32);
1943 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1944
1945 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT,
1946 configDataValue ) != eSIR_SUCCESS)
1947 {
1948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1949 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT");
1950 goto handle_failure;
1951 }
1952 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1953 + sizeof(tHalCfg) + tlvStruct->length) ;
1954
1955 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT */
1956 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT ;
1957 tlvStruct->length = sizeof(tANI_U32);
1958 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1959
1960 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT,
1961 configDataValue ) != eSIR_SUCCESS)
1962 {
1963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1964 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT");
1965 goto handle_failure;
1966 }
1967 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1968 + sizeof(tHalCfg) + tlvStruct->length) ;
1969
1970 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW */
1971 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW ;
1972 tlvStruct->length = sizeof(tANI_U32);
1973 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1974
1975 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW,
1976 configDataValue ) != eSIR_SUCCESS)
1977 {
1978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1979 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW");
1980 goto handle_failure;
1981 }
1982 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1983 + sizeof(tHalCfg) + tlvStruct->length) ;
1984
1985 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW */
1986 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW ;
1987 tlvStruct->length = sizeof(tANI_U32);
1988 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1989
1990 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW,
1991 configDataValue ) != eSIR_SUCCESS)
1992 {
1993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1994 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW");
1995 goto handle_failure;
1996 }
1997 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1998 + sizeof(tHalCfg) + tlvStruct->length) ;
1999
2000 /* QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE */
2001 tlvStruct->type = QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE ;
2002 tlvStruct->length = sizeof(tANI_U32);
2003 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2004
2005 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE,
2006 configDataValue ) != eSIR_SUCCESS)
2007 {
2008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2009 "Failed to get value for WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE");
2010 goto handle_failure;
2011 }
2012 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2013 + sizeof(tHalCfg) + tlvStruct->length) ;
2014
2015 /* QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS */
2016 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS ;
2017 tlvStruct->length = sizeof(tANI_U32);
2018 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2019
2020 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS,
2021 configDataValue ) != eSIR_SUCCESS)
2022 {
2023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2024 "Failed to get value for WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS");
2025 goto handle_failure;
2026 }
2027 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2028 + sizeof(tHalCfg) + tlvStruct->length) ;
2029
2030 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS */
2031 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS ;
2032 tlvStruct->length = sizeof(tANI_U32);
2033 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2034
2035 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_WMMPS,
2036 configDataValue ) != eSIR_SUCCESS)
2037 {
2038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2039 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_WMMPS");
2040 goto handle_failure;
2041 }
2042 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2043 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu03d961b2014-09-19 16:45:00 +05302044
2045 /* QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE */
2046 tlvStruct->type = QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE ;
2047 tlvStruct->length = sizeof(tANI_U32);
2048 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2049
2050 if (wlan_cfgGetInt(pMac, WNI_CFG_BURST_MODE_BE_TXOP_VALUE,
2051 configDataValue ) != eSIR_SUCCESS)
2052 {
2053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2054 "Failed to get value for WNI_CFG_BURST_MODE_BE_TXOP_VALUE");
2055 goto handle_failure;
2056 }
2057 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2058 + sizeof(tHalCfg) + tlvStruct->length) ;
2059
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302060 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE */
2061 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE ;
2062 tlvStruct->length = sizeof(tANI_U32);
2063 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2064
2065 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE,
2066 configDataValue ) != eSIR_SUCCESS)
2067 {
2068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2069 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE");
2070 goto handle_failure;
2071 }
2072 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2073 + sizeof(tHalCfg) + tlvStruct->length) ;
2074
2075
Jeff Johnson295189b2012-06-20 16:38:30 -07002076 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002077#ifdef WLAN_DEBUG
2078 {
2079 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07002080 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2081 "****** Dumping CFG TLV ***** ");
2082 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
2083 {
2084 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2085 "%02x %02x %02x %02x %02x %02x %02x %02x",
2086 tlvStructStart[i],
2087 tlvStructStart[i+1],
2088 tlvStructStart[i+2],
2089 tlvStructStart[i+3],
2090 tlvStructStart[i+4],
2091 tlvStructStart[i+5],
2092 tlvStructStart[i+6],
2093 tlvStructStart[i+7]);
2094 }
2095 /* Dump the bytes in the last line*/
2096 for (; i < wdiStartParams->usConfigBufferLen; i++)
2097 {
2098 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2099 "%02x ",tlvStructStart[i]);
2100 }
2101 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2102 "**************************** ");
2103 }
2104#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002105 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002106handle_failure:
2107 vos_mem_free(configParam);
2108 return VOS_STATUS_E_FAILURE;
2109}
Jeff Johnson295189b2012-06-20 16:38:30 -07002110/*
2111 * FUNCTION: WDA_wdiCompleteCB
2112 * call the voss call back function
2113 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002114void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07002115{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002116 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2117 tWDA_CbContext *wdaContext;
2118
2119 if(NULL == pWdaParams)
2120 {
2121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002122 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002123 VOS_ASSERT(0) ;
2124 return ;
2125 }
2126
2127 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
2128
Jeff Johnson295189b2012-06-20 16:38:30 -07002129 if (NULL == wdaContext)
2130 {
2131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002132 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002133 return ;
2134 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002135
Jeff Johnson295189b2012-06-20 16:38:30 -07002136 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002137 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07002138 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002139 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002140 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002141 vos_mem_free(pWdaParams);
2142
Jeff Johnson295189b2012-06-20 16:38:30 -07002143 if(WDI_STATUS_SUCCESS != status)
2144 {
2145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2146 "WDI stop callback returned failure" );
2147 VOS_ASSERT(0) ;
2148 }
2149 else
2150 {
2151 wdaContext->wdaState = WDA_STOP_STATE;
2152 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002153
Leo Chang9d76f622013-08-23 16:34:52 -07002154 /* FTM Driver stop procedure should be synced.
2155 * Stop and Close will happen on same context */
2156 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
2157 {
2158 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
2159 {
2160 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2161 "%s: FTM Stop Event Set Fail", __func__);
2162 VOS_ASSERT(0);
2163 }
2164 }
2165
Jeff Johnson295189b2012-06-20 16:38:30 -07002166 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002167 vos_WDAComplete_cback(wdaContext->pVosContext);
2168
Jeff Johnson295189b2012-06-20 16:38:30 -07002169 return ;
2170}
Jeff Johnson295189b2012-06-20 16:38:30 -07002171/*
2172 * FUNCTION: WDA_stop
2173 * call WDI_stop
2174 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002175VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
2176{
2177 WDI_Status wdiStatus;
2178 VOS_STATUS status = VOS_STATUS_SUCCESS;
2179 WDI_StopReqParamsType *wdiStopReq;
2180 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002181 tWDA_ReqParams *pWdaParams ;
2182
Jeff Johnson295189b2012-06-20 16:38:30 -07002183 if (NULL == pWDA)
2184 {
2185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002186 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002187 VOS_ASSERT(0);
2188 return VOS_STATUS_E_FAILURE;
2189 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002190 if (pWDA->wdiFailed == true)
2191 {
2192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002193 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002194 return VOS_STATUS_E_ALREADY;
2195 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002196
Jeff Johnson295189b2012-06-20 16:38:30 -07002197 /* FTM mode stay START_STATE */
2198 if( (WDA_READY_STATE != pWDA->wdaState) &&
2199 (WDA_INIT_STATE != pWDA->wdaState) &&
2200 (WDA_START_STATE != pWDA->wdaState) )
2201 {
2202 VOS_ASSERT(0);
2203 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002204 wdiStopReq = (WDI_StopReqParamsType *)
2205 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
2206 if(NULL == wdiStopReq)
2207 {
2208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002209 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002210 VOS_ASSERT(0);
2211 return VOS_STATUS_E_NOMEM;
2212 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002213
Jeff Johnson295189b2012-06-20 16:38:30 -07002214 wdiStopReq->wdiStopReason = reason;
2215 wdiStopReq->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002216
2217 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2218 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07002219 {
2220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002221 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002222 VOS_ASSERT(0);
2223 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002224 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07002225 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002226
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002227 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
2228 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07002229 {
2230 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002231 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002232 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002233
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002234 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
2235 pWdaParams->wdaMsgParam = NULL;
2236 pWdaParams->pWdaContext = pWDA;
2237
Jeff Johnson295189b2012-06-20 16:38:30 -07002238 /* call WDI stop */
2239 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002240 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
2241
Jeff Johnson295189b2012-06-20 16:38:30 -07002242 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
2243 {
2244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2245 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002246 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2247 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002248 status = VOS_STATUS_E_FAILURE;
2249 }
Leo Chang9d76f622013-08-23 16:34:52 -07002250
2251 /* FTM Driver stop procedure should be synced.
2252 * Stop and Close will happen on same context */
2253 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
2254 {
2255 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
2256 WDI_RESPONSE_TIMEOUT);
2257 if (status != VOS_STATUS_SUCCESS)
2258 {
2259 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2260 "%s: FTM Stop Timepoout", __func__);
2261 VOS_ASSERT(0);
Leo Chang9d76f622013-08-23 16:34:52 -07002262 }
c_hpothu0d36bc42014-07-03 17:43:45 +05302263 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Leo Chang9d76f622013-08-23 16:34:52 -07002264 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002265 return status;
2266}
Jeff Johnson295189b2012-06-20 16:38:30 -07002267/*
2268 * FUNCTION: WDA_close
2269 * call WDI_close and free the WDA context
2270 */
2271VOS_STATUS WDA_close(v_PVOID_t pVosContext)
2272{
Jeff Johnson43971f52012-07-17 12:26:56 -07002273 VOS_STATUS status = VOS_STATUS_SUCCESS;
2274 WDI_Status wstatus;
2275 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002276 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002277 if (NULL == wdaContext)
2278 {
2279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002280 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002281 return VOS_STATUS_E_FAILURE;
2282 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002283 if((WDA_INIT_STATE != wdaContext->wdaState) &&
2284 (WDA_STOP_STATE != wdaContext->wdaState))
2285 {
2286 VOS_ASSERT(0);
2287 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002288 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07002289 wstatus = WDI_Close();
2290 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07002291 {
2292 status = VOS_STATUS_E_FAILURE;
2293 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002294 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002295 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07002296 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
2297 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002298 {
2299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002300 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002301 status = VOS_STATUS_E_FAILURE;
2302 }
2303
Jeff Johnson43971f52012-07-17 12:26:56 -07002304 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002305 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002306 {
2307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002308 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002309 status = VOS_STATUS_E_FAILURE;
2310 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002311 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002312 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002313 {
2314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002315 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002316 status = VOS_STATUS_E_FAILURE;
2317 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002318 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07002319 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002320 {
2321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002322 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002323 status = VOS_STATUS_E_FAILURE;
2324 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002325 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07002326 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07002327 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07002328 {
2329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2330 "error in WDA close " );
2331 status = VOS_STATUS_E_FAILURE;
2332 }
2333 return status;
2334}
Jeff Johnson295189b2012-06-20 16:38:30 -07002335/*
2336 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
2337 * returns 1 if the compiled version is greater than or equal to the input version
2338 */
2339
2340uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2341{
2342 VOS_STATUS status = VOS_STATUS_SUCCESS;
2343 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2344 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002345 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002346 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
2347 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
2348 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
2349 (compiledVersion.revision >= revision)))
2350 return 1;
2351 else
2352 return 0;
2353}
Jeff Johnson295189b2012-06-20 16:38:30 -07002354/*
2355 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
2356 * returns 1 if the compiled version is greater than or equal to the input version
2357 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002358uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2359{
2360 VOS_STATUS status = VOS_STATUS_SUCCESS;
2361 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2362 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002363 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002364 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
2365 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
2366 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
2367 (reportedVersion.revision >= revision)))
2368 return 1;
2369 else
2370 return 0;
2371}
Jeff Johnson295189b2012-06-20 16:38:30 -07002372/*
2373 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
2374 * Returns the version of the WCNSS WLAN API with which the HOST
2375 * device driver was compiled
2376 */
2377VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
2378 tSirVersionType *pVersion)
2379{
2380 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002381 if ((NULL == pvosGCtx) || (NULL == pVersion))
2382 {
2383 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002384 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002385 VOS_ASSERT(0);
2386 return VOS_STATUS_E_FAILURE;
2387 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002388 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2389 if (NULL == pWDA )
2390 {
2391 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002392 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002393 VOS_ASSERT(0);
2394 return VOS_STATUS_E_FAILURE;
2395 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002396 *pVersion = pWDA->wcnssWlanCompiledVersion;
2397 return VOS_STATUS_SUCCESS;
2398}
Jeff Johnson295189b2012-06-20 16:38:30 -07002399/*
2400 * FUNCTION: WDA_GetWcnssWlanReportedVersion
2401 * Returns the version of the WCNSS WLAN API with which the WCNSS
2402 * device driver was compiled
2403 */
2404VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
2405 tSirVersionType *pVersion)
2406{
2407 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002408 if ((NULL == pvosGCtx) || (NULL == pVersion))
2409 {
2410 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002411 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002412 VOS_ASSERT(0);
2413 return VOS_STATUS_E_FAILURE;
2414 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002415 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2416 if (NULL == pWDA )
2417 {
2418 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002419 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002420 VOS_ASSERT(0);
2421 return VOS_STATUS_E_FAILURE;
2422 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002423 *pVersion = pWDA->wcnssWlanReportedVersion;
2424 return VOS_STATUS_SUCCESS;
2425}
Jeff Johnson295189b2012-06-20 16:38:30 -07002426/*
2427 * FUNCTION: WDA_GetWcnssSoftwareVersion
2428 * Returns the WCNSS Software version string
2429 */
2430VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
2431 tANI_U8 *pVersion,
2432 tANI_U32 versionBufferSize)
2433{
2434 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002435 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002436 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002437 if ((NULL == pvosGCtx) || (NULL == pVersion))
2438 {
2439 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002440 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002441 VOS_ASSERT(0);
2442 return VOS_STATUS_E_FAILURE;
2443 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002444 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2445 if (NULL == pWDA )
2446 {
2447 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002448 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002449 VOS_ASSERT(0);
2450 return VOS_STATUS_E_FAILURE;
2451 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002452 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
2453 return VOS_STATUS_SUCCESS;
2454}
Jeff Johnson295189b2012-06-20 16:38:30 -07002455/*
2456 * FUNCTION: WDA_GetWcnssHardwareVersion
2457 * Returns the WCNSS Hardware version string
2458 */
2459VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
2460 tANI_U8 *pVersion,
2461 tANI_U32 versionBufferSize)
2462{
2463 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002464 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002465 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002466 if ((NULL == pvosGCtx) || (NULL == pVersion))
2467 {
2468 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002469 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002470 VOS_ASSERT(0);
2471 return VOS_STATUS_E_FAILURE;
2472 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002473 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2474 if (NULL == pWDA )
2475 {
2476 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002477 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002478 VOS_ASSERT(0);
2479 return VOS_STATUS_E_FAILURE;
2480 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002481 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
2482 return VOS_STATUS_SUCCESS;
2483}
Jeff Johnson295189b2012-06-20 16:38:30 -07002484/*
2485 * FUNCTION: WDA_WniCfgDnld
2486 * Trigger CFG Download
2487 */
2488VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
2489{
2490 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302491 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnsonab81a082013-04-03 16:00:31 -07002492
Jeff Johnson295189b2012-06-20 16:38:30 -07002493 if (NULL == pMac )
2494 {
2495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002496 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002497 VOS_ASSERT(0);
2498 return VOS_STATUS_E_FAILURE;
2499 }
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302500 processCfgDownloadReq(pMac);
Jeff Johnson295189b2012-06-20 16:38:30 -07002501 return vosStatus;
2502}
Jeff Johnson295189b2012-06-20 16:38:30 -07002503/* -----------------------------------------------------------------
2504 * WDI interface
2505 * -----------------------------------------------------------------
2506 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002507/*
2508 * FUNCTION: WDA_suspendDataTxCallback
2509 * call back function called from TL after suspend Transmission
2510 */
2511VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2512 v_U8_t* ucSTAId,
2513 VOS_STATUS vosStatus)
2514{
2515 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002517 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002518 if (NULL == pWDA )
2519 {
2520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002521 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002522 VOS_ASSERT(0);
2523 return VOS_STATUS_E_FAILURE;
2524 }
2525 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2526 {
2527 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2528 }
2529 else
2530 {
2531 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2532 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002533 /* Trigger the event to bring the WDA TL suspend function to come
2534 * out of wait*/
2535 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2536 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2537 {
2538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002539 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002540 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002541 /* If TL suspended had timedout before this callback was called, resume back
2542 * TL.*/
2543 if (pWDA->txSuspendTimedOut)
2544 {
2545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002546 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07002547 WDA_ResumeDataTx(pWDA);
2548 pWDA->txSuspendTimedOut = FALSE;
2549 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002550 return VOS_STATUS_SUCCESS;
2551}
Jeff Johnson295189b2012-06-20 16:38:30 -07002552/*
2553 * FUNCTION: WDA_suspendDataTx
2554 * Update TL to suspend the data Transmission
2555 */
2556VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2557{
2558 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2559 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002560
2561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002562 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002563 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002564 if (pWDA->txSuspendTimedOut)
2565 {
2566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002567 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07002568 return status;
2569 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002570 /* Reset the event to be not signalled */
2571 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2572 if(!VOS_IS_STATUS_SUCCESS(status))
2573 {
2574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002575 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002576 return VOS_STATUS_E_FAILURE;
2577 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002578 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002579 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002580 WDA_SuspendDataTxCallback);
2581 if(status != VOS_STATUS_SUCCESS)
2582 {
2583 return status;
2584 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002585 /* Wait for the event to be set by the TL, to get the response of
2586 * suspending the TX queues, this event should be set by the Callback
2587 * function called by TL*/
2588 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2589 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2590 if(!VOS_IS_STATUS_SUCCESS(status))
2591 {
2592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2593 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002594 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002595 /* Set this flag to true when TL suspend times out, so that when TL
2596 * suspend eventually happens and calls the callback, TL can be resumed
2597 * right away by looking at this flag when true.*/
2598 pWDA->txSuspendTimedOut = TRUE;
2599 }
2600 else
2601 {
2602 pWDA->txSuspendTimedOut = FALSE;
2603 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002604 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2605 {
2606 status = VOS_STATUS_SUCCESS;
2607 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002608 return status;
2609}
Jeff Johnson295189b2012-06-20 16:38:30 -07002610/*
2611 * FUNCTION: WDA_resumeDataTx
2612 * Update TL to resume the data Transmission
2613 */
2614VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2615{
2616 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002617
2618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002619 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002620
2621 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002622 return status;
2623}
Jeff Johnson295189b2012-06-20 16:38:30 -07002624/*
2625 * FUNCTION: WDA_InitScanReqCallback
2626 * Trigger Init SCAN callback
2627 */
2628void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2629{
2630 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2631 tWDA_CbContext *pWDA;
2632 tInitScanParams *pWDA_ScanParam ;
2633 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002635 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002636 if(NULL == pWdaParams)
2637 {
2638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002639 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002640 VOS_ASSERT(0) ;
2641 return ;
2642 }
2643 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2644 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002645 if(NULL == pWDA_ScanParam)
2646 {
2647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002648 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002649 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002650 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2651 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002652 return ;
2653 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002654 if(WDI_STATUS_SUCCESS != wdiStatus)
2655 {
2656 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002657 if(VOS_STATUS_SUCCESS != status)
2658 {
2659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002660 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002661 }
2662 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002663 /* free WDI command buffer */
2664 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002665 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002666
Jeff Johnson295189b2012-06-20 16:38:30 -07002667
2668 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002669 /* without converting the Status to Failure or Success Just
2670 pass the same status to lim */
2671 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002672 /* send SCAN RSP message back to PE */
2673 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002674 return ;
2675}
2676
2677/*
2678 * FUNCTION: WDA_ProcessInitScanReq
2679 * Trigger Init SCAN in DAL
2680 */
2681VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2682 tInitScanParams *initScanParams)
2683{
2684 WDI_Status status = WDI_STATUS_SUCCESS ;
2685 WDI_InitScanReqParamsType *wdiInitScanParam =
2686 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2687 sizeof(WDI_InitScanReqParamsType)) ;
2688 tWDA_ReqParams *pWdaParams;
2689 tANI_U8 i = 0;
2690
2691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002692 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002693 if(NULL == wdiInitScanParam)
2694 {
2695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002696 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002697 VOS_ASSERT(0);
2698 return VOS_STATUS_E_NOMEM;
2699 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002700 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2701 if(NULL == pWdaParams)
2702 {
2703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002704 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002705 VOS_ASSERT(0);
2706 vos_mem_free(wdiInitScanParam);
2707 return VOS_STATUS_E_NOMEM;
2708 }
2709
2710 /* Copy init Scan params to WDI structure */
2711 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2712 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2713 sizeof(tSirMacAddr)) ;
2714 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2715 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2716 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002717 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2718 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07002719 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2720 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002721 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2722 {
2723 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2724 initScanParams->scanEntry.bssIdx[i] ;
2725 }
2726
2727 /* if Frame length, copy macMgmtHdr or WDI structure */
2728 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2729 {
2730 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2731 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2732 }
2733 wdiInitScanParam->wdiReqStatusCB = NULL ;
2734
Jeff Johnson295189b2012-06-20 16:38:30 -07002735 /* Store Init Req pointer, as this will be used for response */
2736 pWdaParams->pWdaContext = pWDA;
2737 pWdaParams->wdaMsgParam = initScanParams;
2738 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002739 /* first try to suspend TX */
2740 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002741 if(WDI_STATUS_SUCCESS != status)
2742 {
2743 goto handleWdiFailure;
2744 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002745 /* call DAL API to pass init scan request to DAL */
2746 status = WDI_InitScanReq(wdiInitScanParam,
2747 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002748 if(IS_WDI_STATUS_FAILURE(status))
2749 {
2750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2751 "error in WDA Init Scan, Resume Tx " );
2752 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002753 VOS_ASSERT(0) ;
2754
2755 goto handleWdiFailure;
2756 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002757 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002758handleWdiFailure:
2759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2760 "Failure in WDI Api, free all the memory " );
2761 /* free WDI command buffer */
2762 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2763 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002764 /* send Failure to PE */
2765 initScanParams->status = eSIR_FAILURE ;
2766 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002767 return CONVERT_WDI2VOS_STATUS(status) ;
2768}
2769
Jeff Johnson295189b2012-06-20 16:38:30 -07002770/*
2771 * FUNCTION: WDA_StartScanReqCallback
2772 * send Start SCAN RSP back to PE
2773 */
2774void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2775 void* pUserData)
2776{
2777 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2778 tWDA_CbContext *pWDA;
2779 tStartScanParams *pWDA_ScanParam;
2780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002781 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002782 if(NULL == pWdaParams)
2783 {
2784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002785 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002786 VOS_ASSERT(0) ;
2787 return ;
2788 }
2789 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2790 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002791 if(NULL == pWDA_ScanParam)
2792 {
2793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002794 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002795 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002796 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002797 return ;
2798 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002799 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2800 {
2801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002802 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002803 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002804 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002805 return ;
2806 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002807 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2808 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002809
Jeff Johnson295189b2012-06-20 16:38:30 -07002810
2811 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002812 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002813 /* send SCAN RSP message back to PE */
2814 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002815 return ;
2816}
2817
Jeff Johnson295189b2012-06-20 16:38:30 -07002818/*
2819 * FUNCTION: WDA_ProcessStartScanReq
2820 * Trigger start SCAN in WDI
2821 */
2822VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2823 tStartScanParams *startScanParams)
2824{
2825 WDI_Status status = WDI_STATUS_SUCCESS;
2826 WDI_StartScanReqParamsType *wdiStartScanParams =
2827 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2828 sizeof(WDI_StartScanReqParamsType)) ;
2829 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002831 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002832 if(NULL == wdiStartScanParams)
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 return VOS_STATUS_E_NOMEM;
2838 }
2839 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2840 if(NULL == pWdaParams)
2841 {
2842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002843 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002844 VOS_ASSERT(0);
2845 vos_mem_free(wdiStartScanParams);
2846 return VOS_STATUS_E_NOMEM;
2847 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002848 /* Copy init Scan params to WDI structure */
2849 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2850 wdiStartScanParams->wdiReqStatusCB = NULL ;
2851
Jeff Johnson295189b2012-06-20 16:38:30 -07002852 /* Store Init Req pointer, as this will be used for response */
2853 /* store Params pass it to WDI */
2854 pWdaParams->pWdaContext = pWDA;
2855 pWdaParams->wdaMsgParam = startScanParams;
2856 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002857 /* call DAL API to pass init scan request to DAL */
2858 status = WDI_StartScanReq(wdiStartScanParams,
2859 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002860 /* failure returned by WDI API */
2861 if(IS_WDI_STATUS_FAILURE(status))
2862 {
2863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2864 "Failure in Start Scan WDI API, free all the memory "
2865 "It should be due to previous abort scan." );
2866 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2867 vos_mem_free(pWdaParams) ;
2868 startScanParams->status = eSIR_FAILURE ;
2869 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2870 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002871 return CONVERT_WDI2VOS_STATUS(status) ;
2872}
Jeff Johnson295189b2012-06-20 16:38:30 -07002873/*
2874 * FUNCTION: WDA_EndScanReqCallback
2875 * END SCAN callback
2876 */
2877void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2878{
2879 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2880 tWDA_CbContext *pWDA;
2881 tEndScanParams *endScanParam;
2882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002883 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002884 if(NULL == pWdaParams)
2885 {
2886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002887 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002888 VOS_ASSERT(0) ;
2889 return ;
2890 }
2891 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2892 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002893 if(NULL == endScanParam)
2894 {
2895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002896 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002897 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002898 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2899 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002900 return ;
2901 }
2902
2903 /* Free WDI command buffer */
2904 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2905 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002906 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002907 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002908 /* send response back to PE */
2909 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2910 return ;
2911}
2912
Jeff Johnson295189b2012-06-20 16:38:30 -07002913/*
2914 * FUNCTION: WDA_ProcessEndScanReq
2915 * Trigger END SCAN in WDI
2916 */
2917VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2918 tEndScanParams *endScanParams)
2919{
2920 WDI_Status status = WDI_STATUS_SUCCESS;
2921 WDI_EndScanReqParamsType *wdiEndScanParams =
2922 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2923 sizeof(WDI_EndScanReqParamsType)) ;
2924 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002926 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002927 if(NULL == wdiEndScanParams)
2928 {
2929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002930 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002931 VOS_ASSERT(0);
2932 return VOS_STATUS_E_NOMEM;
2933 }
2934 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2935 if(NULL == pWdaParams)
2936 {
2937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002938 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002939 VOS_ASSERT(0);
2940 vos_mem_free(wdiEndScanParams);
2941 return VOS_STATUS_E_NOMEM;
2942 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002943 /* Copy init Scan params to WDI structure */
2944 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2945 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002946 /* Store Init Req pointer, as this will be used for response */
2947 /* store Params pass it to WDI */
2948 pWdaParams->pWdaContext = pWDA;
2949 pWdaParams->wdaMsgParam = endScanParams;
2950 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002951 /* call DAL API to pass init scan request to DAL */
2952 status = WDI_EndScanReq(wdiEndScanParams,
2953 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002954 if(IS_WDI_STATUS_FAILURE(status))
2955 {
2956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2957 "Failure in End Scan WDI API, free all the memory "
2958 "It should be due to previous abort scan." );
2959 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2960 vos_mem_free(pWdaParams) ;
2961 endScanParams->status = eSIR_FAILURE ;
2962 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2963 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002964 return CONVERT_WDI2VOS_STATUS(status) ;
2965}
Jeff Johnson295189b2012-06-20 16:38:30 -07002966/*
2967 * FUNCTION: WDA_FinishScanReqCallback
2968 * Trigger Finish SCAN callback
2969 */
2970void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2971{
2972 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2973 tWDA_CbContext *pWDA;
2974 tFinishScanParams *finishScanParam;
2975 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002977 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002978 if(NULL == pWdaParams)
2979 {
2980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002981 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002982 VOS_ASSERT(0) ;
2983 return ;
2984 }
2985
2986 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2987 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002988 if(NULL == finishScanParam)
2989 {
2990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002991 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002992 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002993 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2994 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002995 return ;
2996 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002997 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2998 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002999 /*
3000 * Now Resume TX, if we reached here means, TX is already suspended, we
3001 * have to resume it unconditionaly
3002 */
3003 status = WDA_ResumeDataTx(pWDA) ;
3004
3005 if(VOS_STATUS_SUCCESS != status)
3006 {
3007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003008 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003009 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003010 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003011 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
3012 return ;
3013}
Jeff Johnson295189b2012-06-20 16:38:30 -07003014/*
3015 * FUNCTION: WDA_ProcessFinshScanReq
3016 * Trigger Finish SCAN in WDI
3017 */
3018VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
3019 tFinishScanParams *finishScanParams)
3020{
3021 WDI_Status status = WDI_STATUS_SUCCESS;
3022 WDI_FinishScanReqParamsType *wdiFinishScanParams =
3023 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
3024 sizeof(WDI_FinishScanReqParamsType)) ;
3025 tWDA_ReqParams *pWdaParams ;
3026 tANI_U8 i = 0;
3027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003028 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003029 if(NULL == wdiFinishScanParams)
3030 {
3031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003032 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003033 VOS_ASSERT(0);
3034 return VOS_STATUS_E_NOMEM;
3035 }
3036 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3037 if(NULL == pWdaParams)
3038 {
3039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003040 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003041 VOS_ASSERT(0);
3042 vos_mem_free(wdiFinishScanParams);
3043 return VOS_STATUS_E_NOMEM;
3044 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003045 /* Copy init Scan params to WDI structure */
3046 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
3047 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
3048 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003049 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
3050 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
3051 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
3052 finishScanParams->frameLength ;
3053 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
3054 finishScanParams->currentOperChannel ;
3055 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
3056 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
3057 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003058 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
3059 {
3060 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3061 finishScanParams->scanEntry.bssIdx[i] ;
3062 }
3063
3064
Jeff Johnson295189b2012-06-20 16:38:30 -07003065 /* if Frame length, copy macMgmtHdr ro WDI structure */
3066 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
3067 {
3068 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
3069 &finishScanParams->macMgmtHdr,
3070 sizeof(WDI_MacMgmtHdr)) ;
3071 }
3072 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003073 /* Store Init Req pointer, as this will be used for response */
3074 /* store Params pass it to WDI */
3075 pWdaParams->pWdaContext = pWDA;
3076 pWdaParams->wdaMsgParam = finishScanParams;
3077 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003078 /* call DAL API to pass init scan request to DAL */
3079 status = WDI_FinishScanReq(wdiFinishScanParams,
3080 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003081
Jeff Johnson295189b2012-06-20 16:38:30 -07003082
3083 /*
3084 * WDI API returns failure..
3085 */
3086 if(IS_WDI_STATUS_FAILURE( status))
3087 {
3088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3089 "Failure in Finish Scan WDI API, free all the memory " );
3090 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3091 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003092 finishScanParams->status = eSIR_FAILURE ;
3093 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
3094 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003095 return CONVERT_WDI2VOS_STATUS(status) ;
3096}
Jeff Johnson295189b2012-06-20 16:38:30 -07003097/*---------------------------------------------------------------------
3098 * ASSOC API's
3099 *---------------------------------------------------------------------
3100 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003101/*
Sachin Ahuja935eda782014-07-30 14:57:41 +05303102 * FUNCTION: WDA_JoinRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003103 * Trigger Init SCAN callback
3104 */
Sachin Ahuja935eda782014-07-30 14:57:41 +05303105void WDA_JoinRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07003106{
3107 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3108 tWDA_CbContext *pWDA;
3109 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003111 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003112 if(NULL == pWdaParams)
3113 {
3114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003115 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003116 VOS_ASSERT(0) ;
3117 return ;
3118 }
3119 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3120 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003121 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3122 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003123 /* reset macBSSID */
3124 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07003125 /* reset macSTASelf */
3126 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003127 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003128 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003129 return ;
3130}
Sachin Ahuja935eda782014-07-30 14:57:41 +05303131
3132/*
3133 * FUNCTION: WDA_JoinReqCallback
3134 * Free memory and send SWITCH CHANNEL RSP back to PE.
3135 * Invoked when Enter JOIN REQ failed in WDI and no RSP callback is generated.
3136 */
3137void WDA_JoinReqCallback(WDI_Status wdiStatus, void* pUserData)
3138{
3139 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3140 tWDA_CbContext *pWDA;
3141 tSwitchChannelParams *joinReqParam;
3142
3143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3144 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
3145
3146 if(NULL == pWdaParams)
3147 {
3148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3149 "%s: pWdaParams received NULL", __func__);
3150 VOS_ASSERT(0);
3151 return;
3152 }
3153
3154 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3155 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3156 joinReqParam->status = wdiStatus;
3157
3158 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3159 {
3160 /* reset macBSSID */
3161 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
3162 /* reset macSTASelf */
3163 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
3164
3165 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3166 vos_mem_free(pWdaParams);
3167 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
3168 }
3169
3170 return;
3171}
3172
Jeff Johnson295189b2012-06-20 16:38:30 -07003173/*
3174 * FUNCTION: WDA_ProcessJoinReq
3175 * Trigger Join REQ in WDI
3176 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003177VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
3178 tSwitchChannelParams* joinReqParam)
3179{
3180 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003181 WDI_JoinReqParamsType *wdiJoinReqParam =
3182 (WDI_JoinReqParamsType *)vos_mem_malloc(
3183 sizeof(WDI_JoinReqParamsType)) ;
3184 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003186 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003187 if(NULL == wdiJoinReqParam)
3188 {
3189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003190 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003191 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003192 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003193 return VOS_STATUS_E_NOMEM;
3194 }
3195 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3196 if(NULL == pWdaParams)
3197 {
3198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003199 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003200 VOS_ASSERT(0);
3201 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003202 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003203 return VOS_STATUS_E_NOMEM;
3204 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003205
3206 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
3207 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
3208 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
3209 {
3210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3211 "%s: received join request when BSSID or self-STA is NULL "
3212 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003213 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003214 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
3215 VOS_ASSERT(0);
3216 vos_mem_free(wdiJoinReqParam);
3217 vos_mem_free(pWdaParams);
3218 joinReqParam->status = eSIR_FAILURE ;
3219 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3220 return VOS_STATUS_E_INVAL;
3221 }
3222
Jeff Johnson295189b2012-06-20 16:38:30 -07003223 /* copy the BSSID for pWDA */
3224 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
3225 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003226 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
3227 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003228 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
3229 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07003230#ifdef WLAN_FEATURE_VOWIFI
3231 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
3232 joinReqParam->maxTxPower ;
3233#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003234 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
3235 joinReqParam->localPowerConstraint ;
3236#endif
3237 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
3238 joinReqParam->secondaryChannelOffset ;
3239 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
3240
Sachin Ahuja935eda782014-07-30 14:57:41 +05303241 wdiJoinReqParam->wdiReqStatusCB = WDA_JoinReqCallback;
3242 wdiJoinReqParam->pUserData = pWdaParams;
3243
Jeff Johnson295189b2012-06-20 16:38:30 -07003244 /* Store Init Req pointer, as this will be used for response */
3245 /* store Params pass it to WDI */
3246 pWdaParams->pWdaContext = pWDA;
3247 pWdaParams->wdaMsgParam = joinReqParam;
3248 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003249 status = WDI_JoinReq(wdiJoinReqParam,
Sachin Ahuja935eda782014-07-30 14:57:41 +05303250 (WDI_JoinRspCb )WDA_JoinRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003251 if(IS_WDI_STATUS_FAILURE(status))
3252 {
3253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3254 "Failure in Join WDI API, free all the memory " );
3255 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3256 vos_mem_free(pWdaParams) ;
3257 joinReqParam->status = eSIR_FAILURE ;
3258 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3259 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003260 return CONVERT_WDI2VOS_STATUS(status) ;
3261}
Jeff Johnson295189b2012-06-20 16:38:30 -07003262/*
3263 * FUNCTION: WDA_SwitchChannelReqCallback
3264 * send Switch channel RSP back to PE
3265 */
3266void WDA_SwitchChannelReqCallback(
3267 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
3268{
3269 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3270 tWDA_CbContext *pWDA;
3271 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003273 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003274 if(NULL == pWdaParams)
3275 {
3276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003277 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003278 VOS_ASSERT(0) ;
3279 return ;
3280 }
3281 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3282 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3283
3284#ifdef WLAN_FEATURE_VOWIFI
3285 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
3286#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003287 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3288 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003289 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003290 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003291 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003292 return ;
3293}
Jeff Johnson295189b2012-06-20 16:38:30 -07003294/*
3295 * FUNCTION: WDA_ProcessChannelSwitchReq
3296 * Request to WDI to switch channel REQ params.
3297 */
3298VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
3299 tSwitchChannelParams *pSwitchChanParams)
3300{
3301 WDI_Status status = WDI_STATUS_SUCCESS ;
3302 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
3303 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
3304 sizeof(WDI_SwitchChReqParamsType)) ;
3305 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003307 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003308 if(NULL == wdiSwitchChanParam)
3309 {
3310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003311 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003312 VOS_ASSERT(0);
3313 return VOS_STATUS_E_NOMEM;
3314 }
3315 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3316 if(NULL == pWdaParams)
3317 {
3318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003319 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003320 VOS_ASSERT(0);
3321 vos_mem_free(wdiSwitchChanParam);
3322 return VOS_STATUS_E_NOMEM;
3323 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003324 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
3325#ifndef WLAN_FEATURE_VOWIFI
3326 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3327 pSwitchChanParams->localPowerConstraint;
3328#endif
3329 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3330 pSwitchChanParams->secondaryChannelOffset;
3331 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003332 /* Store req pointer, as this will be used for response */
3333 /* store Params pass it to WDI */
3334 pWdaParams->pWdaContext = pWDA;
3335 pWdaParams->wdaMsgParam = pSwitchChanParams;
3336 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003337#ifdef WLAN_FEATURE_VOWIFI
3338 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
3339 = pSwitchChanParams->maxTxPower;
3340 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3341 pSwitchChanParams ->selfStaMacAddr,
3342 sizeof(tSirMacAddr));
3343#endif
3344 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3345 pSwitchChanParams->bssId,
3346 sizeof(tSirMacAddr));
3347
3348 status = WDI_SwitchChReq(wdiSwitchChanParam,
3349 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003350 if(IS_WDI_STATUS_FAILURE(status))
3351 {
3352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3353 "Failure in process channel switch Req WDI API, free all the memory " );
3354 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3355 vos_mem_free(pWdaParams) ;
3356 pSwitchChanParams->status = eSIR_FAILURE ;
3357 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
3358 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003359 return CONVERT_WDI2VOS_STATUS(status) ;
3360}
Kalikinkar dhara1e83b772014-02-06 12:59:22 -08003361
3362/*
3363 * FUNCTION: WDA_SwitchChannelReqCallback_V1
3364 * send Switch channel RSP back to PE
3365 */
3366void WDA_SwitchChannelReqCallback_V1(
3367 WDI_SwitchChRspParamsType_V1 *wdiSwitchChanRsp,
3368 void* pUserData)
3369{
3370 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3371 tWDA_CbContext *pWDA;
3372 tSwitchChannelParams *pSwitchChanParams;
3373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3374 "<------ %s " ,__func__);
3375
3376 if (NULL == pWdaParams)
3377 {
3378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3379 "%s: pWdaParams received NULL", __func__);
3380 VOS_ASSERT(0);
3381 return ;
3382 }
3383 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3384 pSwitchChanParams =
3385 (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3386 pSwitchChanParams->channelSwitchSrc =
3387 wdiSwitchChanRsp->channelSwitchSrc;
3388#ifdef WLAN_FEATURE_VOWIFI
3389 pSwitchChanParams->txMgmtPower =
3390 wdiSwitchChanRsp->ucTxMgmtPower;
3391#endif
3392 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3393 vos_mem_free(pWdaParams);
3394 pSwitchChanParams->status =
3395 wdiSwitchChanRsp->wdiStatus ;
3396 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3397 (void *)pSwitchChanParams , 0);
3398 return;
3399}
3400
3401/*
3402 * FUNCTION: WDA_ProcessChannelSwitchReq_V1
3403 * Request to WDI to switch channel REQ params.
3404 */
3405VOS_STATUS WDA_ProcessChannelSwitchReq_V1(tWDA_CbContext *pWDA,
3406 tSwitchChannelParams *pSwitchChanParams)
3407{
3408 WDI_Status status = WDI_STATUS_SUCCESS ;
3409 WDI_SwitchChReqParamsType_V1 *wdiSwitchChanParam =
3410 (WDI_SwitchChReqParamsType_V1 *)vos_mem_malloc(
3411 sizeof(WDI_SwitchChReqParamsType_V1)) ;
3412 tWDA_ReqParams *pWdaParams ;
3413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3414 "------> %s " ,__func__);
3415 if (NULL == wdiSwitchChanParam)
3416 {
3417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3418 "%s: VOS MEM Alloc Failure", __func__);
3419 VOS_ASSERT(0);
3420 return VOS_STATUS_E_NOMEM;
3421 }
3422 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3423 if (NULL == pWdaParams)
3424 {
3425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3426 "%s: VOS MEM Alloc Failure", __func__);
3427 VOS_ASSERT(0);
3428 vos_mem_free(wdiSwitchChanParam);
3429 return VOS_STATUS_E_NOMEM;
3430 }
3431 wdiSwitchChanParam->wdiChInfo.channelSwitchSrc =
3432 pSwitchChanParams->channelSwitchSrc;
3433
3434 wdiSwitchChanParam->wdiChInfo.ucChannel =
3435 pSwitchChanParams->channelNumber;
3436#ifndef WLAN_FEATURE_VOWIFI
3437 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3438 pSwitchChanParams->localPowerConstraint;
3439#endif
3440 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3441 pSwitchChanParams->secondaryChannelOffset;
3442 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
3443 /* Store req pointer, as this will be used for response */
3444 /* store Params pass it to WDI */
3445 pWdaParams->pWdaContext = pWDA;
3446 pWdaParams->wdaMsgParam = pSwitchChanParams;
3447 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
3448#ifdef WLAN_FEATURE_VOWIFI
3449 wdiSwitchChanParam->wdiChInfo.cMaxTxPower =
3450 pSwitchChanParams->maxTxPower;
3451 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3452 pSwitchChanParams ->selfStaMacAddr,
3453 sizeof(tSirMacAddr));
3454#endif
3455 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3456 pSwitchChanParams->bssId,
3457 sizeof(tSirMacAddr));
3458
3459 status = WDI_SwitchChReq_V1(wdiSwitchChanParam,
3460 (WDI_SwitchChRspCb_V1)WDA_SwitchChannelReqCallback_V1,
3461 pWdaParams);
3462 if (IS_WDI_STATUS_FAILURE(status))
3463 {
3464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3465 "Failure in process channel switch Req WDI "
3466 "API, free all the memory " );
3467 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3468 vos_mem_free(pWdaParams) ;
3469 pSwitchChanParams->status = eSIR_FAILURE ;
3470 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3471 (void *)pSwitchChanParams, 0) ;
3472 }
3473 return CONVERT_WDI2VOS_STATUS(status) ;
3474}
3475
Jeff Johnson295189b2012-06-20 16:38:30 -07003476/*
3477 * FUNCTION: WDA_ConfigBssReqCallback
3478 * config BSS Req Callback, called by WDI
3479 */
3480void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
3481 ,void* pUserData)
3482{
3483 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3484 tWDA_CbContext *pWDA;
3485 tAddBssParams *configBssReqParam;
3486 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003488 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003489 if(NULL == pWdaParams)
3490 {
3491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003492 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003493 VOS_ASSERT(0) ;
3494 return ;
3495 }
3496 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3497 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
3498 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003499 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003500 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003501 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
3502 {
3503 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
3504 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003505 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
3506 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
3507 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
3508
3509 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
3510 {
3511 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
3512 {
3513 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
3514 staConfigBssParam->staType = STA_ENTRY_BSSID;
3515 }
3516 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
3517 (staConfigBssParam->staType == STA_ENTRY_SELF))
3518 {
3519 /* This is the 1st add BSS Req for the BTAMP STA */
3520 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3521 staConfigBssParam->staType = STA_ENTRY_BSSID;
3522 }
3523 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3524 (staConfigBssParam->staType == STA_ENTRY_PEER))
3525 {
3526 /* This is the 2nd ADD BSS Request that is sent
3527 * on the BTAMP STA side. The Sta type is
3528 * set to STA_ENTRY_PEER here.*/
3529 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3530 }
3531 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3532 (staConfigBssParam->staType == STA_ENTRY_SELF))
3533 {
3534 /* statype is already set by PE.
3535 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
3536 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
3537 staConfigBssParam->staType = STA_ENTRY_BSSID;
3538 }
3539 else
3540 {
3541 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
3542 staConfigBssParam->staType = STA_ENTRY_PEER;
3543 }
3544 }
3545 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
3546 {
3547 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
3548 staConfigBssParam->staType = STA_ENTRY_SELF;
3549 }
3550 else
3551 {
3552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3553 "Invalid operation mode specified");
3554 VOS_ASSERT(0);
3555 }
3556
3557 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003558 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003559 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003560 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003561 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
3562 sizeof(tSirMacAddr));
3563 staConfigBssParam->txChannelWidthSet =
3564 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07003565 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
3566 staConfigBssParam->htCapable)
3567 {
3568 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
3569 wdiConfigBssRsp->ucBSSIdx;
3570 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
3571 WDA_VALID_STA_INDEX ;
Abhishek Singh0644e482014-10-06 18:38:23 +05303572 pWDA->wdaStaInfo[staConfigBssParam->staIdx].currentOperChan =
3573 configBssReqParam->currentOperChannel;
Jeff Johnson295189b2012-06-20 16:38:30 -07003574 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003575 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
3576 wdiConfigBssRsp->ucBSSIdx,
3577 wdiConfigBssRsp->ucSTAIdx))
3578 {
3579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003580 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003581 VOS_ASSERT(0) ;
3582 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003583 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
3584 {
3585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003586 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003587 VOS_ASSERT(0) ;
3588 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003589#ifdef WLAN_FEATURE_VOWIFI
3590 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
3591#endif
3592 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05303593 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
3594 sizeof(WDI_ConfigBSSReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07003595 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3596 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003597 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003598 return ;
3599}
Jeff Johnson295189b2012-06-20 16:38:30 -07003600/*
3601 * FUNCTION: WDA_UpdateEdcaParamsForAC
3602 * Update WDI EDCA params with PE edca params
3603 */
3604void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
3605 WDI_EdcaParamRecord *wdiEdcaParam,
3606 tSirMacEdcaParamRecord *macEdcaParam)
3607{
3608 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
3609 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
3610 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
3611 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
3612 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
3613 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
3614}
Jeff Johnson295189b2012-06-20 16:38:30 -07003615/*
3616 * FUNCTION: WDA_ProcessConfigBssReq
3617 * Configure BSS before starting Assoc with AP
3618 */
3619VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
3620 tAddBssParams* configBssReqParam)
3621{
3622 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303623 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003624 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003626 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303627 if (NULL == configBssReqParam)
3628 {
3629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3630 "%s: configBssReqParam is NULL", __func__);
3631 return VOS_STATUS_E_INVAL;
3632 }
3633
3634 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
3635 sizeof(WDI_ConfigBSSReqParamsType)) ;
3636
Jeff Johnson295189b2012-06-20 16:38:30 -07003637 if(NULL == wdiConfigBssReqParam)
3638 {
3639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003640 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003641 VOS_ASSERT(0);
3642 return VOS_STATUS_E_NOMEM;
3643 }
3644 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3645 if(NULL == pWdaParams)
3646 {
3647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003648 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003649 VOS_ASSERT(0);
3650 vos_mem_free(wdiConfigBssReqParam);
3651 return VOS_STATUS_E_NOMEM;
3652 }
Kiran4a17ebe2013-01-31 10:43:43 -08003653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3654 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07003655 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003656 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
3657 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003658 /* Store Init Req pointer, as this will be used for response */
3659 /* store Params pass it to WDI */
3660 pWdaParams->pWdaContext = pWDA;
3661 pWdaParams->wdaMsgParam = configBssReqParam;
3662 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003663 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
3664 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003665 if(IS_WDI_STATUS_FAILURE(status))
3666 {
3667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3668 "Failure in Config BSS WDI API, free all the memory " );
3669 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3670 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003671 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003672 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
3673 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003674 return CONVERT_WDI2VOS_STATUS(status) ;
3675}
Jeff Johnson295189b2012-06-20 16:38:30 -07003676#ifdef ENABLE_HAL_COMBINED_MESSAGES
3677/*
3678 * FUNCTION: WDA_PostAssocReqCallback
3679 * Post ASSOC req callback, send RSP back to PE
3680 */
3681void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
3682 void* pUserData)
3683{
3684 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3685 tPostAssocParams *postAssocReqParam =
3686 (tPostAssocParams *)pWDA->wdaMsgParam ;
3687 /*STA context within the BSS Params*/
3688 tAddStaParams *staPostAssocParam =
3689 &postAssocReqParam->addBssParams.staContext ;
3690 /*STA Params for self STA*/
3691 tAddStaParams *selfStaPostAssocParam =
3692 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003694 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003695 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003696 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003697 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
3698 {
3699 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
3700 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
3701 sizeof(tSirMacAddr)) ;
3702 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
3703 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
3704 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003705 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
3706 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05303707 vos_mem_zero(pWDA->wdaWdiApiMsgParam, sizeof(WDI_PostAssocReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07003708 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3709 pWDA->wdaWdiApiMsgParam = NULL;
3710 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003711 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003712 return ;
3713}
Jeff Johnson295189b2012-06-20 16:38:30 -07003714/*
3715 * FUNCTION: WDA_ProcessPostAssocReq
3716 * Trigger POST ASSOC processing in WDI
3717 */
3718VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
3719 tPostAssocParams *postAssocReqParam)
3720{
Jeff Johnson295189b2012-06-20 16:38:30 -07003721 WDI_Status status = WDI_STATUS_SUCCESS ;
3722
3723 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
3724 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
3725 sizeof(WDI_PostAssocReqParamsType)) ;
3726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003727 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003728
Jeff Johnson295189b2012-06-20 16:38:30 -07003729 if(NULL == wdiPostAssocReqParam)
3730 {
3731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003732 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003733 VOS_ASSERT(0);
3734 return VOS_STATUS_E_NOMEM;
3735 }
3736
3737 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
3738 {
3739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003740 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003741 VOS_ASSERT(0);
3742 return VOS_STATUS_E_FAILURE;
3743 }
3744
Jeff Johnson295189b2012-06-20 16:38:30 -07003745 /* update BSS params into WDI structure */
3746 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3747 &postAssocReqParam->addBssParams) ;
3748 /* update STA params into WDI structure */
3749 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3750 &postAssocReqParam->addStaParams) ;
3751
3752 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3753 postAssocReqParam->addBssParams.highPerformance;
3754 WDA_UpdateEdcaParamsForAC(pWDA,
3755 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3756 &postAssocReqParam->addBssParams.acbe);
3757 WDA_UpdateEdcaParamsForAC(pWDA,
3758 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3759 &postAssocReqParam->addBssParams.acbk);
3760 WDA_UpdateEdcaParamsForAC(pWDA,
3761 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3762 &postAssocReqParam->addBssParams.acvi);
3763 WDA_UpdateEdcaParamsForAC(pWDA,
3764 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3765 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003766 /* Store Init Req pointer, as this will be used for response */
3767 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003768 /* store Params pass it to WDI */
3769 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003770 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3771 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003772 if(IS_WDI_STATUS_FAILURE(status))
3773 {
3774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3775 "Failure in Post Assoc WDI API, free all the memory " );
3776 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3777 pWDA->wdaWdiApiMsgParam = NULL;
3778 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003779 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003780 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3781 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003782 return CONVERT_WDI2VOS_STATUS(status) ;
3783}
3784#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003785/*
3786 * FUNCTION: WDA_AddStaReqCallback
3787 * ADD STA req callback, send RSP back to PE
3788 */
3789void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3790 void* pUserData)
3791{
3792 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3793 tWDA_CbContext *pWDA;
3794 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003796 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003797 if(NULL == pWdaParams)
3798 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003800 VOS_ASSERT(0) ;
3801 return ;
3802 }
3803 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3804 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003805 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003806 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003807 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3808 {
3809 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3810 /*TODO: UMAC structure doesn't have these fields*/
3811 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3812 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3813 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3814 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3815 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3816 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003817#ifdef FEATURE_WLAN_TDLS
3818 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3819 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3820#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003821 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003822#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003823 {
3824 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3825 wdiConfigStaRsp->ucBssIdx;
3826 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3827 WDA_VALID_STA_INDEX ;
Abhishek Singhf08a82b2014-10-07 11:00:42 +05303828 pWDA->wdaStaInfo[addStaReqParam->staIdx].currentOperChan =
3829 addStaReqParam->currentOperChan;
Jeff Johnson295189b2012-06-20 16:38:30 -07003830 }
3831 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3832 {
3833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003834 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003835 VOS_ASSERT(0) ;
3836 return ;
3837 }
3838 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003839 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3840 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003841 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003842 return ;
3843}
Jeff Johnson295189b2012-06-20 16:38:30 -07003844/*
3845 * FUNCTION: WDA_ConfigStaReq
3846 * Trigger Config STA processing in WDI
3847 */
3848VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3849 tAddStaParams *addStaReqParam)
3850{
Jeff Johnson295189b2012-06-20 16:38:30 -07003851 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003852 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3853 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3854 sizeof(WDI_ConfigSTAReqParamsType)) ;
3855 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003857 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003858 if(NULL == wdiConfigStaReqParam)
3859 {
3860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003861 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003862 VOS_ASSERT(0);
3863 return VOS_STATUS_E_NOMEM;
3864 }
3865 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3866 if(NULL == pWdaParams)
3867 {
3868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003869 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003870 VOS_ASSERT(0);
3871 vos_mem_free(wdiConfigStaReqParam);
3872 return VOS_STATUS_E_NOMEM;
3873 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003874 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003875 /* update STA params into WDI structure */
3876 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3877 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003878 /* Store Init Req pointer, as this will be used for response */
3879 /* store Params pass it to WDI */
3880 pWdaParams->pWdaContext = pWDA;
3881 pWdaParams->wdaMsgParam = addStaReqParam;
3882 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003883 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3884 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003885 if(IS_WDI_STATUS_FAILURE(status))
3886 {
3887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3888 "Failure in Config STA WDI API, free all the memory " );
3889 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3890 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003891 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003892 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3893 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003894 return CONVERT_WDI2VOS_STATUS(status) ;
3895}
Jeff Johnson295189b2012-06-20 16:38:30 -07003896/*
3897 * FUNCTION: WDA_DelBSSReqCallback
3898 * Dens DEL BSS RSP back to PE
3899 */
3900void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3901 void* pUserData)
3902{
3903 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3904 tWDA_CbContext *pWDA;
3905 tDeleteBssParams *delBssReqParam;
3906 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003908 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003909 if(NULL == pWdaParams)
3910 {
3911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003912 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003913 VOS_ASSERT(0) ;
3914 return ;
3915 }
3916 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3917 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003918 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003919 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3920 {
3921 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3922 sizeof(tSirMacAddr)) ;
3923 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003924 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3925 {
3926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003927 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003928 VOS_ASSERT(0) ;
3929 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003930 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3931 {
3932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003933 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003934 VOS_ASSERT(0) ;
3935 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003936 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3937 {
3938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003939 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003940 VOS_ASSERT(0) ;
3941 }
Mihir Shete2ab1d492014-06-04 14:21:05 +05303942
3943 WLANTL_StartForwarding(staIdx,0,0);
3944
Jeff Johnson295189b2012-06-20 16:38:30 -07003945 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3946 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003947 /* reset the the system role*/
3948 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3949
3950 /* Reset the BA related information */
3951 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3952 {
3953 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3954 {
3955 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3956 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05303957 pWDA->wdaStaInfo[staIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003958 /* Reset framesTxed counters here */
3959 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3960 {
3961 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3962 }
3963 }
3964 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003965 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003966 return ;
3967}
3968
Jeff Johnson295189b2012-06-20 16:38:30 -07003969/*
3970 * FUNCTION: WDA_ProcessDelBssReq
3971 * Init DEL BSS req with WDI
3972 */
3973VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3974 tDeleteBssParams *delBssParam)
3975{
3976 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003977 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3978 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3979 sizeof(WDI_DelBSSReqParamsType)) ;
3980 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003982 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003983 if(NULL == wdiDelBssReqParam)
3984 {
3985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003986 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003987 VOS_ASSERT(0);
3988 return VOS_STATUS_E_NOMEM;
3989 }
3990 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3991 if(NULL == pWdaParams)
3992 {
3993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003994 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003995 VOS_ASSERT(0);
3996 vos_mem_free(wdiDelBssReqParam);
3997 return VOS_STATUS_E_NOMEM;
3998 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003999 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
4000 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
4001
4002 /* Store Init Req pointer, as this will be used for response */
4003 /* store Params pass it to WDI */
4004 pWdaParams->pWdaContext = pWDA;
4005 pWdaParams->wdaMsgParam = delBssParam;
4006 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004007 status = WDI_DelBSSReq(wdiDelBssReqParam,
4008 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004009 if(IS_WDI_STATUS_FAILURE(status))
4010 {
4011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4012 "Failure in Del BSS WDI API, free all the memory " );
4013 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4014 vos_mem_free(pWdaParams) ;
4015 delBssParam->status = eSIR_FAILURE ;
4016 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
4017 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004018 return CONVERT_WDI2VOS_STATUS(status) ;
4019}
Jeff Johnson295189b2012-06-20 16:38:30 -07004020/*
4021 * FUNCTION: WDA_DelSTAReqCallback
4022 * Dens DEL STA RSP back to PE
4023 */
4024void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
4025 void* pUserData)
4026{
4027 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4028 tWDA_CbContext *pWDA;
4029 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004031 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004032 if(NULL == pWdaParams)
4033 {
4034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004035 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004036 VOS_ASSERT(0) ;
4037 return ;
4038 }
4039 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4040 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004041 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004042 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
4043 {
4044 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
4045 {
4046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004047 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004048 VOS_ASSERT(0) ;
4049 }
4050 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
Mihir Shete2ab1d492014-06-04 14:21:05 +05304051 WLANTL_StartForwarding(delStaReqParam->staIdx,0,0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004052 }
4053 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4054 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004055 /*Reset the BA information corresponding to this STAIdx */
4056 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
4057 WDA_INVALID_STA_INDEX;
4058 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304059 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004060 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004061 return ;
4062}
Jeff Johnson295189b2012-06-20 16:38:30 -07004063/*
4064 * FUNCTION: WDA_ProcessDelStaReq
4065 * Init DEL STA req with WDI
4066 */
4067VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
4068 tDeleteStaParams *delStaParam)
4069{
4070 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004071 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
4072 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
4073 sizeof(WDI_DelSTAReqParamsType)) ;
4074 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004076 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004077 if(NULL == wdiDelStaReqParam)
4078 {
4079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004080 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004081 VOS_ASSERT(0);
4082 return VOS_STATUS_E_NOMEM;
4083 }
4084 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4085 if(NULL == pWdaParams)
4086 {
4087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004088 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004089 VOS_ASSERT(0);
4090 vos_mem_free(wdiDelStaReqParam);
4091 return VOS_STATUS_E_NOMEM;
4092 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004093 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
4094 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004095 /* Store Init Req pointer, as this will be used for response */
4096 /* store Params pass it to WDI */
4097 pWdaParams->pWdaContext = pWDA;
4098 pWdaParams->wdaMsgParam = delStaParam;
4099 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004100 status = WDI_DelSTAReq(wdiDelStaReqParam,
4101 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004102 if(IS_WDI_STATUS_FAILURE(status))
4103 {
4104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4105 "Failure in Del STA WDI API, free all the memory status = %d",
4106 status );
4107 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4108 vos_mem_free(pWdaParams) ;
4109 delStaParam->status = eSIR_FAILURE ;
4110 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
4111 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004112 return CONVERT_WDI2VOS_STATUS(status) ;
4113}
Jeff Johnson295189b2012-06-20 16:38:30 -07004114void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
4115{
4116 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4117 tWDA_CbContext *pWDA;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304118 tAddStaSelfParams *pAddStaSelfRsp = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004120 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004121 if(NULL == pWdaParams)
4122 {
4123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004124 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004125 VOS_ASSERT(0) ;
4126 return ;
4127 }
4128 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4129 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004130 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4131 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004132 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
4133 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
4134 pwdiAddSTASelfRsp->macSelfSta,
4135 sizeof(pAddStaSelfRsp->selfMacAddr));
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304136 pWDA->wdaAddSelfStaParams.ucSTASelfIdx = pwdiAddSTASelfRsp->ucSTASelfIdx;
4137 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaRspCounter++;
4138 if (pAddStaSelfRsp->status == eSIR_FAILURE)
4139 {
4140 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_RSP_WDI_FAIL;
4141 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
4142 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004143 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004144 return ;
4145}
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304146
Jeff Johnson295189b2012-06-20 16:38:30 -07004147/*
4148 * FUNCTION: WDA_ProcessAddStaSelfReq
4149 *
4150 */
4151VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
4152{
4153 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004154 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004155 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
4156 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
4157 sizeof(WDI_AddSTASelfReqParamsType)) ;
4158 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004160 "------> %s " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304161 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaReqCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004162 if( NULL == wdiAddStaSelfReq )
4163 {
4164 VOS_ASSERT( 0 );
4165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004166 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304167 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4168 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004169 return( VOS_STATUS_E_NOMEM );
4170 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004171 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004172 if( NULL == pWdaParams )
4173 {
4174 VOS_ASSERT( 0 );
4175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004176 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304177 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4178 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004179 vos_mem_free(wdiAddStaSelfReq) ;
4180 return( VOS_STATUS_E_NOMEM );
4181 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004182 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004183 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07004184 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004185 /* Store Init Req pointer, as this will be used for response */
4186 /* store Params pass it to WDI */
4187 pWdaParams->pWdaContext = pWDA;
4188 pWdaParams->wdaMsgParam = pAddStaSelfReq;
4189 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07004190 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004191
Jeff Johnson43971f52012-07-17 12:26:56 -07004192 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004193 {
4194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4195 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07004196 wstatus );
4197 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004198 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4199 vos_mem_free(pWdaParams) ;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304200 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_WDI_FAIL;
4201 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004202 pAddStaSelfReq->status = eSIR_FAILURE ;
4203 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
4204 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004205 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004206}
Jeff Johnson295189b2012-06-20 16:38:30 -07004207/*
4208 * FUNCTION: WDA_DelSTASelfRespCallback
4209 *
4210 */
4211void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
4212 wdiDelStaSelfRspParams , void* pUserData)
4213{
4214 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4215 tWDA_CbContext *pWDA;
4216 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004218 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004219 if (NULL == pWdaParams)
4220 {
4221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004222 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004223 VOS_ASSERT(0);
4224 return;
4225 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004226 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4227 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004228 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004229 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004230
4231 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4232 vos_mem_free(pWdaParams) ;
4233
4234 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004235 return ;
4236}
Jeff Johnson295189b2012-06-20 16:38:30 -07004237/*
4238 * FUNCTION: WDA_DelSTASelfReqCallback
4239 *
4240 */
4241void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
4242 void* pUserData)
4243{
4244 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4245 tWDA_CbContext *pWDA;
4246 tDelStaSelfParams *delStaSelfParams;
4247
4248 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05304249 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004250 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004251
4252 if (NULL == pWdaParams)
4253 {
4254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004255 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004256 VOS_ASSERT(0);
4257 return;
4258 }
4259
4260 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4261 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
4262
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004263 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004264
4265 if(IS_WDI_STATUS_FAILURE(wdiStatus))
4266 {
4267 VOS_ASSERT(0);
4268 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4269 vos_mem_free(pWdaParams) ;
4270 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
4271 }
4272
4273 return ;
4274}
4275
4276/*
4277 * FUNCTION: WDA_DelSTASelfReq
4278 * Trigger Config STA processing in WDI
4279 */
4280VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
4281 tDelStaSelfParams* pDelStaSelfReqParam)
4282{
4283 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004284 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004285 tWDA_ReqParams *pWdaParams = NULL;
4286 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
4287 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
4288 sizeof(WDI_DelSTASelfReqParamsType)) ;
4289
Jeff Johnson295189b2012-06-20 16:38:30 -07004290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004291 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004292 if( NULL == wdiDelStaSelfReq )
4293 {
4294 VOS_ASSERT( 0 );
4295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004296 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004297 return( VOS_STATUS_E_NOMEM );
4298 }
4299
4300 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4301 if( NULL == pWdaParams )
4302 {
4303 VOS_ASSERT( 0 );
4304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004305 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004306 vos_mem_free(wdiDelStaSelfReq) ;
4307 return( VOS_STATUS_E_NOMEM );
4308 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004309 pWdaParams->pWdaContext = pWDA;
4310 /* Store param pointer as passed in by caller */
4311 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
4312 /* store Params pass it to WDI */
4313 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07004314 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
4315 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
4316
4317 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
4318 wdiDelStaSelfReq->pUserData = pWdaParams;
4319
Jeff Johnson43971f52012-07-17 12:26:56 -07004320 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07004321 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
4322
Jeff Johnson43971f52012-07-17 12:26:56 -07004323 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004324 {
4325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
4326 "Failure in Del Sta Self REQ WDI API, free all the memory " );
4327 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07004328 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004329 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4330 vos_mem_free(pWdaParams) ;
4331 pDelStaSelfReqParam->status = eSIR_FAILURE ;
4332 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
4333 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004334 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004335}
4336
Jeff Johnson295189b2012-06-20 16:38:30 -07004337/*
4338 * FUNCTION: WDA_SendMsg
4339 * Send Message back to PE
4340 */
4341void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
4342 void *pBodyptr, tANI_U32 bodyVal)
4343{
4344 tSirMsgQ msg = {0} ;
4345 tANI_U32 status = VOS_STATUS_SUCCESS ;
4346 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07004347 msg.type = msgType;
4348 msg.bodyval = bodyVal;
4349 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07004350 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07004351 if (VOS_STATUS_SUCCESS != status)
4352 {
4353 if(NULL != pBodyptr)
4354 {
4355 vos_mem_free(pBodyptr);
4356 }
4357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004358 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004359 VOS_ASSERT(0) ;
4360 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004361 return ;
4362}
Jeff Johnson295189b2012-06-20 16:38:30 -07004363/*
4364 * FUNCTION: WDA_UpdateBSSParams
4365 * Translated WDA/PE BSS info into WDI BSS info..
4366 */
4367void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
4368 WDI_ConfigBSSReqInfoType *wdiBssParams,
4369 tAddBssParams *wdaBssParams)
4370{
4371 v_U8_t keyIndex = 0;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304372 v_U8_t i = 0;
4373
Jeff Johnson295189b2012-06-20 16:38:30 -07004374 /* copy bssReq Params to WDI structure */
4375 vos_mem_copy(wdiBssParams->macBSSID,
4376 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
4377 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
4378 sizeof(tSirMacAddr)) ;
4379 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
4380 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
4381 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004382 wdiBssParams->ucShortSlotTimeSupported =
4383 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004384 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
4385 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
4386 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
4387 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
4388 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
4389
4390 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
4391 wdiBssParams->ucTXOPProtectionFullSupport =
4392 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004393 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
4394 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004395 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004396 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
4397 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
4398 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
4399 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
4400
Chet Lanctot186b5732013-03-18 10:26:30 -07004401 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
4402
Jeff Johnson295189b2012-06-20 16:38:30 -07004403 /* copy SSID into WDI structure */
4404 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
4405 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
4406 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004407 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
4408 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004409 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07004410#ifdef WLAN_FEATURE_VOWIFI
4411 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
4412#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004413 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07004414 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07004415#ifdef WLAN_FEATURE_VOWIFI_11R
4416 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004417 if(wdiBssParams->bExtSetStaKeyParamValid)
4418 {
4419 /* copy set STA key params to WDI structure */
4420 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
4421 wdaBssParams->extSetStaKeyParam.staIdx;
4422 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
4423 wdaBssParams->extSetStaKeyParam.encType;
4424 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
4425 wdaBssParams->extSetStaKeyParam.wepType;
4426 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
4427 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004428 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
4429 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004430 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004431 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
4432 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4433 {
4434 WDA_GetWepKeysFromCfg( pWDA,
4435 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
4436 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
4437 wdiBssParams->wdiExtSetKeyParam.wdiKey );
4438 }
4439 else
4440 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004441 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4442 keyIndex++)
4443 {
4444 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
4445 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
4446 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
4447 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
4448 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
4449 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304450
4451 if(WDA_getHostWlanFeatCaps(DISA) && WDA_getFwWlanFeatCaps(DISA))
4452 {
4453 for (i = 0; i < WLAN_MAX_KEY_RSC_LEN; i ++)
4454 {
4455 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc[i] =
4456 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc[i]);
4457 }
4458
4459 for (i = 0; i < SIR_MAC_MAX_KEY_LENGTH; i++)
4460 {
4461 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key[i] =
4462 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].key[i]);
4463 }
4464 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4465 FL("%s: Negated Keys"), __func__);
4466 }
4467 else
4468 {
4469 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4470 FL("%s: No change in Keys "), __func__);
4471 vos_mem_copy(
4472 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
4473 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc,
4474 WLAN_MAX_KEY_RSC_LEN);
4475 vos_mem_copy(
4476 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
4477 wdaBssParams->extSetStaKeyParam.key[keyIndex].key,
4478 SIR_MAC_MAX_KEY_LENGTH);
4479 }
4480
Jeff Johnson295189b2012-06-20 16:38:30 -07004481 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
4482 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
4483 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
4484 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07004485 }
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304486 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
Jeff Johnson295189b2012-06-20 16:38:30 -07004487 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004488 }
4489 }
4490 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
4491 }
4492 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
4493 {
4494 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
4495 sizeof(wdaBssParams->extSetStaKeyParam) );
4496 }
4497#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07004498#ifdef WLAN_FEATURE_11AC
4499 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
4500 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
4501#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004502
4503 return ;
4504}
Jeff Johnson295189b2012-06-20 16:38:30 -07004505/*
4506 * FUNCTION: WDA_UpdateSTAParams
4507 * Translated WDA/PE BSS info into WDI BSS info..
4508 */
4509void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
4510 WDI_ConfigStaReqInfoType *wdiStaParams,
4511 tAddStaParams *wdaStaParams)
4512{
4513 tANI_U8 i = 0;
4514 /* Update STA params */
4515 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
4516 sizeof(tSirMacAddr)) ;
4517 wdiStaParams->usAssocId = wdaStaParams->assocId;
4518 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07004519 wdiStaParams->staIdx = wdaStaParams->staIdx;
4520
Jeff Johnson295189b2012-06-20 16:38:30 -07004521 wdiStaParams->ucShortPreambleSupported =
4522 wdaStaParams->shortPreambleSupported;
4523 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
4524 sizeof(tSirMacAddr)) ;
4525 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
4526
4527 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
4528
4529 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
4530 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
4531 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
4532 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
4533 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
4534 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
4535 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
4536
4537 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
4538 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07004539 wdiStaParams->wdiSupportedRates.opRateMode =
4540 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004541 for(i = 0;i < WDI_NUM_11B_RATES;i++)
4542 {
4543 wdiStaParams->wdiSupportedRates.llbRates[i] =
4544 wdaStaParams->supportedRates.llbRates[i];
4545 }
4546 for(i = 0;i < WDI_NUM_11A_RATES;i++)
4547 {
4548 wdiStaParams->wdiSupportedRates.llaRates[i] =
4549 wdaStaParams->supportedRates.llaRates[i];
4550 }
4551 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
4552 {
4553 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
4554 wdaStaParams->supportedRates.aniLegacyRates[i];
4555 }
4556 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
4557 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07004558#ifdef WLAN_FEATURE_11AC
4559 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
4560 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
4561 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
4562 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
4563#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004564 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
4565 {
4566 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
4567 wdaStaParams->supportedRates.supportedMCSSet[i];
4568 }
4569 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
4570 wdaStaParams->supportedRates.rxHighestDataRate;
4571
4572 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
4573
4574 wdiStaParams->wdiAction = wdaStaParams->updateSta;
4575
4576 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
4577 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
4578 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
4579
4580 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
4581 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
4582 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
4583 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07004584 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07004585#ifdef WLAN_FEATURE_11AC
4586 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
4587 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08004588 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Abhishek Singh6927fa02014-06-27 17:19:55 +05304589 wdiStaParams->vhtTxMUBformeeCapable = wdaStaParams->vhtTxMUBformeeCapable;
4590 /* When MU vhtTxMUBformeeCapable is set, SU ucVhtTxBFEnabled
4591 * must be set by default */
4592 if ( wdiStaParams->vhtTxMUBformeeCapable )
4593 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxMUBformeeCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07004594#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08004595 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
4596 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07004597 return ;
4598}
Jeff Johnson295189b2012-06-20 16:38:30 -07004599/*
4600 * -------------------------------------------------------------------------
4601 * CFG update to WDI
4602 * -------------------------------------------------------------------------
4603 */
4604
4605 /*
4606 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
4607 * Convert the WNI CFG ID to HAL CFG ID
4608 */
Jeff Johnsone7245742012-09-05 17:12:55 -07004609static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07004610{
4611 switch(wniCfgId)
4612 {
4613 case WNI_CFG_STA_ID:
4614 return QWLAN_HAL_CFG_STA_ID;
4615 case WNI_CFG_CURRENT_TX_ANTENNA:
4616 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
4617 case WNI_CFG_CURRENT_RX_ANTENNA:
4618 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
4619 case WNI_CFG_LOW_GAIN_OVERRIDE:
4620 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
4621 case WNI_CFG_POWER_STATE_PER_CHAIN:
4622 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
4623 case WNI_CFG_CAL_PERIOD:
4624 return QWLAN_HAL_CFG_CAL_PERIOD;
4625 case WNI_CFG_CAL_CONTROL:
4626 return QWLAN_HAL_CFG_CAL_CONTROL;
4627 case WNI_CFG_PROXIMITY:
4628 return QWLAN_HAL_CFG_PROXIMITY;
4629 case WNI_CFG_NETWORK_DENSITY:
4630 return QWLAN_HAL_CFG_NETWORK_DENSITY;
4631 case WNI_CFG_MAX_MEDIUM_TIME:
4632 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
4633 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
4634 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
4635 case WNI_CFG_RTS_THRESHOLD:
4636 return QWLAN_HAL_CFG_RTS_THRESHOLD;
4637 case WNI_CFG_SHORT_RETRY_LIMIT:
4638 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
4639 case WNI_CFG_LONG_RETRY_LIMIT:
4640 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
4641 case WNI_CFG_FRAGMENTATION_THRESHOLD:
4642 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
4643 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
4644 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
4645 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
4646 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
4647 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
4648 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
4649 case WNI_CFG_FIXED_RATE:
4650 return QWLAN_HAL_CFG_FIXED_RATE;
4651 case WNI_CFG_RETRYRATE_POLICY:
4652 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
4653 case WNI_CFG_RETRYRATE_SECONDARY:
4654 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
4655 case WNI_CFG_RETRYRATE_TERTIARY:
4656 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
4657 case WNI_CFG_FORCE_POLICY_PROTECTION:
4658 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
4659 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
4660 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
4661 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
4662 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
4663 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
4664 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
4665 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
4666 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
4667 case WNI_CFG_MAX_BA_SESSIONS:
4668 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
4669 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
4670 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
4671 case WNI_CFG_PS_ENABLE_BCN_FILTER:
4672 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
4673 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
4674 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
4675 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
4676 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
4677 case WNI_CFG_STATS_PERIOD:
4678 return QWLAN_HAL_CFG_STATS_PERIOD;
4679 case WNI_CFG_CFP_MAX_DURATION:
4680 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
4681#if 0 /*This is not part of CFG*/
4682 case WNI_CFG_FRAME_TRANS_ENABLED:
4683 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
4684#endif
4685 case WNI_CFG_DTIM_PERIOD:
4686 return QWLAN_HAL_CFG_DTIM_PERIOD;
4687 case WNI_CFG_EDCA_WME_ACBK:
4688 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
4689 case WNI_CFG_EDCA_WME_ACBE:
4690 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
4691 case WNI_CFG_EDCA_WME_ACVI:
4692 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
4693 case WNI_CFG_EDCA_WME_ACVO:
4694 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
4695#if 0
4696 case WNI_CFG_TELE_BCN_WAKEUP_EN:
4697 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
4698 case WNI_CFG_TELE_BCN_TRANS_LI:
4699 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
4700 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
4701 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
4702 case WNI_CFG_TELE_BCN_MAX_LI:
4703 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
4704 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
4705 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
4706#endif
4707 case WNI_CFG_ENABLE_CLOSE_LOOP:
4708 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08004709 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
4710 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
Jeff Johnson295189b2012-06-20 16:38:30 -07004711 default:
4712 {
4713 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004714 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07004715 wniCfgId);
4716 return VOS_STATUS_E_INVAL;
4717 }
4718 }
4719}
Jeff Johnson295189b2012-06-20 16:38:30 -07004720/*
4721 * FUNCTION: WDA_UpdateCfgCallback
4722 *
4723 */
4724void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
4725{
4726 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4727 WDI_UpdateCfgReqParamsType *wdiCfgParam =
4728 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004730 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004731 /*
4732 * currently there is no response message is expected between PE and
4733 * WDA, Failure return from WDI is a ASSERT condition
4734 */
4735 if(WDI_STATUS_SUCCESS != wdiStatus)
4736 {
4737 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004738 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07004739 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
4740 }
4741
4742 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
4743 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4744 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004745 return ;
4746}
Jeff Johnson295189b2012-06-20 16:38:30 -07004747/*
4748 * FUNCTION: WDA_UpdateCfg
4749 *
4750 */
4751VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
4752{
4753
4754 WDI_Status status = WDI_STATUS_SUCCESS ;
4755 tANI_U32 val =0;
4756 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
4757 tHalCfg *configData;
4758 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
4759 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07004760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004761 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004762 if (NULL == pMac )
4763 {
4764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004765 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004766 return VOS_STATUS_E_FAILURE;
4767 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004768 if(WDA_START_STATE != pWDA->wdaState)
4769 {
4770 return VOS_STATUS_E_FAILURE;
4771 }
4772
4773 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
4774 {
4775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004776 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004777 VOS_ASSERT(0);
4778 return VOS_STATUS_E_FAILURE;
4779 }
4780
4781 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
4782 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004783 if(NULL == wdiCfgReqParam)
4784 {
4785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004786 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004787 VOS_ASSERT(0);
4788 return VOS_STATUS_E_NOMEM;
4789 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004790 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
4791 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004792 if(NULL == wdiCfgReqParam->pConfigBuffer)
4793 {
4794 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004795 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004796 vos_mem_free(wdiCfgReqParam);
4797 VOS_ASSERT(0);
4798 return VOS_STATUS_E_NOMEM;
4799 }
4800
4801 /*convert the WNI CFG Id to HAL CFG Id*/
4802 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4803 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4804
4805 /*TODO: revisit this for handling string parameters */
4806 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4807 &val) != eSIR_SUCCESS)
4808 {
4809 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004810 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07004811 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4812 vos_mem_free(wdiCfgReqParam);
4813 return eSIR_FAILURE;
4814 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004815 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4816 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4817 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4818 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4819 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4820
4821 /* store Params pass it to WDI */
4822 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004823#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4824 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4825 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004826 if(IS_WDI_STATUS_FAILURE(status))
4827 {
4828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4829 "Failure in Update CFG WDI API, free all the memory " );
4830 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4831 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4832 pWDA->wdaWdiCfgApiMsgParam = NULL;
4833 /* Failure is not expected */
4834 VOS_ASSERT(0) ;
4835 }
4836#else
4837 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4838 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4839 pWDA->wdaWdiCfgApiMsgParam = NULL;
4840#endif
4841 return CONVERT_WDI2VOS_STATUS(status) ;
4842}
4843
Jeff Johnson295189b2012-06-20 16:38:30 -07004844VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4845 v_U8_t *pDefaultKeyId,
4846 v_U8_t *pNumKeys,
4847 WDI_KeysType *pWdiKeys )
4848{
4849 v_U32_t i, j, defKeyId = 0;
4850 v_U32_t val = SIR_MAC_KEY_LENGTH;
4851 VOS_STATUS status = WDI_STATUS_SUCCESS;
4852 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004853 if (NULL == pMac )
4854 {
4855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004856 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004857 return VOS_STATUS_E_FAILURE;
4858 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004859 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4860 &defKeyId ))
4861 {
4862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4863 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4864 }
4865
4866 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004867 /* Need to extract ALL of the configured WEP Keys */
4868 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4869 {
4870 val = SIR_MAC_KEY_LENGTH;
4871 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4872 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4873 pWdiKeys[j].key,
4874 &val ))
4875 {
4876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004877 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07004878 }
4879 else
4880 {
4881 pWdiKeys[j].keyId = (tANI_U8) i;
4882 /*
4883 * Actually, a DC (Don't Care) because
4884 * this is determined (and set) by PE/MLME
4885 */
4886 pWdiKeys[j].unicast = 0;
4887 /*
4888 * Another DC (Don't Care)
4889 */
4890 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4891 /* Another DC (Don't Care). Unused for WEP */
4892 pWdiKeys[j].paeRole = 0;
4893 /* Determined from wlan_cfgGetStr() above.*/
4894 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004895 j++;
4896 *pNumKeys = (tANI_U8) j;
4897 }
4898 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004899 return status;
4900}
Jeff Johnson295189b2012-06-20 16:38:30 -07004901/*
4902 * FUNCTION: WDA_SetBssKeyReqCallback
4903 * send SET BSS key RSP back to PE
4904 */
4905void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4906{
4907 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4908 tWDA_CbContext *pWDA;
4909 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004911 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004912 if(NULL == pWdaParams)
4913 {
4914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004915 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004916 VOS_ASSERT(0) ;
4917 return ;
4918 }
4919 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4920 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05304921 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
4922 sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004923 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4924 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004925 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004926 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004927 return ;
4928}
Jeff Johnson295189b2012-06-20 16:38:30 -07004929/*
4930 * FUNCTION: WDA_ProcessSetBssKeyReq
4931 * Request to WDI for programming the BSS key( key for
4932 * broadcast/multicast frames Encryption)
4933 */
4934VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4935 tSetBssKeyParams *setBssKeyParams )
4936{
4937 WDI_Status status = WDI_STATUS_SUCCESS ;
4938 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4939 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4940 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4941 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004942 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004944 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004945 if(NULL == wdiSetBssKeyParam)
4946 {
4947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004948 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004949 VOS_ASSERT(0);
4950 return VOS_STATUS_E_NOMEM;
4951 }
4952 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4953 if(NULL == pWdaParams)
4954 {
4955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004956 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004957 VOS_ASSERT(0);
4958 vos_mem_free(wdiSetBssKeyParam);
4959 return VOS_STATUS_E_NOMEM;
4960 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004961 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004962 /* copy set BSS params to WDI structure */
4963 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4964 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4965 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004966 if(setBssKeyParams->encType != eSIR_ED_NONE)
4967 {
4968 if( setBssKeyParams->numKeys == 0 &&
4969 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4970 setBssKeyParams->encType == eSIR_ED_WEP104))
4971 {
4972 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004973 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4974 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4975 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4976 }
4977 else
4978 {
4979 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4980 {
4981 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4982 setBssKeyParams->key[keyIndex].keyId;
4983 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
4984 setBssKeyParams->key[keyIndex].unicast;
4985 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
4986 setBssKeyParams->key[keyIndex].keyDirection;
4987 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
4988 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4989 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
4990 setBssKeyParams->key[keyIndex].paeRole;
4991 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
4992 setBssKeyParams->key[keyIndex].keyLength;
4993 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
4994 setBssKeyParams->key[keyIndex].key,
4995 SIR_MAC_MAX_KEY_LENGTH);
4996 }
4997 }
4998 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004999 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
5000 setBssKeyParams->singleTidRc;
5001 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005002 /* Store set key pointer, as this will be used for response */
5003 /* store Params pass it to WDI */
5004 pWdaParams->pWdaContext = pWDA;
5005 pWdaParams->wdaMsgParam = setBssKeyParams;
5006 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005007 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
5008 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
5009
5010 if(IS_WDI_STATUS_FAILURE(status))
5011 {
5012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5013 "Failure in Set BSS Key Req WDI API, free all the memory " );
5014 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5015 vos_mem_free(pWdaParams) ;
5016 setBssKeyParams->status = eSIR_FAILURE ;
5017 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
5018 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005019 return CONVERT_WDI2VOS_STATUS(status) ;
5020}
Jeff Johnson295189b2012-06-20 16:38:30 -07005021/*
5022 * FUNCTION: WDA_RemoveBssKeyReqCallback
5023 * send SET BSS key RSP back to PE
5024 */
5025void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
5026{
5027 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5028 tWDA_CbContext *pWDA;
5029 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005031 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005032 if(NULL == pWdaParams)
5033 {
5034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005035 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005036 VOS_ASSERT(0) ;
5037 return ;
5038 }
5039 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5040 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005041 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5042 vos_mem_free(pWdaParams) ;
5043
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005044 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005045 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005046 return ;
5047}
Siddharth Bhal171788a2014-09-29 21:02:40 +05305048
5049/*
5050 * FUNCTION: WDA_SpoofMacAddrRspCallback
5051 * recieves spoof mac addr response from FW
5052 */
5053void WDA_SpoofMacAddrRspCallback(WDI_SpoofMacAddrRspParamType* wdiRsp, void* pUserData)
5054{
5055 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5056 tWDA_CbContext *pWDA;
Siddharth Bhal029d6732014-10-09 21:31:23 +05305057
Siddharth Bhal171788a2014-09-29 21:02:40 +05305058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5059 "<------ %s " ,__func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305060
Siddharth Bhal171788a2014-09-29 21:02:40 +05305061 if(NULL == pWdaParams)
5062 {
5063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5064 "%s: pWdaParams received NULL", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305065 VOS_ASSERT(0);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305066 return ;
5067 }
Siddharth Bhal171788a2014-09-29 21:02:40 +05305068 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305069
Siddharth Bhal029d6732014-10-09 21:31:23 +05305070 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
Siddharth Bhal171788a2014-09-29 21:02:40 +05305071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhal029d6732014-10-09 21:31:23 +05305072 "%s:Spoofing with rsp status %d", __func__, wdiRsp->wdiStatus);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305073 }
Siddharth Bhal029d6732014-10-09 21:31:23 +05305074 WDA_SendMsg(pWDA, WDA_SPOOF_MAC_ADDR_RSP, NULL,
5075 CONVERT_WDI2SIR_STATUS(wdiRsp->wdiStatus));
Siddharth Bhal171788a2014-09-29 21:02:40 +05305076
Siddharth Bhal171788a2014-09-29 21:02:40 +05305077 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305078 vos_mem_free(pWdaParams->wdaMsgParam);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305079 vos_mem_free(pWdaParams);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305080
5081 return;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305082}
5083
Jeff Johnson295189b2012-06-20 16:38:30 -07005084/*
5085 * FUNCTION: WDA_ProcessRemoveBssKeyReq
5086 * Request to WDI to remove the BSS key( key for broadcast/multicast
5087 * frames Encryption)
5088 */
5089VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
5090 tRemoveBssKeyParams *removeBssKeyParams )
5091{
5092 WDI_Status status = WDI_STATUS_SUCCESS ;
5093 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
5094 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
5095 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
5096 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005098 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005099 if(NULL == wdiRemoveBssKeyParam)
5100 {
5101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005102 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005103 VOS_ASSERT(0);
5104 return VOS_STATUS_E_NOMEM;
5105 }
5106 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5107 if(NULL == pWdaParams)
5108 {
5109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005110 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005111 VOS_ASSERT(0);
5112 vos_mem_free(wdiRemoveBssKeyParam);
5113 return VOS_STATUS_E_NOMEM;
5114 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005115 /* copy Remove BSS key params to WDI structure*/
5116 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
5117 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
5118 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
5119 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
5120 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005121 /* Store remove key pointer, as this will be used for response */
5122 /* store Params pass it to WDI */
5123 pWdaParams->pWdaContext = pWDA;
5124 pWdaParams->wdaMsgParam = removeBssKeyParams;
5125 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005126 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
5127 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005128 if(IS_WDI_STATUS_FAILURE(status))
5129 {
5130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5131 "Failure in Remove BSS Key Req WDI API, free all the memory " );
5132 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5133 vos_mem_free(pWdaParams) ;
5134 removeBssKeyParams->status = eSIR_FAILURE ;
5135 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
5136 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005137 return CONVERT_WDI2VOS_STATUS(status) ;
5138}
Jeff Johnson295189b2012-06-20 16:38:30 -07005139/*
5140 * FUNCTION: WDA_SetBssKeyReqCallback
5141 * send SET BSS key RSP back to PE
5142 */
5143void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
5144{
5145 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5146 tWDA_CbContext *pWDA;
5147 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005149 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005150 if(NULL == pWdaParams)
5151 {
5152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005153 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005154 VOS_ASSERT(0) ;
5155 return ;
5156 }
5157 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5158 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05305159 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
5160 sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005161 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5162 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005163 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005164 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005165 return ;
5166}
Jeff Johnson295189b2012-06-20 16:38:30 -07005167/*
5168 * FUNCTION: WDA_ProcessSetStaKeyReq
5169 * Request to WDI for programming the STA key( key for Unicast frames
5170 * Encryption)
5171 */
5172VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
5173 tSetStaKeyParams *setStaKeyParams )
5174{
5175 WDI_Status status = WDI_STATUS_SUCCESS ;
5176 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5177 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5178 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5179 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005180 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005182 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005183 if(NULL == wdiSetStaKeyParam)
5184 {
5185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005186 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005187 VOS_ASSERT(0);
5188 return VOS_STATUS_E_NOMEM;
5189 }
5190 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5191 if(NULL == pWdaParams)
5192 {
5193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005194 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005195 VOS_ASSERT(0);
5196 vos_mem_free(wdiSetStaKeyParam);
5197 return VOS_STATUS_E_NOMEM;
5198 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005199 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005200 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005201 /* copy set STA key params to WDI structure */
5202 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
5203 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
5204 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
5205 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005206 if(setStaKeyParams->encType != eSIR_ED_NONE)
5207 {
Jeff Johnson43971f52012-07-17 12:26:56 -07005208 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005209 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
5210 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
5211 {
5212 WDA_GetWepKeysFromCfg( pWDA,
5213 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
5214 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
5215 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
5216 }
5217 else
5218 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005219 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5220 keyIndex++)
5221 {
5222 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
5223 setStaKeyParams->key[keyIndex].keyId;
5224 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
5225 setStaKeyParams->key[keyIndex].unicast;
5226 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
5227 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005228 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
5229 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5230 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
5231 setStaKeyParams->key[keyIndex].paeRole;
5232 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
5233 setStaKeyParams->key[keyIndex].keyLength;
5234 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
5235 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
5236 /* set default index to index which have key direction as WDI_TX_DEFAULT */
5237 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
5238 {
5239 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
5240 }
5241 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005242 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
5243 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005244 }
5245 }
5246 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
5247 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005248 /* Store set key pointer, as this will be used for response */
5249 /* store Params pass it to WDI */
5250 pWdaParams->pWdaContext = pWDA;
5251 pWdaParams->wdaMsgParam = setStaKeyParams;
5252 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005253 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
5254 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005255 if(IS_WDI_STATUS_FAILURE(status))
5256 {
5257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5258 "Failure in set STA Key Req WDI API, free all the memory " );
5259 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5260 vos_mem_free(pWdaParams) ;
5261 setStaKeyParams->status = eSIR_FAILURE ;
5262 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
5263 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005264 return CONVERT_WDI2VOS_STATUS(status) ;
5265}
Jeff Johnson295189b2012-06-20 16:38:30 -07005266/*
5267 * FUNCTION: WDA_SetBcastStaKeyReqCallback
5268 * send SET Bcast STA key RSP back to PE
5269 */
5270void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
5271{
5272 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5273 tWDA_CbContext *pWDA;
5274 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005276 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005277 if(NULL == pWdaParams)
5278 {
5279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005280 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005281 VOS_ASSERT(0) ;
5282 return ;
5283 }
5284 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5285 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005286 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5287 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005288 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005289 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005290 return ;
5291}
5292
Jeff Johnson295189b2012-06-20 16:38:30 -07005293/*
5294 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
5295 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
5296 * Encryption)
5297 */
5298VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
5299 tSetStaKeyParams *setStaKeyParams )
5300{
5301 WDI_Status status = WDI_STATUS_SUCCESS ;
5302 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5303 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5304 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5305 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005306 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005308 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005309 if(NULL == wdiSetStaKeyParam)
5310 {
5311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005312 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005313 VOS_ASSERT(0);
5314 return VOS_STATUS_E_NOMEM;
5315 }
5316 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5317 if(NULL == pWdaParams)
5318 {
5319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005320 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005321 VOS_ASSERT(0);
5322 vos_mem_free(wdiSetStaKeyParam);
5323 return VOS_STATUS_E_NOMEM;
5324 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005325 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005326 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005327 /* copy set STA key params to WDI structure */
5328 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
5329 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
5330 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
5331 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005332 if(setStaKeyParams->encType != eSIR_ED_NONE)
5333 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005334 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5335 keyIndex++)
5336 {
5337 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
5338 setStaKeyParams->key[keyIndex].keyId;
5339 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
5340 setStaKeyParams->key[keyIndex].unicast;
5341 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
5342 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005343 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
5344 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5345 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
5346 setStaKeyParams->key[keyIndex].paeRole;
5347 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
5348 setStaKeyParams->key[keyIndex].keyLength;
5349 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
5350 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
5351 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005352 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
5353 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005354 }
5355 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07005356 /* Store set key pointer, as this will be used for response */
5357 /* store Params pass it to WDI */
5358 pWdaParams->pWdaContext = pWDA;
5359 pWdaParams->wdaMsgParam = setStaKeyParams;
5360 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005361 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
5362 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005363 if(IS_WDI_STATUS_FAILURE(status))
5364 {
5365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5366 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
5367 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5368 vos_mem_free(pWdaParams) ;
5369 setStaKeyParams->status = eSIR_FAILURE ;
5370 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
5371 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005372 return CONVERT_WDI2VOS_STATUS(status) ;
5373}
Jeff Johnson295189b2012-06-20 16:38:30 -07005374/*
5375 * FUNCTION: WDA_RemoveStaKeyReqCallback
5376 * send SET BSS key RSP back to PE
5377 */
5378void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
5379{
5380 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5381 tWDA_CbContext *pWDA;
5382 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005384 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005385 if(NULL == pWdaParams)
5386 {
5387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005388 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005389 VOS_ASSERT(0) ;
5390 return ;
5391 }
5392 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5393 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005394 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5395 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005396 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005397 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005398 return ;
5399}
5400
Jeff Johnson295189b2012-06-20 16:38:30 -07005401/*
5402 * FUNCTION: WDA_ProcessRemoveStaKeyReq
5403 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
5404 */
5405VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
5406 tRemoveStaKeyParams *removeStaKeyParams )
5407{
5408 WDI_Status status = WDI_STATUS_SUCCESS ;
5409 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
5410 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
5411 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
5412 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005414 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005415 if(NULL == wdiRemoveStaKeyParam)
5416 {
5417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005418 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005419 VOS_ASSERT(0);
5420 return VOS_STATUS_E_NOMEM;
5421 }
5422 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5423 if(NULL == pWdaParams)
5424 {
5425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005426 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005427 VOS_ASSERT(0);
5428 vos_mem_free(wdiRemoveStaKeyParam);
5429 return VOS_STATUS_E_NOMEM;
5430 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005431 /* copy remove STA key params to WDI structure*/
5432 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
5433 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
5434 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
5435 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
5436 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005437 /* Store remove key pointer, as this will be used for response */
5438 /* store Params pass it to WDI */
5439 pWdaParams->pWdaContext = pWDA;
5440 pWdaParams->wdaMsgParam = removeStaKeyParams;
5441 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005442 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
5443 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005444 if(IS_WDI_STATUS_FAILURE(status))
5445 {
5446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5447 "Failure in remove STA Key Req WDI API, free all the memory " );
5448 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5449 vos_mem_free(pWdaParams) ;
5450 removeStaKeyParams->status = eSIR_FAILURE ;
5451 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
5452 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005453 return CONVERT_WDI2VOS_STATUS(status) ;
5454}
Jeff Johnson295189b2012-06-20 16:38:30 -07005455/*
5456 * FUNCTION: WDA_IsHandleSetLinkStateReq
5457 * Update the WDA state and return the status to handle this message or not
5458 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005459WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
5460 tWDA_CbContext *pWDA,
5461 tLinkStateParams *linkStateParams)
5462{
5463 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005464 switch(linkStateParams->state)
5465 {
5466 case eSIR_LINK_PREASSOC_STATE:
5467 case eSIR_LINK_BTAMP_PREASSOC_STATE:
5468 /*
5469 * set the WDA state to PRE ASSOC
5470 * copy the BSSID into pWDA to use it in join request and return,
5471 * No need to handle these messages.
5472 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005473 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
5474 {
5475 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07005476 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005477 }
5478 else
5479 {
5480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005481 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005482 VOS_ASSERT(0);
5483 }
5484
5485 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
5486 {
5487 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07005488 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005489 }
5490 else
5491 {
5492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005493 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005494 VOS_ASSERT(0);
5495 }
5496
Jeff Johnson295189b2012-06-20 16:38:30 -07005497 /* UMAC is issuing the setlink state with PREASSOC twice (before set
5498 *channel and after ) so reset the WDA state to ready when the second
5499 * time UMAC issue the link state with PREASSOC
5500 */
5501 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
5502 {
5503 /* RESET WDA state back to WDA_READY_STATE */
5504 pWDA->wdaState = WDA_READY_STATE;
5505 }
5506 else
5507 {
5508 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
5509 }
5510 //populate linkState info in WDACbCtxt
5511 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07005512 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07005513 default:
5514 if(pWDA->wdaState != WDA_READY_STATE)
5515 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005516 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
5517 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
5518 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
5519 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
5520 *the ASSERT in WDA_Stop during module unload.*/
5521 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
5522 {
5523 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005524 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005525 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005526 else
5527 {
5528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005529 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005530 status = WDA_IGNORE_SET_LINK_STATE;
5531 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005532 }
5533 break;
5534 }
5535
5536 return status;
5537}
Jeff Johnson295189b2012-06-20 16:38:30 -07005538/*
5539 * FUNCTION: WDA_SetLinkStateCallback
5540 * call back function for set link state from WDI
5541 */
5542void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
5543{
5544 tWDA_CbContext *pWDA;
5545 tLinkStateParams *linkStateParams;
5546 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005548 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005549 if(NULL == pWdaParams)
5550 {
5551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005552 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005553 VOS_ASSERT(0) ;
5554 return ;
5555 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005556 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -07005557 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005558 /*
5559 * In STA mode start the BA activity check timer after association
5560 * and in AP mode start BA activity check timer after BSS start */
5561 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
5562 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07005563 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
5564 ((status == WDI_STATUS_SUCCESS) &&
5565 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07005566 {
5567 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5568 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005569 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005570 /*
5571 * No respone required for WDA_SET_LINK_STATE so free the request
5572 * param here
5573 */
5574 if( pWdaParams != NULL )
5575 {
5576 if( pWdaParams->wdaWdiApiMsgParam != NULL )
5577 {
5578 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5579 }
5580 vos_mem_free(pWdaParams);
5581 }
5582 return ;
5583}
Jeff Johnson295189b2012-06-20 16:38:30 -07005584/*
5585 * FUNCTION: WDA_ProcessSetLinkState
5586 * Request to WDI to set the link status.
5587 */
5588VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
5589 tLinkStateParams *linkStateParams)
5590{
5591 WDI_Status status = WDI_STATUS_SUCCESS ;
5592 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
5593 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
5594 sizeof(WDI_SetLinkReqParamsType)) ;
5595 tWDA_ReqParams *pWdaParams ;
5596 tpAniSirGlobal pMac;
5597 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
5598
5599 if(NULL == pMac)
5600 {
5601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005602 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005603 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005604 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005605 return VOS_STATUS_E_FAILURE;
5606 }
5607
5608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005609 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005610 if(NULL == wdiSetLinkStateParam)
5611 {
5612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005613 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005614 VOS_ASSERT(0);
5615 return VOS_STATUS_E_NOMEM;
5616 }
5617 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5618 if(NULL == pWdaParams)
5619 {
5620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005621 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005622 VOS_ASSERT(0);
5623 vos_mem_free(wdiSetLinkStateParam);
5624 return VOS_STATUS_E_NOMEM;
5625 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005626 if(WDA_IGNORE_SET_LINK_STATE ==
5627 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
5628 {
5629 status = WDI_STATUS_E_FAILURE;
5630 }
5631 else
5632 {
5633 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
5634 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005635 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
5636 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005637 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
5638 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005639 pWdaParams->pWdaContext = pWDA;
5640 /* Store remove key pointer, as this will be used for response */
5641 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005642 /* store Params pass it to WDI */
5643 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
5644 /* Stop Timer only other than GO role and concurrent session */
5645 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07005646 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005647 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
5648 {
5649 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5650 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005651 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
5652 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005653 if(IS_WDI_STATUS_FAILURE(status))
5654 {
5655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5656 "Failure in set link state Req WDI API, free all the memory " );
5657 }
5658 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005659 if(IS_WDI_STATUS_FAILURE(status))
5660 {
5661 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07005662 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005663 vos_mem_free(pWdaParams);
5664 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005665 return CONVERT_WDI2VOS_STATUS(status) ;
5666}
Jeff Johnson295189b2012-06-20 16:38:30 -07005667/*
5668 * FUNCTION: WDA_GetStatsReqParamsCallback
5669 * send the response to PE with Stats received from WDI
5670 */
5671void WDA_GetStatsReqParamsCallback(
5672 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
5673 void* pUserData)
5674{
5675 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5676 tAniGetPEStatsRsp *pGetPEStatsRspParams;
5677
5678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005679 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005680 pGetPEStatsRspParams =
5681 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
5682 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
5683
5684 if(NULL == pGetPEStatsRspParams)
5685 {
5686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005687 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005688 VOS_ASSERT(0);
5689 return;
5690 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005691 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
5692 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
5693 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
5694 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005695
5696 //Fill the Session Id Properly in PE
5697 pGetPEStatsRspParams->sessionId = 0;
5698 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005699 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005700 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
5701 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005702 vos_mem_copy( pGetPEStatsRspParams + 1,
5703 wdiGetStatsRsp + 1,
5704 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005705 /* send response to UMAC*/
5706 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
5707
5708 return;
5709}
5710
Jeff Johnson295189b2012-06-20 16:38:30 -07005711/*
5712 * FUNCTION: WDA_ProcessGetStatsReq
5713 * Request to WDI to get the statistics
5714 */
5715VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
5716 tAniGetPEStatsReq *pGetStatsParams)
5717{
5718 WDI_Status status = WDI_STATUS_SUCCESS ;
5719 WDI_GetStatsReqParamsType wdiGetStatsParam;
5720 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005722 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005723 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
5724 pGetStatsParams->staId;
5725 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
5726 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005727 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005728 status = WDI_GetStatsReq(&wdiGetStatsParam,
5729 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005730 if(IS_WDI_STATUS_FAILURE(status))
5731 {
5732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5733 "Failure in Get Stats Req WDI API, free all the memory " );
5734 pGetPEStatsRspParams =
5735 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
5736 if(NULL == pGetPEStatsRspParams)
5737 {
5738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005739 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005740 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005741 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005742 return VOS_STATUS_E_NOMEM;
5743 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005744 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
5745 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
5746 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
5747 pGetPEStatsRspParams->rc = eSIR_FAILURE;
5748 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
5749 (void *)pGetPEStatsRspParams, 0) ;
5750 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005751 /* Free the request message */
5752 vos_mem_free(pGetStatsParams);
5753 return CONVERT_WDI2VOS_STATUS(status);
5754}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005755
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08005756#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005757/*
5758 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
5759 * send the response to PE with roam Rssi received from WDI
5760 */
5761void WDA_GetRoamRssiReqParamsCallback(
5762 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
5763 void* pUserData)
5764{
5765 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5766 tWDA_CbContext *pWDA = NULL;
5767 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5768 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
5769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5770 "<------ %s " ,__func__);
5771 if(NULL == pWdaParams)
5772 {
5773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5774 "%s: pWdaParams received NULL", __func__);
5775 VOS_ASSERT(0) ;
5776 return ;
5777 }
5778 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5779 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
5780
5781 if(NULL == pGetRoamRssiReqParams)
5782 {
5783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5784 "%s: pGetRoamRssiReqParams received NULL", __func__);
5785 VOS_ASSERT(0);
5786 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5787 vos_mem_free(pWdaParams);
5788 return ;
5789 }
5790 pGetRoamRssiRspParams =
5791 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5792
5793 if(NULL == pGetRoamRssiRspParams)
5794 {
5795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5796 "%s: VOS MEM Alloc Failure", __func__);
5797 VOS_ASSERT(0);
5798 return;
5799 }
5800 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
5801 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005802 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005803 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
5804 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
5805
5806 /* Assign get roam rssi req (backup) in to the response */
5807 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
5808
5809 /* free WDI command buffer */
5810 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5811 vos_mem_free(pWdaParams) ;
5812
5813 /* send response to UMAC*/
5814 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
5815
5816 return;
5817}
5818
5819
5820
5821/*
5822 * FUNCTION: WDA_ProcessGetRoamRssiReq
5823 * Request to WDI to get the statistics
5824 */
5825VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
5826 tAniGetRssiReq *pGetRoamRssiParams)
5827{
5828 WDI_Status status = WDI_STATUS_SUCCESS ;
5829 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
5830 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5831 tWDA_ReqParams *pWdaParams = NULL;
5832
5833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5834 "------> %s " ,__func__);
5835 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
5836 pGetRoamRssiParams->staId;
5837 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
5838
5839 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5840 if(NULL == pWdaParams)
5841 {
5842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5843 "%s: VOS MEM Alloc Failure", __func__);
5844 VOS_ASSERT(0);
5845 return VOS_STATUS_E_NOMEM;
5846 }
5847
5848 /* Store Init Req pointer, as this will be used for response */
5849 pWdaParams->pWdaContext = pWDA;
5850
5851 /* Take Get roam Rssi req backup as it stores the callback to be called after
5852 receiving the response */
5853 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
5854 pWdaParams->wdaWdiApiMsgParam = NULL;
5855
5856 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
5857 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
5858 if(IS_WDI_STATUS_FAILURE(status))
5859 {
5860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5861 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
5862 pGetRoamRssiRspParams =
5863 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5864 if(NULL == pGetRoamRssiRspParams)
5865 {
5866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5867 "%s: VOS MEM Alloc Failure", __func__);
5868 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05305869 vos_mem_free(pGetRoamRssiParams);
5870 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005871 return VOS_STATUS_E_NOMEM;
5872 }
5873 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
5874 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
5875 pGetRoamRssiRspParams->rssi = 0;
5876 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
5877 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
5878 (void *)pGetRoamRssiRspParams, 0) ;
5879 }
5880 return CONVERT_WDI2VOS_STATUS(status);
5881}
5882#endif
5883
5884
Jeff Johnson295189b2012-06-20 16:38:30 -07005885/*
5886 * FUNCTION: WDA_UpdateEDCAParamCallback
5887 * call back function for Update EDCA params from WDI
5888 */
5889void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
5890{
5891 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5892 tEdcaParams *pEdcaParams;
5893
5894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005895 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005896 if(NULL == pWdaParams)
5897 {
5898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005899 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005900 VOS_ASSERT(0) ;
5901 return ;
5902 }
5903 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005904 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5905 vos_mem_free(pWdaParams);
5906 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005907 return ;
5908}
Jeff Johnson295189b2012-06-20 16:38:30 -07005909/*
5910 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
5911 * Request to WDI to Update the EDCA params.
5912 */
5913VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
5914 tEdcaParams *pEdcaParams)
5915{
5916 WDI_Status status = WDI_STATUS_SUCCESS ;
5917 WDI_UpdateEDCAParamsType *wdiEdcaParam =
5918 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
5919 sizeof(WDI_UpdateEDCAParamsType)) ;
5920 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005922 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005923 if(NULL == wdiEdcaParam)
5924 {
5925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005926 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005927 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005928 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005929 return VOS_STATUS_E_NOMEM;
5930 }
5931 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5932 if(NULL == pWdaParams)
5933 {
5934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005935 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005936 VOS_ASSERT(0);
5937 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005938 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005939 return VOS_STATUS_E_NOMEM;
5940 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005941 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07005942 /*
5943 Since firmware is not using highperformance flag, we have removed
5944 this flag from wdiEDCAInfo structure to match sizeof the structure
5945 between host and firmware.In future if we are planning to use
5946 highperformance flag then Please define this flag in wdiEDCAInfo
5947 structure, update it here and send it to firmware. i.e.
5948 Following is the original line which we removed as part of the fix
5949 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
5950 pEdcaParams->highPerformance;
5951 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005952 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
5953 &pEdcaParams->acbe);
5954 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
5955 &pEdcaParams->acbk);
5956 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
5957 &pEdcaParams->acvi);
5958 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
5959 &pEdcaParams->acvo);
5960 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005961 pWdaParams->pWdaContext = pWDA;
5962 /* Store remove key pointer, as this will be used for response */
5963 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005964 /* store Params pass it to WDI */
5965 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005966 status = WDI_UpdateEDCAParams(wdiEdcaParam,
5967 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005968 if(IS_WDI_STATUS_FAILURE(status))
5969 {
5970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5971 "Failure in Update EDCA Params WDI API, free all the memory " );
5972 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5973 vos_mem_free(pWdaParams);
5974 vos_mem_free(pEdcaParams);
5975 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005976 return CONVERT_WDI2VOS_STATUS(status) ;
5977}
Jeff Johnson295189b2012-06-20 16:38:30 -07005978/*
5979 * FUNCTION: WDA_AddBAReqCallback
5980 * send ADD BA RSP back to PE
5981 */
5982void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
5983 void* pUserData)
5984{
5985 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5986 tWDA_CbContext *pWDA;
5987 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005989 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005990 if(NULL == pWdaParams)
5991 {
5992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005993 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005994 VOS_ASSERT(0) ;
5995 return ;
5996 }
5997 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5998 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005999 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6000 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006001 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006002 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006003 return ;
6004}
6005
Jeff Johnson295189b2012-06-20 16:38:30 -07006006/*
6007 * FUNCTION: WDA_ProcessAddBAReq
6008 * Request to WDI to Update the ADDBA REQ params.
6009 */
6010VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
6011 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
6012{
Jeff Johnson43971f52012-07-17 12:26:56 -07006013 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07006014 WDI_AddBAReqParamsType *wdiAddBAReqParam =
6015 (WDI_AddBAReqParamsType *)vos_mem_malloc(
6016 sizeof(WDI_AddBAReqParamsType)) ;
6017 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006019 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006020 if(NULL == wdiAddBAReqParam)
6021 {
6022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006023 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006024 VOS_ASSERT(0);
6025 return VOS_STATUS_E_NOMEM;
6026 }
6027 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6028 if(NULL == pWdaParams)
6029 {
6030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006031 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006032 VOS_ASSERT(0);
6033 vos_mem_free(wdiAddBAReqParam);
6034 return VOS_STATUS_E_NOMEM;
6035 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006036 do
6037 {
6038 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006039 wdiAddBaInfo->ucSTAIdx = staIdx ;
6040 wdiAddBaInfo->ucBaSessionID = baSessionID ;
6041 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006042 } while(0) ;
6043 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006044 pWdaParams->pWdaContext = pWDA;
6045 /* store Params pass it to WDI */
6046 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
6047 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07006048 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
6049 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006050
Jeff Johnson43971f52012-07-17 12:26:56 -07006051 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07006052 {
6053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07006054 "Failure in ADD BA REQ Params WDI API, free all the memory" );
6055 status = CONVERT_WDI2VOS_STATUS(wstatus);
6056 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006057 vos_mem_free(pWdaParams);
6058 pAddBAReqParams->status = eSIR_FAILURE;
6059 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6060 }
Jeff Johnson43971f52012-07-17 12:26:56 -07006061 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07006062}
Jeff Johnson295189b2012-06-20 16:38:30 -07006063/*
6064 * FUNCTION: WDA_AddBASessionReqCallback
6065 * send ADD BA SESSION RSP back to PE/(or TL)
6066 */
6067void WDA_AddBASessionReqCallback(
6068 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
6069{
6070 VOS_STATUS status = VOS_STATUS_SUCCESS ;
6071 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6072 tWDA_CbContext *pWDA;
6073 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006075 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006076 if(NULL == pWdaParams)
6077 {
6078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006079 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006080 VOS_ASSERT(0) ;
6081 return ;
6082 }
6083 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6084 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006085 if( NULL == pAddBAReqParams )
6086 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006088 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006089 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006090 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6091 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006092 return ;
6093 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006094 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6095 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006096 /*
6097 * if WDA in update TL state, update TL with BA session parama and send
6098 * another request to HAL(/WDI) (ADD_BA_REQ)
6099 */
6100
6101 if((VOS_STATUS_SUCCESS ==
6102 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
6103 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
6104 {
6105 /* Update TL with BA info received from HAL/WDI */
6106 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
6107 wdiAddBaSession->usBaSessionID,
6108 wdiAddBaSession->ucSTAIdx,
6109 wdiAddBaSession->ucBaTID,
6110 wdiAddBaSession->ucBaBufferSize,
6111 wdiAddBaSession->ucWinSize,
6112 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07006113 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
6114 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
6115 }
6116 else
6117 {
6118 pAddBAReqParams->status =
6119 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
6120
6121 /* Setting Flag to indicate that Set BA is success */
6122 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
6123 {
6124 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
6125 tANI_U8 tid = wdiAddBaSession->ucBaTID;
6126 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
6127 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006128 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6129 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006130 /*Reset the WDA state to READY */
6131 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006132 return ;
6133}
6134
Jeff Johnson295189b2012-06-20 16:38:30 -07006135/*
6136 * FUNCTION: WDA_ProcessAddBASessionReq
6137 * Request to WDI to Update the ADDBA REQ params.
6138 */
6139VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
6140 tAddBAParams *pAddBAReqParams)
6141{
6142 WDI_Status status = WDI_STATUS_SUCCESS ;
6143 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
6144 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
6145 sizeof(WDI_AddBASessionReqParamsType)) ;
6146 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006147 WLANTL_STAStateType tlSTAState = 0;
6148
Jeff Johnson295189b2012-06-20 16:38:30 -07006149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006150 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006151 if(NULL == wdiAddBASessionReqParam)
6152 {
6153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006154 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006155 VOS_ASSERT(0);
6156 return VOS_STATUS_E_NOMEM;
6157 }
6158 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6159 if(NULL == pWdaParams)
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 vos_mem_free(wdiAddBASessionReqParam);
6165 return VOS_STATUS_E_NOMEM;
6166 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006167 /*
6168 * Populate ADD BA parameters and pass these paarmeters to WDI.
6169 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
6170 * the state to track if these is BA recipient case or BA initiator
6171 * case.
6172 */
6173 do
6174 {
6175 WDI_AddBASessionReqinfoType *wdiBAInfoType =
6176 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
6177 /* vos_mem_copy(wdiBAInfoType->macBSSID,
6178 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
6179 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
6180 vos_mem_copy(wdiBAInfoType->macPeerAddr,
6181 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006182 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07006183 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
6184 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
6185 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
6186 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
6187 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07006188 /* check the BA direction and update state accordingly */
6189 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
6190 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
6191 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
6192
6193 }while(0) ;
6194 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006195 pWdaParams->pWdaContext = pWDA;
6196 /* Store ADD BA pointer, as this will be used for response */
6197 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
6198 /* store Params pass it to WDI */
6199 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006200
6201 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
6202 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
6203 */
6204 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
6205 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
6206 {
6207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006208 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07006209 status = WDI_STATUS_E_NOT_ALLOWED;
6210 pAddBAReqParams->status =
6211 CONVERT_WDI2SIR_STATUS(status) ;
6212 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6213 /*Reset the WDA state to READY */
6214 pWDA->wdaState = WDA_READY_STATE;
6215 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6216 vos_mem_free(pWdaParams);
6217
6218 return CONVERT_WDI2VOS_STATUS(status) ;
6219 }
6220
Jeff Johnson295189b2012-06-20 16:38:30 -07006221 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
6222 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006223 if(IS_WDI_STATUS_FAILURE(status))
6224 {
6225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006226 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07006227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006228 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07006229 pAddBAReqParams->status =
6230 CONVERT_WDI2SIR_STATUS(status) ;
6231 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006232 /*Reset the WDA state to READY */
6233 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006234 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006235 vos_mem_free(pWdaParams);
6236 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006237 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006238}
Jeff Johnson295189b2012-06-20 16:38:30 -07006239/*
6240 * FUNCTION: WDA_DelBANotifyTL
6241 * send DEL BA IND to TL
6242 */
6243void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
6244 tDelBAParams *pDelBAReqParams)
6245{
6246 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
6247 //tSirMsgQ msg;
6248 vos_msg_t vosMsg;
6249 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006250 if(NULL == pDelBAInd)
6251 {
6252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006253 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006254 VOS_ASSERT(0) ;
6255 return;
6256 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006257 pDelBAInd->mesgType = WDA_DELETEBA_IND;
6258 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
6259 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
6260 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07006261
Jeff Johnson295189b2012-06-20 16:38:30 -07006262
6263 vosMsg.type = WDA_DELETEBA_IND;
6264 vosMsg.bodyptr = pDelBAInd;
6265 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
6266 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
6267 {
6268 vosStatus = VOS_STATUS_E_BADMSG;
6269 }
6270}
Jeff Johnson295189b2012-06-20 16:38:30 -07006271/*
6272 * FUNCTION: WDA_DelBAReqCallback
6273 * send DEL BA RSP back to PE
6274 */
6275void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
6276{
6277 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6278 tWDA_CbContext *pWDA;
6279 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006281 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006282 if(NULL == pWdaParams)
6283 {
6284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006285 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006286 VOS_ASSERT(0) ;
6287 return ;
6288 }
6289 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6290 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006291 /* Notify TL about DEL BA in case of recipinet */
6292 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
6293 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
6294 {
6295 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
6296 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006297 /*
6298 * No respone required for WDA_DELBA_IND so just free the request
6299 * param here
6300 */
6301 vos_mem_free(pDelBAReqParams);
6302 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6303 vos_mem_free(pWdaParams);
6304 return ;
6305}
6306
Jeff Johnson295189b2012-06-20 16:38:30 -07006307/*
6308 * FUNCTION: WDA_ProcessDelBAReq
6309 * Request to WDI to Update the DELBA REQ params.
6310 */
6311VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
6312 tDelBAParams *pDelBAReqParams)
6313{
6314 WDI_Status status = WDI_STATUS_SUCCESS ;
6315 WDI_DelBAReqParamsType *wdiDelBAReqParam =
6316 (WDI_DelBAReqParamsType *)vos_mem_malloc(
6317 sizeof(WDI_DelBAReqParamsType)) ;
6318 tWDA_ReqParams *pWdaParams ;
6319 tANI_U16 staIdx = 0;
6320 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07006321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006322 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006323 if(NULL == wdiDelBAReqParam)
6324 {
6325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006326 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006327 VOS_ASSERT(0);
6328 return VOS_STATUS_E_NOMEM;
6329 }
6330 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6331 if(NULL == pWdaParams)
6332 {
6333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006334 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006335 VOS_ASSERT(0);
6336 vos_mem_free(wdiDelBAReqParam);
6337 return VOS_STATUS_E_NOMEM;
6338 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006339 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
6340 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
6341 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
6342 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006343 pWdaParams->pWdaContext = pWDA;
6344 /* Store DEL BA pointer, as this will be used for response */
6345 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006346 /* store Params pass it to WDI */
6347 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006348 /* if BA exchange over the air is failed, clear this tid in BaBitmap
6349 * maintained in WDA, so that WDA can retry for another BA session
6350 */
6351 staIdx = pDelBAReqParams->staIdx;
6352 tid = pDelBAReqParams->baTID;
6353 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07006354 status = WDI_DelBAReq(wdiDelBAReqParam,
6355 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006356 if(IS_WDI_STATUS_FAILURE(status))
6357 {
6358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6359 "Failure in DEL BA REQ Params WDI API, free all the memory " );
6360 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6361 vos_mem_free(pWdaParams->wdaMsgParam);
6362 vos_mem_free(pWdaParams);
6363 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006364 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006365}
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006366
6367/*
6368 * FUNCTION: WDA_UpdateChReqCallback
6369 *
6370 */
6371void WDA_UpdateChReqCallback(WDI_Status status, void* pUserData)
6372{
Siddharth Bhala006c122014-05-03 12:13:27 +05306373 tWDA_ReqParams *pWdaParams;
6374 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
6375 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
6376 WDI_UpdateChannelReqinfoType *pChanInfoType;
6377 tSirUpdateChanList *pChanList;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006378
6379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6380 "<------ %s " ,__func__);
Siddharth Bhala006c122014-05-03 12:13:27 +05306381 if(NULL == pUserData)
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006382 {
6383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhala006c122014-05-03 12:13:27 +05306384 "%s: pUserData received NULL", __func__);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006385 VOS_ASSERT(0);
6386 return;
6387 }
6388
Siddharth Bhala006c122014-05-03 12:13:27 +05306389 pWdaParams = (tWDA_ReqParams *)pUserData;
6390 pwdiUpdateChReqParam =
6391 (WDI_UpdateChReqParamsType *)pWdaParams->wdaWdiApiMsgParam;
6392 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
6393 pChanInfoType = pwdiUpdateChanReqType->pchanParam;
6394 pChanList = (tSirUpdateChanList *)pWdaParams->wdaMsgParam;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006395 /*
6396 * currently there is no response message is expected between PE and
6397 * WDA, Failure return from WDI is a ASSERT condition
6398 */
6399 vos_mem_free(pChanInfoType);
6400 vos_mem_free(pChanList);
6401 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6402 vos_mem_free(pWdaParams);
6403
6404 return;
6405}
6406
6407/*
6408 * FUNCTION: WDA_ProcessUpdateChannelList
6409 * Request to WDI to Update the ChannelList params.
6410 */
6411VOS_STATUS WDA_ProcessUpdateChannelList(tWDA_CbContext *pWDA,
6412 tSirUpdateChanList *pChanList)
6413{
6414 WDI_Status status = WDI_STATUS_SUCCESS;
6415 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
6416 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
6417 WDI_UpdateChannelReqinfoType *pChanInfoType;
6418 tWDA_ReqParams *pWdaParams;
6419 wpt_uint8 i;
6420
6421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6422 "------> %s " ,__func__);
6423 if(NULL == pChanList)
6424 {
6425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6426 "%s: NULL pChanList", __func__);
6427 VOS_ASSERT(0);
6428 return VOS_STATUS_E_INVAL;
6429 }
6430
6431 if(!WDA_getFwWlanFeatCaps(UPDATE_CHANNEL_LIST))
6432 {
6433 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6434 "Update channel list capability Not Supported");
6435 vos_mem_free(pChanList);
6436 return VOS_STATUS_E_INVAL;
6437 }
6438
6439 pwdiUpdateChReqParam = (WDI_UpdateChReqParamsType *)vos_mem_malloc(
6440 sizeof(WDI_UpdateChReqParamsType));
6441 if(NULL == pwdiUpdateChReqParam)
6442 {
6443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6444 "%s: VOS MEM Alloc Failed for WDI_UpdateChReqParamsType",
6445 __func__);
6446 VOS_ASSERT(0);
6447 vos_mem_free(pChanList);
6448 return VOS_STATUS_E_NOMEM;
6449 }
6450 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
6451 pChanInfoType = (WDI_UpdateChannelReqinfoType *)
6452 vos_mem_malloc(sizeof(WDI_UpdateChannelReqinfoType) *
6453 pChanList->numChan);
6454 if(NULL == pChanInfoType)
6455 {
6456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6457 "%s: VOS MEM Alloc Failure", __func__);
6458 VOS_ASSERT(0);
6459 vos_mem_free(pChanList);
6460 vos_mem_free(pwdiUpdateChReqParam);
6461 return VOS_STATUS_E_NOMEM;
6462 }
6463 vos_mem_zero(pChanInfoType, sizeof(WDI_UpdateChannelReqinfoType)
6464 * pChanList->numChan);
6465 pwdiUpdateChanReqType->pchanParam = pChanInfoType;
6466
6467 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6468 if(NULL == pWdaParams)
6469 {
6470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6471 "%s: VOS MEM Alloc Failure", __func__);
6472 VOS_ASSERT(0);
6473 vos_mem_free(pChanList);
6474 vos_mem_free(pChanInfoType);
6475 vos_mem_free(pwdiUpdateChReqParam);
6476 return VOS_STATUS_E_NOMEM;
6477 }
6478 pwdiUpdateChanReqType->numchan = pChanList->numChan;
6479
6480 for(i = 0; i < pwdiUpdateChanReqType->numchan; i++)
6481 {
6482 pChanInfoType->mhz =
6483 vos_chan_to_freq(pChanList->chanParam[i].chanId);
6484
6485 pChanInfoType->band_center_freq1 = pChanInfoType->mhz;
6486 pChanInfoType->band_center_freq2 = 0;
6487
6488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6489 "chan[%d] = %u", i, pChanInfoType->mhz);
6490 if (pChanList->chanParam[i].dfsSet)
6491 {
6492 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_PASSIVE);
6493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6494 "chan[%d] DFS[%d]", pChanList->chanParam[i].chanId,
6495 pChanList->chanParam[i].dfsSet);
6496 }
6497
6498 if (pChanInfoType->mhz < WDA_2_4_GHZ_MAX_FREQ)
6499 {
6500 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11G);
6501 }
6502 else
6503 {
6504 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11A);
6505 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_HT);
6506 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_VHT);
6507 }
6508
6509 WDA_SET_CHANNEL_MAX_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
6510 WDA_SET_CHANNEL_REG_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
6511
6512 pChanInfoType++;
6513 }
6514
6515 pwdiUpdateChReqParam->wdiReqStatusCB = NULL;
6516 pWdaParams->pWdaContext = pWDA;
6517 pWdaParams->wdaMsgParam = (void *)pChanList;
6518 /* store Params pass it to WDI */
6519 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiUpdateChReqParam;
6520 status = WDI_UpdateChannelReq(pwdiUpdateChReqParam,
6521 (WDI_UpdateChannelRspCb)WDA_UpdateChReqCallback, pWdaParams);
6522 if(IS_WDI_STATUS_FAILURE(status))
6523 {
6524 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6525 "Failure in Update Channel REQ Params WDI API, free all the memory");
6526 vos_mem_free(pwdiUpdateChanReqType->pchanParam);
6527 vos_mem_free(pwdiUpdateChReqParam);
6528 vos_mem_free(pWdaParams->wdaMsgParam);
6529 vos_mem_free(pWdaParams);
6530 }
6531 return CONVERT_WDI2VOS_STATUS(status);
6532}
6533
Jeff Johnson295189b2012-06-20 16:38:30 -07006534/*
6535 * FUNCTION: WDA_AddTSReqCallback
6536 * send ADD TS RSP back to PE
6537 */
6538void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
6539{
6540 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6541 tWDA_CbContext *pWDA;
6542 tAddTsParams *pAddTsReqParams;
6543
6544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006545 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006546 if(NULL == pWdaParams)
6547 {
6548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006549 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006550 VOS_ASSERT(0) ;
6551 return ;
6552 }
6553 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6554 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
6555 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6556 vos_mem_free(pWdaParams);
6557
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006558 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006559 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006560 return ;
6561}
6562
Jeff Johnson295189b2012-06-20 16:38:30 -07006563/*
6564 * FUNCTION: WDA_ProcessAddTSReq
6565 * Request to WDI to Update the ADD TS REQ params.
6566 */
6567VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
6568 tAddTsParams *pAddTsReqParams)
6569{
6570 WDI_Status status = WDI_STATUS_SUCCESS ;
6571 WDI_AddTSReqParamsType *wdiAddTSReqParam =
6572 (WDI_AddTSReqParamsType *)vos_mem_malloc(
6573 sizeof(WDI_AddTSReqParamsType)) ;
6574 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006576 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006577 if(NULL == wdiAddTSReqParam)
6578 {
6579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006580 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006581 VOS_ASSERT(0);
6582 return VOS_STATUS_E_NOMEM;
6583 }
6584 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6585 if(NULL == pWdaParams)
6586 {
6587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006588 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006589 VOS_ASSERT(0);
6590 vos_mem_free(wdiAddTSReqParam);
6591 return VOS_STATUS_E_NOMEM;
6592 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006593 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
6594 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006595 //TS IE
6596 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
6597 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
6598 pAddTsReqParams->tspec.length;
6599
6600 //TS IE : TS INFO : TRAFFIC
6601 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
6602 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
6603 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
6604 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
6605 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
6606 pAddTsReqParams->tspec.tsinfo.traffic.psb;
6607 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
6608 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
6609 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
6610 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
6611 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
6612 pAddTsReqParams->tspec.tsinfo.traffic.direction;
6613 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
6614 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
6615 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
6616 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
6617
6618 //TS IE : TS INFO : SCHEDULE
6619 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
6620 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
6621 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
6622 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07006623 //TS IE
6624 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
6625 pAddTsReqParams->tspec.nomMsduSz;
6626 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
6627 pAddTsReqParams->tspec.maxMsduSz;
6628 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
6629 pAddTsReqParams->tspec.minSvcInterval;
6630 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
6631 pAddTsReqParams->tspec.maxSvcInterval;
6632 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
6633 pAddTsReqParams->tspec.inactInterval;
6634 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
6635 pAddTsReqParams->tspec.suspendInterval;
6636 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
6637 pAddTsReqParams->tspec.svcStartTime;
6638 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
6639 pAddTsReqParams->tspec.minDataRate;
6640 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
6641 pAddTsReqParams->tspec.meanDataRate;
6642 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
6643 pAddTsReqParams->tspec.peakDataRate;
6644 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
6645 pAddTsReqParams->tspec.maxBurstSz;
6646 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
6647 pAddTsReqParams->tspec.delayBound;
6648 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
6649 pAddTsReqParams->tspec.minPhyRate;
6650 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
6651 pAddTsReqParams->tspec.surplusBw;
6652 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
6653 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07006654 /* TODO: tAddTsParams doesn't have the following fields */
6655#if 0
6656 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6657 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
6658 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6659 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6660#endif
6661 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
6662
6663 pWdaParams->pWdaContext = pWDA;
6664 /* Store ADD TS pointer, as this will be used for response */
6665 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006666 /* store Params pass it to WDI */
6667 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006668 status = WDI_AddTSReq(wdiAddTSReqParam,
6669 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006670 if(IS_WDI_STATUS_FAILURE(status))
6671 {
6672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6673 "Failure in ADD TS REQ Params WDI API, free all the memory " );
6674 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6675 vos_mem_free(pWdaParams);
6676 pAddTsReqParams->status = eSIR_FAILURE ;
6677 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
6678 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006679 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006680}
6681
Jeff Johnson295189b2012-06-20 16:38:30 -07006682/*
6683 * FUNCTION: WDA_DelTSReqCallback
6684 * send DEL TS RSP back to PE
6685 */
6686void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
6687{
6688 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006690 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006691 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6692 vos_mem_free(pWdaParams->wdaMsgParam) ;
6693 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006694 /*
6695 * No respone required for WDA_DEL_TS_REQ so just free the request
6696 * param here
6697 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006698 return ;
6699}
6700
Jeff Johnson295189b2012-06-20 16:38:30 -07006701/*
6702 * FUNCTION: WDA_ProcessDelTSReq
6703 * Request to WDI to Update the DELTS REQ params.
6704 */
6705VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
6706 tDelTsParams *pDelTSReqParams)
6707{
6708 WDI_Status status = WDI_STATUS_SUCCESS ;
6709 WDI_DelTSReqParamsType *wdiDelTSReqParam =
6710 (WDI_DelTSReqParamsType *)vos_mem_malloc(
6711 sizeof(WDI_DelTSReqParamsType)) ;
6712 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006714 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006715 if(NULL == wdiDelTSReqParam)
6716 {
6717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006718 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006719 VOS_ASSERT(0);
6720 return VOS_STATUS_E_NOMEM;
6721 }
6722 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6723 if(NULL == pWdaParams)
6724 {
6725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006726 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006727 VOS_ASSERT(0);
6728 vos_mem_free(wdiDelTSReqParam);
6729 return VOS_STATUS_E_NOMEM;
6730 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006731 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
6732 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
6733 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
6734 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
6735 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006736 pWdaParams->pWdaContext = pWDA;
6737 /* Store DEL TS pointer, as this will be used for response */
6738 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006739 /* store Params pass it to WDI */
6740 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006741 status = WDI_DelTSReq(wdiDelTSReqParam,
6742 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006743 if(IS_WDI_STATUS_FAILURE(status))
6744 {
6745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6746 "Failure in DEL TS REQ Params WDI API, free all the memory " );
6747 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6748 vos_mem_free(pWdaParams->wdaMsgParam);
6749 vos_mem_free(pWdaParams);
6750 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006751 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006752}
Jeff Johnson295189b2012-06-20 16:38:30 -07006753/*
6754 * FUNCTION: WDA_UpdateBeaconParamsCallback
6755 * Free the memory. No need to send any response to PE in this case
6756 */
6757void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
6758{
6759 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006761 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006762 if(NULL == pWdaParams)
6763 {
6764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006765 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006766 VOS_ASSERT(0) ;
6767 return ;
6768 }
6769 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6770 vos_mem_free(pWdaParams->wdaMsgParam) ;
6771 vos_mem_free(pWdaParams);
6772 /*
6773 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
6774 * param here
6775 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006776 return ;
6777}
Jeff Johnson295189b2012-06-20 16:38:30 -07006778/*
6779 * FUNCTION: WDA_ProcessUpdateBeaconParams
6780 * Request to WDI to send the beacon parameters to HAL to update the Hardware
6781 */
6782VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
6783 tUpdateBeaconParams *pUpdateBeaconParams)
6784{
6785 WDI_Status status = WDI_STATUS_SUCCESS ;
6786 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
6787 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
6788 sizeof(WDI_UpdateBeaconParamsType)) ;
6789 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006791 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006792 if(NULL == wdiUpdateBeaconParams)
6793 {
6794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006795 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006796 VOS_ASSERT(0);
6797 return VOS_STATUS_E_NOMEM;
6798 }
6799 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6800 if(NULL == pWdaParams)
6801 {
6802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006803 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006804 VOS_ASSERT(0);
6805 vos_mem_free(wdiUpdateBeaconParams);
6806 return VOS_STATUS_E_NOMEM;
6807 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006808 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
6809 pUpdateBeaconParams->bssIdx;
6810 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
6811 pUpdateBeaconParams->fShortPreamble;
6812 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
6813 pUpdateBeaconParams->fShortSlotTime;
6814 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
6815 pUpdateBeaconParams->beaconInterval;
6816 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
6817 pUpdateBeaconParams->llaCoexist;
6818 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
6819 pUpdateBeaconParams->llbCoexist;
6820 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
6821 pUpdateBeaconParams->llgCoexist;
6822 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
6823 pUpdateBeaconParams->ht20MhzCoexist;
6824 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
6825 pUpdateBeaconParams->llnNonGFCoexist;
6826 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
6827 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
6828 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
6829 pUpdateBeaconParams->fRIFSMode;
6830 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
6831 pUpdateBeaconParams->paramChangeBitmap;
6832 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
6833
6834 pWdaParams->pWdaContext = pWDA;
6835 /* Store UpdateBeacon Req pointer, as this will be used for response */
6836 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006837 /* store Params pass it to WDI */
6838 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006839 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
6840 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
6841 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006842 if(IS_WDI_STATUS_FAILURE(status))
6843 {
6844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6845 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
6846 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6847 vos_mem_free(pWdaParams->wdaMsgParam);
6848 vos_mem_free(pWdaParams);
6849 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006850 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006851}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08006852#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -07006853/*
6854 * FUNCTION: WDA_TSMStatsReqCallback
6855 * send TSM Stats RSP back to PE
6856 */
6857void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
6858{
6859 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6860 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006861 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
6862 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006863
6864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006865 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006866 if(NULL == pWdaParams)
6867 {
6868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006869 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006870 VOS_ASSERT(0) ;
6871 return ;
6872 }
6873 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006874 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
6875
6876 if(NULL == pGetTsmStatsReqParams)
6877 {
6878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6879 "%s: pGetTsmStatsReqParams received NULL", __func__);
6880 VOS_ASSERT(0);
6881 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6882 vos_mem_free(pWdaParams);
6883 return;
6884 }
6885
6886 pTsmRspParams =
6887 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07006888 if( NULL == pTsmRspParams )
6889 {
6890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006891 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006892 VOS_ASSERT( 0 );
6893 return ;
6894 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006895 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
6896 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
6897 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
6898
Jeff Johnson295189b2012-06-20 16:38:30 -07006899 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
6900 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
6901 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
6902 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
6903 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
6904 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
6905 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
6906 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
6907 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
6908 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006909
6910 /* Assign get tsm stats req req (backup) in to the response */
6911 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
6912
6913 /* free WDI command buffer */
6914 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6915 vos_mem_free(pWdaParams);
6916
Jeff Johnson295189b2012-06-20 16:38:30 -07006917 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006918 return ;
6919}
6920
6921
Jeff Johnson295189b2012-06-20 16:38:30 -07006922/*
6923 * FUNCTION: WDA_ProcessTsmStatsReq
6924 * Request to WDI to get the TSM Stats params.
6925 */
6926VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006927 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07006928{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006929 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006930 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006931 tWDA_ReqParams *pWdaParams = NULL;
6932 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
6933
Jeff Johnson295189b2012-06-20 16:38:30 -07006934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006935 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006936 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
6937 sizeof(WDI_TSMStatsReqParamsType));
6938 if(NULL == wdiTSMReqParam)
6939 {
6940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006941 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006942 VOS_ASSERT(0);
6943 return VOS_STATUS_E_NOMEM;
6944 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006945 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6946 if(NULL == pWdaParams)
6947 {
6948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006949 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006950 VOS_ASSERT(0);
6951 vos_mem_free(wdiTSMReqParam);
6952 return VOS_STATUS_E_NOMEM;
6953 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006954 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
6955 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
6956 pTsmStats->bssId,
6957 sizeof(wpt_macAddr));
6958 wdiTSMReqParam->wdiReqStatusCB = NULL ;
6959
6960 pWdaParams->pWdaContext = pWDA;
6961 /* Store TSM Stats pointer, as this will be used for response */
6962 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006963 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006964 status = WDI_TSMStatsReq(wdiTSMReqParam,
6965 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006966 if(IS_WDI_STATUS_FAILURE(status))
6967 {
6968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6969 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006970 vos_mem_free(pWdaParams);
6971
6972 pGetTsmStatsRspParams =
6973 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
6974 if(NULL == pGetTsmStatsRspParams)
6975 {
6976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6977 "%s: VOS MEM Alloc Failure", __func__);
6978 VOS_ASSERT(0);
6979 vos_mem_free(pTsmStats);
6980 return VOS_STATUS_E_NOMEM;
6981 }
6982 pGetTsmStatsRspParams->staId = pTsmStats->staId;
6983 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
6984 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
6985
6986 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006987 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006988 return CONVERT_WDI2VOS_STATUS(status) ;
6989}
6990#endif
6991/*
6992 * FUNCTION: WDA_SendBeaconParamsCallback
6993 * No need to send any response to PE in this case
6994 */
6995void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
6996{
6997
Jeff Johnson295189b2012-06-20 16:38:30 -07006998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006999 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007000 return ;
7001}
Jeff Johnson295189b2012-06-20 16:38:30 -07007002/*
7003 * FUNCTION: WDA_ProcessSendBeacon
7004 * Request to WDI to send the beacon template to HAL to update the TPE memory and
7005 * start beacon trasmission
7006 */
7007VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
7008 tSendbeaconParams *pSendbeaconParams)
7009{
7010 WDI_Status status = WDI_STATUS_SUCCESS ;
7011 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007013 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007014 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
7015 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
7016 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
7017 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07007018 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
7019 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05307020 /* p2pIeOffset should be atleast greater than timIeOffset */
7021 if ((pSendbeaconParams->p2pIeOffset != 0) &&
7022 (pSendbeaconParams->p2pIeOffset <
7023 pSendbeaconParams->timIeOffset))
7024 {
7025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7026 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
7027 VOS_ASSERT( 0 );
7028 return WDI_STATUS_E_FAILURE;
7029 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007030 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
7031 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07007032 /* Copy the beacon template to local buffer */
7033 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
7034 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
7035 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
7036
Jeff Johnson295189b2012-06-20 16:38:30 -07007037 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
7038 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007039 if(IS_WDI_STATUS_FAILURE(status))
7040 {
7041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7042 "Failure in SEND BEACON REQ Params WDI API" );
7043 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007044 vos_mem_free(pSendbeaconParams);
7045 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007046}
Jeff Johnson295189b2012-06-20 16:38:30 -07007047/*
7048 * FUNCTION: WDA_UpdateProbeRspParamsCallback
7049 * No need to send any response to PE in this case
7050 */
7051void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
7052{
Jeff Johnson295189b2012-06-20 16:38:30 -07007053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007054 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007055 return ;
7056}
7057
Jeff Johnson295189b2012-06-20 16:38:30 -07007058/*
7059 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
7060 * Request to WDI to send the probe response template to HAL to update the TPE memory and
7061 * send probe response
7062 */
7063VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
7064 tSendProbeRespParams *pSendProbeRspParams)
7065{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007066 WDI_Status status = WDI_STATUS_SUCCESS;
7067 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
7068 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07007069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007070 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007071
7072 if (!wdiSendProbeRspParam)
7073 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
7074
Jeff Johnson295189b2012-06-20 16:38:30 -07007075 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007076 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07007077 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007078 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07007079 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07007080 /* Copy the Probe Response template to local buffer */
7081 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007082 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07007083 pSendProbeRspParams->pProbeRespTemplate,
7084 pSendProbeRspParams->probeRespTemplateLen);
7085 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007086 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07007087 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
7088 WDI_PROBE_REQ_BITMAP_IE_LEN);
7089
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007090 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007091
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007092 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07007093 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007094 if(IS_WDI_STATUS_FAILURE(status))
7095 {
7096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7097 "Failure in SEND Probe RSP Params WDI API" );
7098 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007099 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007100 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007101 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007102}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007103#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -07007104/*
7105 * FUNCTION: WDA_SetMaxTxPowerCallBack
7106 * send the response to PE with power value received from WDI
7107 */
7108void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
7109 void* pUserData)
7110{
7111 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7112 tWDA_CbContext *pWDA = NULL;
7113 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
7114
7115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007116 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007117 if(NULL == pWdaParams)
7118 {
7119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007120 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007121 VOS_ASSERT(0) ;
7122 return ;
7123 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007124 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7125 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007126 if( NULL == pMaxTxPowerParams )
7127 {
7128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007129 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07007130 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007131 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7132 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007133 return ;
7134 }
Jeff Johnsone7245742012-09-05 17:12:55 -07007135
Jeff Johnson295189b2012-06-20 16:38:30 -07007136
7137 /*need to free memory for the pointers used in the
7138 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007139 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7140 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007141 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07007142
Jeff Johnson295189b2012-06-20 16:38:30 -07007143
7144 /* send response to UMAC*/
7145 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
7146
7147 return;
7148}
Jeff Johnson295189b2012-06-20 16:38:30 -07007149/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007150 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07007151 * Request to WDI to send set Max Tx Power Request
7152 */
7153 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
7154 tMaxTxPowerParams *MaxTxPowerParams)
7155{
7156 WDI_Status status = WDI_STATUS_SUCCESS;
7157 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
7158 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007159
Jeff Johnson295189b2012-06-20 16:38:30 -07007160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007161 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007162
Jeff Johnson295189b2012-06-20 16:38:30 -07007163 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
7164 sizeof(WDI_SetMaxTxPowerParamsType));
7165 if(NULL == wdiSetMaxTxPowerParams)
7166 {
7167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007168 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007169 VOS_ASSERT(0);
7170 return VOS_STATUS_E_NOMEM;
7171 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007172 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7173 if(NULL == pWdaParams)
7174 {
7175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007176 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007177 vos_mem_free(wdiSetMaxTxPowerParams);
7178 VOS_ASSERT(0);
7179 return VOS_STATUS_E_NOMEM;
7180 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007181 /* Copy.Max.Tx.Power Params to WDI structure */
7182 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
7183 MaxTxPowerParams->bssId,
7184 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007185 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
7186 MaxTxPowerParams->selfStaMacAddr,
7187 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007188 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
7189 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07007190 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007191 pWdaParams->pWdaContext = pWDA;
7192 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007193 /* store Params pass it to WDI */
7194 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007195 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
7196 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007197 if(IS_WDI_STATUS_FAILURE(status))
7198 {
7199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7200 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
7201 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7202 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007203 /* send response to UMAC*/
7204 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007205 }
7206 return CONVERT_WDI2VOS_STATUS(status);
7207
7208}
Jeff Johnson295189b2012-06-20 16:38:30 -07007209#endif
schang86c22c42013-03-13 18:41:24 -07007210
7211/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07007212 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
7213 * send the response to PE with power value received from WDI
7214 */
7215void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
7216 *pwdiSetMaxTxPowerPerBandRsp,
7217 void* pUserData)
7218{
7219 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7220 tWDA_CbContext *pWDA = NULL;
7221 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
7222
7223 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7224 "<------ %s ", __func__);
7225 if (NULL == pWdaParams)
7226 {
7227 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7228 "%s: pWdaParams received NULL", __func__);
7229 VOS_ASSERT(0);
7230 return ;
7231 }
7232 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7233 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
7234 if ( NULL == pMxTxPwrPerBandParams )
7235 {
7236 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7237 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
7238 VOS_ASSERT(0);
7239 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7240 vos_mem_free(pWdaParams);
7241 return;
7242 }
7243
7244 /*need to free memory for the pointers used in the
7245 WDA Process.Set Max Tx Power Req function*/
7246 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7247 vos_mem_free(pWdaParams);
7248 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
7249
7250 /* send response to UMAC*/
7251 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
7252 pMxTxPwrPerBandParams, 0);
7253
7254 return;
7255}
7256
7257/*
7258 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
7259 * Request to WDI to send set Max Tx Power Per band Request
7260 */
7261 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
7262 tMaxTxPowerPerBandParams
7263 *MaxTxPowerPerBandParams)
7264{
7265 WDI_Status status = WDI_STATUS_SUCCESS;
7266 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
7267 tWDA_ReqParams *pWdaParams = NULL;
7268
7269 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7270 "------> %s ", __func__);
7271
7272 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
7273 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
7274
7275 if (NULL == wdiSetMxTxPwrPerBandParams)
7276 {
7277 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7278 "%s: VOS MEM Alloc Failure", __func__);
7279 VOS_ASSERT(0);
7280 return VOS_STATUS_E_NOMEM;
7281 }
7282 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7283 if (NULL == pWdaParams)
7284 {
7285 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7286 "%s: VOS MEM Alloc Failure", __func__);
7287 vos_mem_free(wdiSetMxTxPwrPerBandParams);
7288 VOS_ASSERT(0);
7289 return VOS_STATUS_E_NOMEM;
7290 }
7291 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
7292 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
7293 MaxTxPowerPerBandParams->bandInfo;
7294 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
7295 MaxTxPowerPerBandParams->power;
7296 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
7297 pWdaParams->pWdaContext = pWDA;
7298 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
7299 /* store Params pass it to WDI */
7300 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
7301 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
7302 WDA_SetMaxTxPowerPerBandCallBack,
7303 pWdaParams);
7304 if (IS_WDI_STATUS_FAILURE(status))
7305 {
7306 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7307 "Failure in SET MAX TX Power REQ Params WDI API,"
7308 " free all the memory");
7309 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7310 vos_mem_free(pWdaParams);
7311 /* send response to UMAC*/
7312 WDA_SendMsg(pWDA,
7313 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
7314 MaxTxPowerPerBandParams, 0);
7315 }
7316 return CONVERT_WDI2VOS_STATUS(status);
7317}
7318
7319/*
schang86c22c42013-03-13 18:41:24 -07007320 * FUNCTION: WDA_SetTxPowerCallBack
7321 * send the response to PE with power value received from WDI
7322 */
7323void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
7324 void* pUserData)
7325{
7326 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7327 tWDA_CbContext *pWDA = NULL;
7328 tSirSetTxPowerReq *pTxPowerParams = NULL;
7329
7330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7331 "<------ %s ", __func__);
7332 if(NULL == pWdaParams)
7333 {
7334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7335 "%s: pWdaParams received NULL", __func__);
7336 VOS_ASSERT(0) ;
7337 return ;
7338 }
7339 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7340 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
7341 if(NULL == pTxPowerParams)
7342 {
7343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7344 "%s: pTxPowerParams received NULL " ,__func__);
7345 VOS_ASSERT(0);
7346 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7347 vos_mem_free(pWdaParams);
7348 return ;
7349 }
7350
7351 /*need to free memory for the pointers used in the
7352 WDA Process.Set Max Tx Power Req function*/
7353 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7354 vos_mem_free(pWdaParams);
7355
7356 /* send response to UMAC*/
7357 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
7358 return;
7359}
7360
7361/*
7362 * FUNCTION: WDA_ProcessSetTxPowerReq
7363 * Request to WDI to send set Tx Power Request
7364 */
7365 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
7366 tSirSetTxPowerReq *txPowerParams)
7367{
7368 WDI_Status status = WDI_STATUS_SUCCESS;
7369 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
7370 tWDA_ReqParams *pWdaParams = NULL;
7371
7372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7373 "------> %s ", __func__);
7374
7375 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
7376 sizeof(WDI_SetTxPowerParamsType));
7377 if(NULL == wdiSetTxPowerParams)
7378 {
7379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7380 "%s: VOS MEM Alloc Failure", __func__);
7381 VOS_ASSERT(0);
7382 return VOS_STATUS_E_NOMEM;
7383 }
7384 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7385 if(NULL == pWdaParams)
7386 {
7387 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7388 "%s: VOS MEM Alloc Failure", __func__);
7389 vos_mem_free(wdiSetTxPowerParams);
7390 VOS_ASSERT(0);
7391 return VOS_STATUS_E_NOMEM;
7392 }
7393 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
7394 txPowerParams->bssIdx;
7395 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
7396 txPowerParams->mwPower;
7397 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
7398 pWdaParams->pWdaContext = pWDA;
7399 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
7400 /* store Params pass it to WDI */
7401 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
7402 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
7403 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
7404 if(IS_WDI_STATUS_FAILURE(status))
7405 {
7406 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7407 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
7408 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7409 vos_mem_free(pWdaParams);
7410 /* send response to UMAC*/
7411 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
7412 }
7413 return CONVERT_WDI2VOS_STATUS(status);
7414}
7415
Jeff Johnson295189b2012-06-20 16:38:30 -07007416/*
7417 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7418 * Free the memory. No need to send any response to PE in this case
7419 */
7420void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
7421{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007422 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7423
Jeff Johnson295189b2012-06-20 16:38:30 -07007424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007425 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007426
7427 if(NULL == pWdaParams)
7428 {
7429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007430 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007431 VOS_ASSERT(0) ;
7432 return ;
7433 }
7434
7435 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7436 vos_mem_free(pWdaParams->wdaMsgParam) ;
7437 vos_mem_free(pWdaParams);
7438
Jeff Johnson295189b2012-06-20 16:38:30 -07007439 /*
7440 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
7441 * so just free the request param here
7442 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007443 return ;
7444}
7445
Jeff Johnson295189b2012-06-20 16:38:30 -07007446/*
7447 * FUNCTION: WDA_ProcessSetP2PGONOAReq
7448 * Request to WDI to set the P2P Group Owner Notice of Absence Req
7449 */
7450VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
7451 tP2pPsParams *pP2pPsConfigParams)
7452{
7453 WDI_Status status = WDI_STATUS_SUCCESS ;
7454 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
7455 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
7456 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007457 tWDA_ReqParams *pWdaParams = NULL;
7458
Jeff Johnson295189b2012-06-20 16:38:30 -07007459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007460 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007461 if(NULL == wdiSetP2PGONOAReqParam)
7462 {
7463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007464 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007465 VOS_ASSERT(0);
7466 return VOS_STATUS_E_NOMEM;
7467 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007468
7469 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7470 if(NULL == pWdaParams)
7471 {
7472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007473 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007474 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007475 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007476 VOS_ASSERT(0);
7477 return VOS_STATUS_E_NOMEM;
7478 }
7479
Jeff Johnson295189b2012-06-20 16:38:30 -07007480 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
7481 pP2pPsConfigParams->opp_ps;
7482 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
7483 pP2pPsConfigParams->ctWindow;
7484 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
7485 pP2pPsConfigParams->count;
7486 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
7487 pP2pPsConfigParams->duration;
7488 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
7489 pP2pPsConfigParams->interval;
7490 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
7491 pP2pPsConfigParams->single_noa_duration;
7492 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
7493 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007494
Jeff Johnson295189b2012-06-20 16:38:30 -07007495 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
7496 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007497 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
7498
Jeff Johnson295189b2012-06-20 16:38:30 -07007499 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007500 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
7501 pWdaParams->pWdaContext = pWDA;
7502
Jeff Johnson295189b2012-06-20 16:38:30 -07007503 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007504 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
7505
Jeff Johnson295189b2012-06-20 16:38:30 -07007506 if(IS_WDI_STATUS_FAILURE(status))
7507 {
7508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7509 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007510 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7511 vos_mem_free(pWdaParams->wdaMsgParam);
7512 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007513 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007514 return CONVERT_WDI2VOS_STATUS(status);
7515
Jeff Johnson295189b2012-06-20 16:38:30 -07007516}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307517
7518#ifdef FEATURE_WLAN_TDLS
7519/*
7520 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7521 * Free the memory. No need to send any response to PE in this case
7522 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307523void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
7524 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307525{
7526 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7527 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307528 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307529
7530
7531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7532 "<------ %s " ,__func__);
7533 if(NULL == pWdaParams)
7534 {
7535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7536 "%s: pWdaParams received NULL", __func__);
7537 VOS_ASSERT(0) ;
7538 return ;
7539 }
7540 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7541
7542 if(NULL == pWdaParams)
7543 {
7544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7545 "%s: pWdaParams received NULL", __func__);
7546 VOS_ASSERT(0) ;
7547 return ;
7548 }
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307549 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
7550 if( NULL == pTdlsLinkEstablishParams )
7551 {
7552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7553 "%s: pTdlsLinkEstablishParams "
7554 "received NULL " ,__func__);
7555 VOS_ASSERT(0);
7556 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7557 vos_mem_free(pWdaParams);
7558 return ;
7559 }
7560 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
7561 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307562 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307563 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307564 /* send response to UMAC*/
7565 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
7566
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307567 return ;
7568}
7569
7570VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
7571 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
7572{
7573 WDI_Status status = WDI_STATUS_SUCCESS ;
7574 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
7575 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
7576 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
7577 tWDA_ReqParams *pWdaParams = NULL;
7578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7579 "------> %s " ,__func__);
7580 if(NULL == wdiSetTDLSLinkEstablishReqParam)
7581 {
7582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7583 "%s: VOS MEM Alloc Failure", __func__);
7584 VOS_ASSERT(0);
7585 return VOS_STATUS_E_NOMEM;
7586 }
7587 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7588 if(NULL == pWdaParams)
7589 {
7590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7591 "%s: VOS MEM Alloc Failure", __func__);
7592 vos_mem_free(pTdlsLinkEstablishParams);
7593 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
7594 VOS_ASSERT(0);
7595 return VOS_STATUS_E_NOMEM;
7596 }
7597 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307598 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307599 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307600 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307601 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307602 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307603 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307604 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307605 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307606 pTdlsLinkEstablishParams->isBufsta;
Naresh Jayaramc7cbd782014-02-04 17:38:23 +05307607 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsOffChannelSupported =
7608 pTdlsLinkEstablishParams->isOffChannelSupported;
7609
7610 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannels,
7611 pTdlsLinkEstablishParams->validChannels,
7612 pTdlsLinkEstablishParams->validChannelsLen);
7613
7614 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannelsLen =
7615 pTdlsLinkEstablishParams->validChannelsLen;
7616
7617 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClasses,
7618 pTdlsLinkEstablishParams->validOperClasses,
7619 pTdlsLinkEstablishParams->validOperClassesLen);
7620 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClassesLen =
7621 pTdlsLinkEstablishParams->validOperClassesLen;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307622
7623 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
7624 /* Store msg pointer from PE, as this will be used for response */
7625 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
7626 /* store Params pass it to WDI */
7627 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
7628 pWdaParams->pWdaContext = pWDA;
7629
7630 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
7631 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
7632 WDA_SetTDLSLinkEstablishReqParamsCallback,
7633 pWdaParams);
7634 if(IS_WDI_STATUS_FAILURE(status))
7635 {
7636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7637 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
7638 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7639 vos_mem_free(pWdaParams->wdaMsgParam);
7640 vos_mem_free(pWdaParams);
7641 }
7642 return CONVERT_WDI2VOS_STATUS(status);
7643}
Atul Mittalc0f739f2014-07-31 13:47:47 +05307644
7645// tdlsoffchan
7646void WDA_SetTDLSChanSwitchReqParamsCallback(WDI_SetTdlsChanSwitchReqResp *wdiSetTdlsChanSwitchReqRsp,
7647 void* pUserData)
7648{
7649 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7650 tWDA_CbContext *pWDA = NULL;
7651 tTdlsChanSwitchParams *pTdlsChanSwitchParams;
7652
7653
7654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7655 "<------ %s " ,__func__);
7656 if(NULL == pWdaParams)
7657 {
7658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7659 "%s: pWdaParams received NULL", __func__);
Atul Mittalc0f739f2014-07-31 13:47:47 +05307660 VOS_ASSERT(0) ;
7661 return ;
7662 }
7663 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7664
Atul Mittal60bd4292014-08-14 12:19:27 +05307665 if(NULL == pWdaParams)
7666 {
7667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7668 "%s: pWdaParams received NULL", __func__);
7669 VOS_ASSERT(0) ;
7670 return ;
7671 }
Atul Mittalc0f739f2014-07-31 13:47:47 +05307672 pTdlsChanSwitchParams = (tTdlsChanSwitchParams *)pWdaParams->wdaMsgParam ;
Atul Mittal60bd4292014-08-14 12:19:27 +05307673 if( NULL == pTdlsChanSwitchParams )
Atul Mittalc0f739f2014-07-31 13:47:47 +05307674 {
7675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7676 "%s: pTdlsChanSwitchParams "
7677 "received NULL " ,__func__);
7678 VOS_ASSERT(0);
7679 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7680 vos_mem_free(pWdaParams);
7681 return ;
7682 }
7683 pTdlsChanSwitchParams->status = CONVERT_WDI2SIR_STATUS(
7684 wdiSetTdlsChanSwitchReqRsp->wdiStatus);
Atul Mittalc0f739f2014-07-31 13:47:47 +05307685 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7686 vos_mem_free(pWdaParams);
Atul Mittal60bd4292014-08-14 12:19:27 +05307687 /* send response to UMAC*/
7688 WDA_SendMsg(pWDA, WDA_SET_TDLS_CHAN_SWITCH_REQ_RSP, pTdlsChanSwitchParams, 0) ;
Atul Mittalc0f739f2014-07-31 13:47:47 +05307689
7690 return ;
7691}
7692VOS_STATUS WDA_ProcessSetTdlsChanSwitchReq(tWDA_CbContext *pWDA,
7693 tTdlsChanSwitchParams *pTdlsChanSwitchParams)
7694{
7695 WDI_Status status = WDI_STATUS_SUCCESS ;
7696 WDI_SetTDLSChanSwitchReqParamsType *wdiSetTDLSChanSwitchReqParam =
7697 (WDI_SetTDLSChanSwitchReqParamsType *)vos_mem_malloc(
7698 sizeof(WDI_SetTDLSChanSwitchReqParamsType));
7699 tWDA_ReqParams *pWdaParams = NULL;
7700
7701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7702 "Enter: %s ",__func__);
7703 if(NULL == wdiSetTDLSChanSwitchReqParam)
7704 {
7705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7706 "%s: VOS MEM Alloc Failure", __func__);
7707 VOS_ASSERT(0);
7708 return VOS_STATUS_E_NOMEM;
7709 }
7710
7711 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7712 if(NULL == pWdaParams)
7713 {
7714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7715 "%s: VOS MEM Alloc Failure", __func__);
7716 vos_mem_free(pTdlsChanSwitchParams);
7717 vos_mem_free(wdiSetTDLSChanSwitchReqParam);
7718 VOS_ASSERT(0);
7719 return VOS_STATUS_E_NOMEM;
7720 }
7721 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.staIdx =
7722 pTdlsChanSwitchParams->staIdx;
7723 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.isOffchannelInitiator =
7724 pTdlsChanSwitchParams->tdlsSwMode;
7725 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetOperClass =
7726 pTdlsChanSwitchParams->operClass;
7727 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetChannel =
7728 pTdlsChanSwitchParams->tdlsOffCh;
7729 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.secondaryChannelOffset =
7730 pTdlsChanSwitchParams->tdlsOffChBwOffset;
7731
7732
7733 /* Store msg pointer from PE, as this will be used for response */
7734 pWdaParams->wdaMsgParam = (void *)pTdlsChanSwitchParams ;
7735 /* store Params pass it to WDI */
7736 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSChanSwitchReqParam ;
7737 pWdaParams->pWdaContext = pWDA;
7738 status = WDI_SetTDLSChanSwitchReq(wdiSetTDLSChanSwitchReqParam,
7739 (WDI_SetTDLSChanSwitchReqParamsRspCb)
7740 WDA_SetTDLSChanSwitchReqParamsCallback,
7741 pWdaParams);
7742 if(IS_WDI_STATUS_FAILURE(status))
7743 {
7744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7745 "Failure in TDLS Channel Switch Req WDI API, free all the memory" );
7746 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7747 vos_mem_free(pWdaParams->wdaMsgParam);
7748 vos_mem_free(pWdaParams);
7749 }
7750 return CONVERT_WDI2VOS_STATUS(status);
7751}
7752#endif /*FEATURE_WLAN_TDLS*/
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307753
7754
Jeff Johnson295189b2012-06-20 16:38:30 -07007755#ifdef WLAN_FEATURE_VOWIFI_11R
7756/*
7757 * FUNCTION: WDA_AggrAddTSReqCallback
7758 * send ADD AGGREGATED TS RSP back to PE
7759 */
7760void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
7761{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007762 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7763 tWDA_CbContext *pWDA;
7764 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007765 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07007766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007767 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007768 if(NULL == pWdaParams)
7769 {
7770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007771 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007772 VOS_ASSERT(0) ;
7773 return ;
7774 }
7775
7776 pWDA = pWdaParams->pWdaContext;
7777 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007778
7779 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
7780 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007781 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007782 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007783 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007784
7785 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7786 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007787 return ;
7788}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07007789/*
7790 * FUNCTION: WDA_ProcessAddTSReq
7791 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
7792 */
7793VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
7794 tAggrAddTsParams *pAggrAddTsReqParams)
7795{
7796 WDI_Status status = WDI_STATUS_SUCCESS ;
7797 int i;
7798 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007799 tWDA_ReqParams *pWdaParams = NULL;
7800
7801
Jeff Johnson295189b2012-06-20 16:38:30 -07007802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007803 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007804 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
7805 sizeof(WDI_AggrAddTSReqParamsType)) ;
7806 if(NULL == wdiAggrAddTSReqParam)
7807 {
7808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007809 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007810 VOS_ASSERT(0);
7811 return VOS_STATUS_E_NOMEM;
7812 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007813
7814
7815 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7816 if(NULL == pWdaParams)
7817 {
7818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007819 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007820 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007821 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007822 VOS_ASSERT(0);
7823 return VOS_STATUS_E_NOMEM;
7824 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007825 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
7826 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
7827 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007828 for( i = 0; i < WDI_MAX_NO_AC; i++ )
7829 {
7830 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
7831 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
7832 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07007833 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
7834 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
7835 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
7836 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
7837 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
7838 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
7839 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
7840 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
7841 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
7842 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
7843 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
7844 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
7845 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
7846 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
7847 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
7848 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07007849 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
7850 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07007851 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
7852 pAggrAddTsReqParams->tspec[i].nomMsduSz;
7853 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
7854 pAggrAddTsReqParams->tspec[i].maxMsduSz;
7855 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
7856 pAggrAddTsReqParams->tspec[i].minSvcInterval;
7857 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
7858 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
7859 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
7860 pAggrAddTsReqParams->tspec[i].inactInterval;
7861 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
7862 pAggrAddTsReqParams->tspec[i].suspendInterval;
7863 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
7864 pAggrAddTsReqParams->tspec[i].svcStartTime;
7865 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
7866 pAggrAddTsReqParams->tspec[i].minDataRate;
7867 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
7868 pAggrAddTsReqParams->tspec[i].meanDataRate;
7869 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
7870 pAggrAddTsReqParams->tspec[i].peakDataRate;
7871 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
7872 pAggrAddTsReqParams->tspec[i].maxBurstSz;
7873 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
7874 pAggrAddTsReqParams->tspec[i].delayBound;
7875 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
7876 pAggrAddTsReqParams->tspec[i].minPhyRate;
7877 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
7878 pAggrAddTsReqParams->tspec[i].surplusBw;
7879 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
7880 pAggrAddTsReqParams->tspec[i].mediumTime;
7881 }
7882
7883 /* TODO: tAggrAddTsParams doesn't have the following fields */
7884#if 0
7885 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
7886 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
7887 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
7888 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
7889#endif
7890 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
7891
7892 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007893 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007894 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007895 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
7896
7897 pWdaParams->pWdaContext = pWDA;
7898
Jeff Johnson295189b2012-06-20 16:38:30 -07007899 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007900 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
7901
Jeff Johnson295189b2012-06-20 16:38:30 -07007902 if(IS_WDI_STATUS_FAILURE(status))
7903 {
7904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7905 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007906 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7907 vos_mem_free(pWdaParams);
7908
7909 /* send the failure response back to PE*/
7910 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
7911 {
7912 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
7913 }
7914
7915 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
7916 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007917 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007918 return CONVERT_WDI2VOS_STATUS(status) ;
7919}
7920#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07007921/*
Mihir Shetea4306052014-03-25 00:02:54 +05307922 * FUNCTION: WDA_EnterImpsRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007923 * send Enter IMPS RSP back to PE
7924 */
Mihir Shetea4306052014-03-25 00:02:54 +05307925void WDA_EnterImpsRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007926{
Mihir Shetea4306052014-03-25 00:02:54 +05307927 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7928 tWDA_CbContext *pWDA;
7929
Jeff Johnson295189b2012-06-20 16:38:30 -07007930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Mihir Shetea4306052014-03-25 00:02:54 +05307931 "<------ %s status=%d" ,__func__,status);
7932 if(NULL == pWdaParams)
7933 {
7934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7935 "%s: pWdaParams received NULL", __func__);
7936 VOS_ASSERT(0);
7937 return;
7938 }
7939
7940 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7941
7942 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7943 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007944 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007945 return ;
7946}
Mihir Shetea4306052014-03-25 00:02:54 +05307947
7948
7949/*
7950 * FUNCTION: WDA_EnterImpsReqCallback
7951 * Free memory and send Enter IMPS RSP back to PE.
7952 * Invoked when Enter IMPS REQ failed in WDI and no RSP callback is generated.
7953 */
7954void WDA_EnterImpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7955{
7956 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7957 tWDA_CbContext *pWDA;
7958
7959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7960 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7961
7962 if(NULL == pWdaParams)
7963 {
7964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7965 "%s: pWdaParams received NULL", __func__);
7966 VOS_ASSERT(0);
7967 return;
7968 }
7969
7970 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7971
7972 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7973 {
7974 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7975 vos_mem_free(pWdaParams);
7976 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
7977 CONVERT_WDI2SIR_STATUS(wdiStatus));
7978 }
7979
7980 return;
7981}
Jeff Johnson295189b2012-06-20 16:38:30 -07007982/*
7983 * FUNCTION: WDA_ProcessEnterImpsReq
7984 * Request to WDI to Enter IMPS power state.
7985 */
7986VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
7987{
7988 WDI_Status status = WDI_STATUS_SUCCESS ;
Mihir Shetea4306052014-03-25 00:02:54 +05307989 WDI_EnterImpsReqParamsType *wdiEnterImpsReqParams;
7990 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007992 "------> %s " ,__func__);
Mihir Shetea4306052014-03-25 00:02:54 +05307993
7994
7995 wdiEnterImpsReqParams = vos_mem_malloc(sizeof(WDI_EnterImpsReqParamsType));
7996 if (NULL == wdiEnterImpsReqParams)
7997 {
7998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7999 "%s: VOS MEM Alloc Failure", __func__);
8000 VOS_ASSERT(0);
8001 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
8002 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
8003 return VOS_STATUS_E_NOMEM;
8004 }
8005
8006 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8007 if (NULL == pWdaParams)
8008 {
8009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8010 "%s: VOS MEM Alloc Failure", __func__);
8011 VOS_ASSERT(0);
8012 vos_mem_free(wdiEnterImpsReqParams);
8013 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL ,
8014 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
8015 return VOS_STATUS_E_NOMEM;
8016 }
8017
8018 wdiEnterImpsReqParams->wdiReqStatusCB = WDA_EnterImpsReqCallback;
8019 wdiEnterImpsReqParams->pUserData = pWdaParams;
8020
8021 pWdaParams->wdaWdiApiMsgParam = wdiEnterImpsReqParams;
8022 pWdaParams->wdaMsgParam = NULL;
8023 pWdaParams->pWdaContext = pWDA;
8024
8025 status = WDI_EnterImpsReq(wdiEnterImpsReqParams,
8026 (WDI_EnterImpsRspCb)WDA_EnterImpsRspCallback,
8027 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008028 if(IS_WDI_STATUS_FAILURE(status))
8029 {
8030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8031 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Mihir Shetea4306052014-03-25 00:02:54 +05308032 vos_mem_free(wdiEnterImpsReqParams);
8033 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008034 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008035 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008036 return CONVERT_WDI2VOS_STATUS(status) ;
8037}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308038
8039/*
8040 * FUNCTION: WDA_ExitImpsRespCallback
8041 * send Exit IMPS RSP back to PE
8042 */
8043void WDA_ExitImpsRespCallback(WDI_Status status, void* pUserData)
8044{
8045 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8046 tWDA_CbContext *pWDA;
8047
8048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8049 "<------ %s " ,__func__);
8050
8051 if (NULL == pWdaParams)
8052 {
8053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8054 "%s: pWdaParams received NULL", __func__);
8055 VOS_ASSERT(0);
8056 return;
8057 }
8058 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8059
8060 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8061 vos_mem_free(pWdaParams);
8062
8063 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status));
8064 return;
8065}
8066
Jeff Johnson295189b2012-06-20 16:38:30 -07008067/*
8068 * FUNCTION: WDA_ExitImpsReqCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008069 */
8070void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
8071{
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308072 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008074 "<------ %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308075 if(NULL == pWdaParams)
8076 {
8077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8078 "%s: pWdaParams received NULL", __func__);
8079 VOS_ASSERT(0);
8080 return;
8081 }
8082
8083 if (IS_WDI_STATUS_FAILURE(status))
8084 {
8085 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8086 vos_mem_free(pWdaParams);
8087 if (WDI_STATUS_DEV_INTERNAL_FAILURE == status)
8088 {
8089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8090 FL("reload wlan driver"));
8091 wpalWlanReload();
8092 }
8093 }
8094 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07008095}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308096
Jeff Johnson295189b2012-06-20 16:38:30 -07008097/*
8098 * FUNCTION: WDA_ProcessExitImpsReq
8099 * Request to WDI to Exit IMPS power state.
8100 */
8101VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
8102{
8103 WDI_Status status = WDI_STATUS_SUCCESS ;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308104 tWDA_ReqParams *pWdaParams;
8105 WDI_ExitImpsReqParamsType *wdiExitImpsReqParams;
8106
Jeff Johnson295189b2012-06-20 16:38:30 -07008107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008108 "------> %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308109 wdiExitImpsReqParams = (WDI_ExitImpsReqParamsType *)vos_mem_malloc(
8110 sizeof(WDI_ExitImpsReqParamsType));
8111 if (NULL == wdiExitImpsReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008112 {
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8114 "%s: VOS MEM Alloc Failure", __func__);
8115 VOS_ASSERT(0);
8116 return VOS_STATUS_E_NOMEM;
8117 }
8118 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8119 if(NULL == pWdaParams)
8120 {
8121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8122 "%s: VOS MEM Alloc Failure", __func__);
8123 VOS_ASSERT(0);
8124 vos_mem_free(wdiExitImpsReqParams);
8125 return VOS_STATUS_E_NOMEM;
8126 }
8127 wdiExitImpsReqParams->wdiReqStatusCB = WDA_ExitImpsReqCallback;
8128 wdiExitImpsReqParams->pUserData = pWdaParams;
8129
8130 /* Store param pointer as passed in by caller */
8131 /* store Params pass it to WDI */
8132 pWdaParams->wdaWdiApiMsgParam = wdiExitImpsReqParams;
8133 pWdaParams->pWdaContext = pWDA;
8134 pWdaParams->wdaMsgParam = wdiExitImpsReqParams;
8135 status = WDI_ExitImpsReq(wdiExitImpsReqParams,
8136 (WDI_ExitImpsRspCb)WDA_ExitImpsRespCallback,
8137 pWdaParams);
8138 if (IS_WDI_STATUS_FAILURE(status))
8139 {
8140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8141 "Failure in Exit IMPS REQ WDI API, free all the memory " );
8142 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8143 vos_mem_free(pWdaParams);
8144 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008145 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008146 return CONVERT_WDI2VOS_STATUS(status) ;
8147}
Jeff Johnson295189b2012-06-20 16:38:30 -07008148/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008149 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008150 * send Enter BMPS RSP back to PE
8151 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008152void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008153{
8154 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8155 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008156 tEnterBmpsParams *pEnterBmpsRspParams;
8157
Jeff Johnson295189b2012-06-20 16:38:30 -07008158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008159 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008160 if(NULL == pWdaParams)
8161 {
8162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008163 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008164 VOS_ASSERT(0) ;
8165 return ;
8166 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008167
8168 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8169 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
8170
8171 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008172 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008173
8174 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008175 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008176 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
8177
Jeff Johnson295189b2012-06-20 16:38:30 -07008178 return ;
8179}
Jeff Johnson295189b2012-06-20 16:38:30 -07008180/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008181 * FUNCTION: WDA_EnterBmpsReqCallback
8182 * Free memory and send Enter BMPS RSP back to PE.
8183 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
8184 */
8185void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8186{
8187 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8188 tWDA_CbContext *pWDA;
8189 tEnterBmpsParams *pEnterBmpsRspParams;
8190
8191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8192 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8193
8194 if(NULL == pWdaParams)
8195 {
8196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8197 "%s: pWdaParams received NULL", __func__);
8198 VOS_ASSERT(0);
8199 return;
8200 }
8201
8202 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8203 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
8204 pEnterBmpsRspParams->status = wdiStatus;
8205
8206 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8207 {
8208 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8209 vos_mem_free(pWdaParams);
8210 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
8211 }
8212
8213 return;
8214}
8215/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008216 * FUNCTION: WDA_ProcessEnterBmpsReq
8217 * Request to WDI to Enter BMPS power state.
8218 */
8219VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
8220 tEnterBmpsParams *pEnterBmpsReqParams)
8221{
8222 WDI_Status status = WDI_STATUS_SUCCESS;
8223 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
8224 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008226 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008227 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
8228 {
8229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008230 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008231 VOS_ASSERT(0);
8232 return VOS_STATUS_E_FAILURE;
8233 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008234 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
8235 if (NULL == wdiEnterBmpsReqParams)
8236 {
8237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008238 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008239 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008240 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
8241 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008242 return VOS_STATUS_E_NOMEM;
8243 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008244 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8245 if (NULL == pWdaParams)
8246 {
8247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008248 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008249 VOS_ASSERT(0);
8250 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008251 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
8252 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008253 return VOS_STATUS_E_NOMEM;
8254 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008255 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
8256 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
8257 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
8258 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08008259 // For ESE and 11R Roaming
Jeff Johnson295189b2012-06-20 16:38:30 -07008260 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
8261 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
8262 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008263 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
8264 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008265
Jeff Johnson295189b2012-06-20 16:38:30 -07008266 /* Store param pointer as passed in by caller */
8267 /* store Params pass it to WDI */
8268 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008269 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008270 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008271 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008272 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008273 if (IS_WDI_STATUS_FAILURE(status))
8274 {
8275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8276 "Failure in Enter BMPS REQ WDI API, free all the memory" );
8277 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008278 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07008279 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008280 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008281 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008282 return CONVERT_WDI2VOS_STATUS(status);
8283}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008284
8285
8286static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
8287 WDI_Status wdiStatus,
8288 tExitBmpsParams *pExitBmpsReqParams)
8289{
8290 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
8291
8292 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
8293}
8294
8295
Jeff Johnson295189b2012-06-20 16:38:30 -07008296/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008297 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008298 * send Exit BMPS RSP back to PE
8299 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008300void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008301{
8302 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8303 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008304 tExitBmpsParams *pExitBmpsRspParams;
8305
Jeff Johnson295189b2012-06-20 16:38:30 -07008306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008307 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008308 if(NULL == pWdaParams)
8309 {
8310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008311 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008312 VOS_ASSERT(0) ;
8313 return ;
8314 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008315
8316 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8317 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
8318
8319 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008320 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008321
Jeff Johnson295189b2012-06-20 16:38:30 -07008322 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8323 vos_mem_free(pWdaParams) ;
8324
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008325 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008326 return ;
8327}
Jeff Johnson295189b2012-06-20 16:38:30 -07008328/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008329 * FUNCTION: WDA_ExitBmpsReqCallback
8330 * Free memory and send Exit BMPS RSP back to PE.
8331 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
8332 */
8333void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8334{
8335 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8336 tWDA_CbContext *pWDA;
8337 tExitBmpsParams *pExitBmpsRspParams;
8338
8339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8340 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8341
8342 if(NULL == pWdaParams)
8343 {
8344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8345 "%s: pWdaParams received NULL", __func__);
8346 VOS_ASSERT(0);
8347 return;
8348 }
8349
8350 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8351 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
8352 pExitBmpsRspParams->status = wdiStatus;
8353
8354 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8355 {
8356 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8357 vos_mem_free(pWdaParams);
8358 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
8359 }
8360
8361 return;
8362}
8363/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008364 * FUNCTION: WDA_ProcessExitBmpsReq
8365 * Request to WDI to Exit BMPS power state.
8366 */
8367VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
8368 tExitBmpsParams *pExitBmpsReqParams)
8369{
8370 WDI_Status status = WDI_STATUS_SUCCESS ;
8371 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
8372 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
8373 sizeof(WDI_ExitBmpsReqParamsType)) ;
8374 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008376 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008377 if(NULL == wdiExitBmpsReqParams)
8378 {
8379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008380 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008381 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008382 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008383 return VOS_STATUS_E_NOMEM;
8384 }
8385 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8386 if(NULL == pWdaParams)
8387 {
8388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008389 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008390 VOS_ASSERT(0);
8391 vos_mem_free(wdiExitBmpsReqParams);
8392 return VOS_STATUS_E_NOMEM;
8393 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008394 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07008395
8396 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
8397
Yue Ma7f44bbe2013-04-12 11:47:39 -07008398 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
8399 wdiExitBmpsReqParams->pUserData = pWdaParams;
8400
Jeff Johnson295189b2012-06-20 16:38:30 -07008401 /* Store param pointer as passed in by caller */
8402 /* store Params pass it to WDI */
8403 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
8404 pWdaParams->pWdaContext = pWDA;
8405 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008406 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008407 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008408 if(IS_WDI_STATUS_FAILURE(status))
8409 {
8410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8411 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008412 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8413 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008414 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008415 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008416 return CONVERT_WDI2VOS_STATUS(status) ;
8417}
Jeff Johnson295189b2012-06-20 16:38:30 -07008418/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008419 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008420 * send Enter UAPSD RSP back to PE
8421 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008422void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008423{
8424 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8425 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008426 tUapsdParams *pEnterUapsdRsqParams;
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 == pWdaParams)
8430 {
8431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008432 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008433 VOS_ASSERT(0) ;
8434 return ;
8435 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008436
8437 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8438 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
8439
8440 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008441 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008442
Jeff Johnson295189b2012-06-20 16:38:30 -07008443 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8444 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008445 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008446 return ;
8447}
Jeff Johnson295189b2012-06-20 16:38:30 -07008448/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008449 * FUNCTION: WDA_EnterUapsdReqCallback
8450 * Free memory and send Enter UAPSD RSP back to PE.
8451 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
8452 */
8453void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
8454{
8455 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8456 tWDA_CbContext *pWDA;
8457 tUapsdParams *pEnterUapsdRsqParams;
8458
8459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8460 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8461
8462 if(NULL == pWdaParams)
8463 {
8464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8465 "%s: pWdaParams received NULL", __func__);
8466 VOS_ASSERT(0);
8467 return;
8468 }
8469
8470 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8471 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
8472 pEnterUapsdRsqParams->status = wdiStatus;
8473
8474 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8475 {
8476 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8477 vos_mem_free(pWdaParams);
8478 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
8479 }
8480
8481 return;
8482}
8483/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008484 * FUNCTION: WDA_ProcessEnterUapsdReq
8485 * Request to WDI to Enter UAPSD power state.
8486 */
8487VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
8488 tUapsdParams *pEnterUapsdReqParams)
8489{
8490 WDI_Status status = WDI_STATUS_SUCCESS ;
8491 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
8492 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
8493 sizeof(WDI_EnterUapsdReqParamsType)) ;
8494 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008496 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008497 if(NULL == wdiEnterUapsdReqParams)
8498 {
8499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008500 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008501 VOS_ASSERT(0);
8502 return VOS_STATUS_E_NOMEM;
8503 }
8504 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8505 if(NULL == pWdaParams)
8506 {
8507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008508 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008509 VOS_ASSERT(0);
8510 vos_mem_free(wdiEnterUapsdReqParams);
8511 return VOS_STATUS_E_NOMEM;
8512 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008513 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
8514 pEnterUapsdReqParams->beDeliveryEnabled;
8515 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
8516 pEnterUapsdReqParams->beTriggerEnabled;
8517 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
8518 pEnterUapsdReqParams->bkDeliveryEnabled;
8519 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
8520 pEnterUapsdReqParams->bkTriggerEnabled;
8521 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
8522 pEnterUapsdReqParams->viDeliveryEnabled;
8523 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
8524 pEnterUapsdReqParams->viTriggerEnabled;
8525 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
8526 pEnterUapsdReqParams->voDeliveryEnabled;
8527 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
8528 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07008529 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008530
Yue Ma7f44bbe2013-04-12 11:47:39 -07008531 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
8532 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008533
Jeff Johnson295189b2012-06-20 16:38:30 -07008534 /* Store param pointer as passed in by caller */
8535 /* store Params pass it to WDI */
8536 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
8537 pWdaParams->pWdaContext = pWDA;
8538 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008539 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008540 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008541 if(IS_WDI_STATUS_FAILURE(status))
8542 {
8543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8544 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
8545 vos_mem_free(pWdaParams->wdaMsgParam) ;
8546 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8547 vos_mem_free(pWdaParams) ;
8548 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008549 return CONVERT_WDI2VOS_STATUS(status) ;
8550}
Jeff Johnson295189b2012-06-20 16:38:30 -07008551/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008552 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008553 * send Exit UAPSD RSP back to PE
8554 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008555void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008556{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008557
8558 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8559 tWDA_CbContext *pWDA;
8560 tExitUapsdParams *pExitUapsdRspParams;
8561
Jeff Johnson295189b2012-06-20 16:38:30 -07008562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008563 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008564 if(NULL == pWdaParams)
8565 {
8566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008567 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008568 VOS_ASSERT(0);
8569 return;
8570 }
8571
8572 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8573 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
8574
8575 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008576 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008577
8578 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8579 vos_mem_free(pWdaParams) ;
8580
8581 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008582 return ;
8583}
Jeff Johnson295189b2012-06-20 16:38:30 -07008584/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008585 * FUNCTION: WDA_ExitUapsdReqCallback
8586 * Free memory and send Exit UAPSD RSP back to PE.
8587 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
8588 */
8589void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
8590{
8591 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8592 tWDA_CbContext *pWDA;
8593 tExitUapsdParams *pExitUapsdRspParams;
8594
8595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8596 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8597
8598 if(NULL == pWdaParams)
8599 {
8600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8601 "%s: pWdaParams received NULL", __func__);
8602 VOS_ASSERT(0);
8603 return;
8604 }
8605
8606 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8607 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
8608 pExitUapsdRspParams->status = wdiStatus;
8609
8610 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8611 {
8612 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8613 vos_mem_free(pWdaParams);
8614 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
8615 }
8616
8617 return;
8618}
8619/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008620 * FUNCTION: WDA_ProcessExitUapsdReq
8621 * Request to WDI to Exit UAPSD power state.
8622 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008623VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
8624 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008625{
8626 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008627 tWDA_ReqParams *pWdaParams ;
8628 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
8629 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
8630 sizeof(WDI_ExitUapsdReqParamsType)) ;
8631
Jeff Johnson295189b2012-06-20 16:38:30 -07008632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008633 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008634
8635 if(NULL == wdiExitUapsdReqParams)
8636 {
8637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008638 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008639 VOS_ASSERT(0);
8640 return VOS_STATUS_E_NOMEM;
8641 }
8642 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8643 if(NULL == pWdaParams)
8644 {
8645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008646 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008647 VOS_ASSERT(0);
8648 vos_mem_free(wdiExitUapsdReqParams);
8649 return VOS_STATUS_E_NOMEM;
8650 }
8651
8652 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008653 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
8654 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008655
8656 /* Store param pointer as passed in by caller */
8657 /* store Params pass it to WDI */
8658 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
8659 pWdaParams->pWdaContext = pWDA;
8660 pWdaParams->wdaMsgParam = pExitUapsdParams;
8661
Yue Ma7f44bbe2013-04-12 11:47:39 -07008662 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008663 if(IS_WDI_STATUS_FAILURE(status))
8664 {
8665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8666 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008667 vos_mem_free(pWdaParams->wdaMsgParam) ;
8668 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8669 vos_mem_free(pWdaParams) ;
8670
Jeff Johnson295189b2012-06-20 16:38:30 -07008671 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008672 return CONVERT_WDI2VOS_STATUS(status) ;
8673}
8674
Jeff Johnson295189b2012-06-20 16:38:30 -07008675/*
8676 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
8677 *
8678 */
8679void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
8680{
8681 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008683 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008684 if(NULL == pWdaParams)
8685 {
8686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008687 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008688 VOS_ASSERT(0) ;
8689 return ;
8690 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008691 if( pWdaParams != NULL )
8692 {
8693 if( pWdaParams->wdaWdiApiMsgParam != NULL )
8694 {
8695 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8696 }
8697 if( pWdaParams->wdaMsgParam != NULL )
8698 {
8699 vos_mem_free(pWdaParams->wdaMsgParam) ;
8700 }
8701 vos_mem_free(pWdaParams) ;
8702 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008703 return ;
8704}
Jeff Johnson295189b2012-06-20 16:38:30 -07008705/*
8706 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
8707 * Request to WDI to set the power save params at start.
8708 */
8709VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
8710 tSirPowerSaveCfg *pPowerSaveCfg)
8711{
8712 WDI_Status status = WDI_STATUS_SUCCESS ;
8713 tHalCfg *tlvStruct = NULL ;
8714 tANI_U8 *tlvStructStart = NULL ;
8715 v_PVOID_t *configParam;
8716 tANI_U32 configParamSize;
8717 tANI_U32 *configDataValue;
8718 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
8719 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008721 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008722 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
8723 {
8724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008725 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008726 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008727 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008728 return VOS_STATUS_E_FAILURE;
8729 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008730 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
8731 if (NULL == wdiPowerSaveCfg)
8732 {
8733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008734 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008735 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008736 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008737 return VOS_STATUS_E_NOMEM;
8738 }
8739 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8740 if(NULL == pWdaParams)
8741 {
8742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008743 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008744 VOS_ASSERT(0);
8745 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008746 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008747 return VOS_STATUS_E_NOMEM;
8748 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008749 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
8750 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07008751 if(NULL == configParam)
8752 {
8753 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08008754 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008755 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07008756 vos_mem_free(pWdaParams);
8757 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008758 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008759 return VOS_STATUS_E_NOMEM;
8760 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008761 vos_mem_set(configParam, configParamSize, 0);
8762 wdiPowerSaveCfg->pConfigBuffer = configParam;
8763 tlvStruct = (tHalCfg *)configParam;
8764 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008765 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
8766 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
8767 tlvStruct->length = sizeof(tANI_U32);
8768 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8769 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07008770 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8771 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008772 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
8773 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
8774 tlvStruct->length = sizeof(tANI_U32);
8775 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8776 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07008777 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8778 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008779 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
8780 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
8781 tlvStruct->length = sizeof(tANI_U32);
8782 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8783 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07008784 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8785 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008786 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
8787 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
8788 tlvStruct->length = sizeof(tANI_U32);
8789 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8790 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07008791 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8792 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008793 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
8794 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
8795 tlvStruct->length = sizeof(tANI_U32);
8796 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8797 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07008798 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8799 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008800 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
8801 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
8802 tlvStruct->length = sizeof(tANI_U32);
8803 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8804 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07008805 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8806 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008807 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
8808 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
8809 tlvStruct->length = sizeof(tANI_U32);
8810 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8811 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07008812 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8813 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008814 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
8815 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
8816 tlvStruct->length = sizeof(tANI_U32);
8817 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8818 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
8819 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8820 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008821 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
8822 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
8823 tlvStruct->length = sizeof(tANI_U32);
8824 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8825 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
8826 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8827 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008828 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
8829 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
8830 tlvStruct->length = sizeof(tANI_U32);
8831 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8832 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07008833 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8834 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008835 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
8836 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
8837 tlvStruct->length = sizeof(tANI_U32);
8838 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8839 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07008840 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8841 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008842 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008843 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008844 /* store Params pass it to WDI */
8845 pWdaParams->wdaMsgParam = configParam;
8846 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
8847 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008848 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
8849 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008850 if(IS_WDI_STATUS_FAILURE(status))
8851 {
8852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8853 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
8854 vos_mem_free(pWdaParams->wdaMsgParam);
8855 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8856 vos_mem_free(pWdaParams);
8857 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008858 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008859 return CONVERT_WDI2VOS_STATUS(status);
8860}
Jeff Johnson295189b2012-06-20 16:38:30 -07008861/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008862 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008863 *
8864 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008865void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008866{
Yue Ma7f44bbe2013-04-12 11:47:39 -07008867 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8868
Jeff Johnson295189b2012-06-20 16:38:30 -07008869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008870 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008871
8872 if(NULL == pWdaParams)
8873 {
8874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8875 "%s: pWdaParams received NULL", __func__);
8876 VOS_ASSERT(0);
8877 return ;
8878 }
8879
8880 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07008881 vos_mem_free(pWdaParams);
8882
Jeff Johnson295189b2012-06-20 16:38:30 -07008883 return ;
8884}
Jeff Johnson295189b2012-06-20 16:38:30 -07008885/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008886 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
8887 * Free memory.
8888 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
8889 */
8890void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
8891{
8892 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8893
8894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8895 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8896
8897 if(NULL == pWdaParams)
8898 {
8899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8900 "%s: pWdaParams received NULL", __func__);
8901 VOS_ASSERT(0);
8902 return;
8903 }
8904
8905 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8906 {
8907 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8908 vos_mem_free(pWdaParams);
8909 }
8910
8911 return;
8912}
8913/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008914 * FUNCTION: WDA_SetUapsdAcParamsReq
8915 * Request to WDI to set the UAPSD params for an ac (sta mode).
8916 */
8917VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
8918 tUapsdInfo *pUapsdInfo)
8919{
8920 WDI_Status status = WDI_STATUS_SUCCESS;
8921 tWDA_CbContext *pWDA = NULL ;
8922 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
8923 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
8924 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
8925 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008927 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008928 if(NULL == wdiUapsdParams)
8929 {
8930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008931 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008932 VOS_ASSERT(0);
8933 return VOS_STATUS_E_NOMEM;
8934 }
8935 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8936 if(NULL == pWdaParams)
8937 {
8938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008939 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008940 VOS_ASSERT(0);
8941 vos_mem_free(wdiUapsdParams);
8942 return VOS_STATUS_E_NOMEM;
8943 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008944 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
8945 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
8946 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
8947 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
8948 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
8949 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008950 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
8951 wdiUapsdParams->pUserData = pWdaParams;
8952
Jeff Johnson295189b2012-06-20 16:38:30 -07008953 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07008954 pWdaParams->pWdaContext = pWDA;
8955 /* Store param pointer as passed in by caller */
8956 pWdaParams->wdaMsgParam = pUapsdInfo;
8957 /* store Params pass it to WDI */
8958 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008959 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008960 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07008961 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008962 if(IS_WDI_STATUS_FAILURE(status))
8963 {
8964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8965 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
8966 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8967 vos_mem_free(pWdaParams);
8968 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008969 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
8970 return VOS_STATUS_SUCCESS;
8971 else
8972 return VOS_STATUS_E_FAILURE;
8973
Jeff Johnson295189b2012-06-20 16:38:30 -07008974}
8975/*
8976 * FUNCTION: WDA_ClearUapsdAcParamsReq
8977 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
8978 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
8979 * and again enter the UPASD with the modified params. Hence the disable
8980 * function was kept empty.
8981 *
8982 */
8983VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
8984{
8985 /* do nothing */
8986 return VOS_STATUS_SUCCESS;
8987}
Jeff Johnson295189b2012-06-20 16:38:30 -07008988/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008989 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008990 *
8991 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008992void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008993{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008994 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8995
Jeff Johnson295189b2012-06-20 16:38:30 -07008996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008997 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008998
8999 if(NULL == pWdaParams)
9000 {
9001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009002 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009003 VOS_ASSERT(0) ;
9004 return ;
9005 }
9006
9007 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9008 vos_mem_free(pWdaParams->wdaMsgParam);
9009 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009010
Jeff Johnson295189b2012-06-20 16:38:30 -07009011 //print a msg, nothing else to do
9012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009013 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009014 return ;
9015}
Jeff Johnson295189b2012-06-20 16:38:30 -07009016/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009017 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
9018 * Free memory.
9019 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
9020 */
9021void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
9022{
9023 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9024
9025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9026 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9027
9028 if(NULL == pWdaParams)
9029 {
9030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9031 "%s: pWdaParams received NULL", __func__);
9032 VOS_ASSERT(0);
9033 return;
9034 }
9035
9036 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9037 {
9038 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9039 vos_mem_free(pWdaParams->wdaMsgParam);
9040 vos_mem_free(pWdaParams);
9041 }
9042
9043 return;
9044}
9045/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009046 * FUNCTION: WDA_UpdateUapsdParamsReq
9047 * Request to WDI to update UAPSD params (in softAP mode) for a station.
9048 */
9049VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
9050 tUpdateUapsdParams* pUpdateUapsdInfo)
9051{
9052 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009053 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009054 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
9055 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
9056 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009057 tWDA_ReqParams *pWdaParams = NULL;
9058
Jeff Johnson295189b2012-06-20 16:38:30 -07009059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009060 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009061 if(NULL == wdiUpdateUapsdParams)
9062 {
9063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009064 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009065 VOS_ASSERT(0);
9066 return VOS_STATUS_E_NOMEM;
9067 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009068 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
9069 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
9070 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009071 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
9072 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009073
9074 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9075 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009076 {
9077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009078 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009079 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009080 vos_mem_free(pUpdateUapsdInfo);
9081 vos_mem_free(wdiUpdateUapsdParams);
9082 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07009083 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009084 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009085 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07009086 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009087 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
9088 pWdaParams->pWdaContext = pWDA;
9089
Jeff Johnson43971f52012-07-17 12:26:56 -07009090 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009091 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009092 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009093
Jeff Johnson43971f52012-07-17 12:26:56 -07009094 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009095 {
9096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9097 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009098 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
9099 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9100 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009101 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009102 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009103 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009104}
Jeff Johnson295189b2012-06-20 16:38:30 -07009105/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009106 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009107 *
9108 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009109void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009110{
9111 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009113 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009114 if(WDI_STATUS_SUCCESS != wdiStatus)
9115 {
9116 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009117 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009118 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009119 if(NULL == pWdaParams)
9120 {
9121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009122 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009123 VOS_ASSERT(0) ;
9124 return ;
9125 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009126 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9127 vos_mem_free(pWdaParams->wdaMsgParam);
9128 vos_mem_free(pWdaParams);
9129 return ;
9130}
Jeff Johnson295189b2012-06-20 16:38:30 -07009131/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009132 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
9133 * Free memory.
9134 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
9135 */
9136void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9137{
9138 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9139
9140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9141 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9142
9143 if(NULL == pWdaParams)
9144 {
9145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9146 "%s: pWdaParams received NULL", __func__);
9147 VOS_ASSERT(0);
9148 return;
9149 }
9150
9151 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9152 {
9153 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9154 vos_mem_free(pWdaParams->wdaMsgParam);
9155 vos_mem_free(pWdaParams);
9156 }
9157
9158 return;
9159}
9160/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009161 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
9162 *
9163 */
9164VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
9165 tSirWlanSetRxpFilters *pWlanSuspendParam)
9166{
Jeff Johnson295189b2012-06-20 16:38:30 -07009167 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009168 WDI_Status wstatus;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +05309169 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009170 tWDA_ReqParams *pWdaParams ;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +05309171 /* Sanity Check
9172 * This is very unlikely and add assert to collect more info next time */
9173 if(NULL == pWlanSuspendParam)
9174 {
9175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9176 "%s: pWlanSuspendParam received NULL", __func__);
9177 VOS_ASSERT(0) ;
9178 return VOS_STATUS_E_FAULT;
9179 }
9180 wdiRxpFilterParams = (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
9181 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009183 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009184 if(NULL == wdiRxpFilterParams)
9185 {
9186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009187 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009188 VOS_ASSERT(0);
9189 vos_mem_free(pWlanSuspendParam);
9190 return VOS_STATUS_E_NOMEM;
9191 }
9192 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9193 if(NULL == pWdaParams)
9194 {
9195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009196 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009197 VOS_ASSERT(0);
9198 vos_mem_free(wdiRxpFilterParams);
9199 vos_mem_free(pWlanSuspendParam);
9200 return VOS_STATUS_E_NOMEM;
9201 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009202 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
9203 pWlanSuspendParam->setMcstBcstFilter;
9204 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
9205 pWlanSuspendParam->configuredMcstBcstFilterSetting;
9206
Yue Ma7f44bbe2013-04-12 11:47:39 -07009207 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
9208 wdiRxpFilterParams->pUserData = pWdaParams;
9209
Jeff Johnson295189b2012-06-20 16:38:30 -07009210 pWdaParams->pWdaContext = pWDA;
9211 pWdaParams->wdaMsgParam = pWlanSuspendParam;
9212 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009213 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009214 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07009215 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009216 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009217 {
9218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9219 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009220 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009221 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9222 vos_mem_free(pWdaParams->wdaMsgParam);
9223 vos_mem_free(pWdaParams);
9224 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009225 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009226}
Jeff Johnson295189b2012-06-20 16:38:30 -07009227/*
9228 * FUNCTION: WDA_WdiIndicationCallback
9229 *
9230 */
9231void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
9232 void* pUserData)
9233{
9234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009235 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009236}
Jeff Johnson295189b2012-06-20 16:38:30 -07009237/*
9238 * FUNCTION: WDA_ProcessWlanSuspendInd
9239 *
9240 */
9241VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
9242 tSirWlanSuspendParam *pWlanSuspendParam)
9243{
9244 WDI_Status wdiStatus;
9245 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009247 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009248 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
9249 pWlanSuspendParam->configuredMcstBcstFilterSetting;
9250 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
9251 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07009253 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
9254 if(WDI_STATUS_PENDING == wdiStatus)
9255 {
9256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009257 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009258 }
9259 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
9260 {
9261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009262 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009263 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009264 vos_mem_free(pWlanSuspendParam);
9265 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9266}
9267
Chet Lanctot186b5732013-03-18 10:26:30 -07009268#ifdef WLAN_FEATURE_11W
9269/*
9270 * FUNCTION: WDA_ProcessExcludeUnecryptInd
9271 *
9272 */
9273VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
9274 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
9275{
9276 WDI_Status wdiStatus;
9277 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
9278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9279 "------> %s ", __func__);
9280
9281 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
9282 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
9283 sizeof(tSirMacAddr));
9284
9285 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
9286 wdiExclUnencryptParams.pUserData = pWDA;
9287
9288 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
9289 if(WDI_STATUS_PENDING == wdiStatus)
9290 {
9291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9292 "Pending received for %s:%d ", __func__, __LINE__ );
9293 }
9294 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
9295 {
9296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9297 "Failure in %s:%d ", __func__, __LINE__ );
9298 }
9299 vos_mem_free(pExclUnencryptParam);
9300 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9301}
9302#endif
9303
Jeff Johnson295189b2012-06-20 16:38:30 -07009304/*
9305 * FUNCTION: WDA_ProcessWlanResumeCallback
9306 *
9307 */
9308void WDA_ProcessWlanResumeCallback(
9309 WDI_SuspendResumeRspParamsType *resumeRspParams,
9310 void* pUserData)
9311{
9312 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009314 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009315 if(NULL == pWdaParams)
9316 {
9317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009318 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009319 VOS_ASSERT(0) ;
9320 return ;
9321 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009322 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
9323 {
9324 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009325 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009326 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009327 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9328 vos_mem_free(pWdaParams->wdaMsgParam);
9329 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009330 return ;
9331}
Jeff Johnson295189b2012-06-20 16:38:30 -07009332/*
9333 * FUNCTION: WDA_ProcessWlanResumeReq
9334 *
9335 */
9336VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
9337 tSirWlanResumeParam *pWlanResumeParam)
9338{
9339 WDI_Status wdiStatus;
9340 WDI_ResumeParamsType *wdiResumeParams =
9341 (WDI_ResumeParamsType *)vos_mem_malloc(
9342 sizeof(WDI_ResumeParamsType) ) ;
9343 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009345 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009346 if(NULL == wdiResumeParams)
9347 {
9348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009349 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009350 VOS_ASSERT(0);
9351 return VOS_STATUS_E_NOMEM;
9352 }
9353 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9354 if(NULL == pWdaParams)
9355 {
9356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009357 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009358 VOS_ASSERT(0);
9359 vos_mem_free(wdiResumeParams);
9360 return VOS_STATUS_E_NOMEM;
9361 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009362 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
9363 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07009365 wdiResumeParams->wdiReqStatusCB = NULL;
9366 pWdaParams->wdaMsgParam = pWlanResumeParam;
9367 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
9368 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009369 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
9370 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
9371 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009372 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9373 {
9374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9375 "Failure in Host Resume REQ WDI API, free all the memory " );
9376 VOS_ASSERT(0);
9377 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9378 vos_mem_free(pWdaParams->wdaMsgParam);
9379 vos_mem_free(pWdaParams);
9380 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009381 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9382}
9383
Jeff Johnson295189b2012-06-20 16:38:30 -07009384/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009385 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009386 *
9387 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009388void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009389{
9390 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009392 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009393 if(NULL == pWdaParams)
9394 {
9395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009396 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009397 VOS_ASSERT(0) ;
9398 return ;
9399 }
9400
9401 vos_mem_free(pWdaParams->wdaMsgParam) ;
9402 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9403 vos_mem_free(pWdaParams) ;
9404 /*
9405 * No respone required for SetBeaconFilter req so just free the request
9406 * param here
9407 */
9408
Jeff Johnson295189b2012-06-20 16:38:30 -07009409 return ;
9410}
Jeff Johnson295189b2012-06-20 16:38:30 -07009411/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009412 * FUNCTION: WDA_SetBeaconFilterReqCallback
9413 * Free memory.
9414 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
9415 */
9416void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9417{
9418 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9419
9420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9421 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9422
9423 if(NULL == pWdaParams)
9424 {
9425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9426 "%s: pWdaParams received NULL", __func__);
9427 VOS_ASSERT(0);
9428 return;
9429 }
9430
9431 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9432 {
9433 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9434 vos_mem_free(pWdaParams->wdaMsgParam);
9435 vos_mem_free(pWdaParams);
9436 }
9437
9438 return;
9439}
9440/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009441 * FUNCTION: WDA_SetBeaconFilterReq
9442 * Request to WDI to send the beacon filtering related information.
9443 */
9444VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
9445 tBeaconFilterMsg* pBeaconFilterInfo)
9446{
9447 WDI_Status status = WDI_STATUS_SUCCESS;
9448 tANI_U8 *dstPtr, *srcPtr;
9449 tANI_U8 filterLength;
9450 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
9451 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
9452 sizeof(WDI_BeaconFilterReqParamsType) ) ;
9453 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009455 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009456 if(NULL == wdiBeaconFilterInfo)
9457 {
9458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009459 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009460 VOS_ASSERT(0);
9461 return VOS_STATUS_E_NOMEM;
9462 }
9463 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9464 if(NULL == pWdaParams)
9465 {
9466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009467 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009468 VOS_ASSERT(0);
9469 vos_mem_free(wdiBeaconFilterInfo);
9470 return VOS_STATUS_E_NOMEM;
9471 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009472 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
9473 pBeaconFilterInfo->beaconInterval;
9474 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
9475 pBeaconFilterInfo->capabilityInfo;
9476 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
9477 pBeaconFilterInfo->capabilityMask;
9478 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07009479
9480 //Fill the BssIdx
9481 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
9482
Jeff Johnson295189b2012-06-20 16:38:30 -07009483 //Fill structure with info contained in the beaconFilterTable
9484 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
9485 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
9486 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
9487 if(WDI_BEACON_FILTER_LEN < filterLength)
9488 {
9489 filterLength = WDI_BEACON_FILTER_LEN;
9490 }
9491 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009492 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
9493 wdiBeaconFilterInfo->pUserData = pWdaParams;
9494
Jeff Johnson295189b2012-06-20 16:38:30 -07009495 /* Store param pointer as passed in by caller */
9496 /* store Params pass it to WDI */
9497 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
9498 pWdaParams->pWdaContext = pWDA;
9499 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
9500
Jeff Johnson295189b2012-06-20 16:38:30 -07009501 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009502 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009503 if(IS_WDI_STATUS_FAILURE(status))
9504 {
9505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9506 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
9507 vos_mem_free(pWdaParams->wdaMsgParam) ;
9508 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9509 vos_mem_free(pWdaParams) ;
9510 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009511 return CONVERT_WDI2VOS_STATUS(status) ;
9512}
Jeff Johnson295189b2012-06-20 16:38:30 -07009513/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009514 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009515 *
9516 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009517void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009518{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009519 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9520
Jeff Johnson295189b2012-06-20 16:38:30 -07009521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009522 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009523
9524 if(NULL == pWdaParams)
9525 {
9526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009527 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009528 VOS_ASSERT(0) ;
9529 return ;
9530 }
9531
9532 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9533 vos_mem_free(pWdaParams->wdaMsgParam);
9534 vos_mem_free(pWdaParams);
9535
Jeff Johnson295189b2012-06-20 16:38:30 -07009536 //print a msg, nothing else to do
9537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009538 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009539 return ;
9540}
Yue Ma7f44bbe2013-04-12 11:47:39 -07009541/*
9542 * FUNCTION: WDA_RemBeaconFilterReqCallback
9543 * Free memory.
9544 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
9545 */
9546void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9547{
9548 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9549
9550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9551 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9552
9553 if(NULL == pWdaParams)
9554 {
9555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9556 "%s: pWdaParams received NULL", __func__);
9557 VOS_ASSERT(0);
9558 return;
9559 }
9560
9561 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9562 {
9563 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9564 vos_mem_free(pWdaParams->wdaMsgParam);
9565 vos_mem_free(pWdaParams);
9566 }
9567
9568 return;
9569}
Jeff Johnson295189b2012-06-20 16:38:30 -07009570 // TODO: PE does not have this feature for now implemented,
9571 // but the support for removing beacon filter exists between
9572 // HAL and FW. This function can be called whenever PE defines
9573 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07009574/*
9575 * FUNCTION: WDA_RemBeaconFilterReq
9576 * Request to WDI to send the removal of beacon filtering related information.
9577 */
9578VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
9579 tRemBeaconFilterMsg* pBeaconFilterInfo)
9580{
9581 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009582 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009583 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
9584 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
9585 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009586 tWDA_ReqParams *pWdaParams ;
9587
Jeff Johnson295189b2012-06-20 16:38:30 -07009588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009589 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009590 if(NULL == wdiBeaconFilterInfo)
9591 {
9592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009593 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009594 VOS_ASSERT(0);
9595 return VOS_STATUS_E_NOMEM;
9596 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009597 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9598 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009599 {
9600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009601 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009602 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009603 vos_mem_free(wdiBeaconFilterInfo);
9604 vos_mem_free(pBeaconFilterInfo);
9605 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07009606 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009607
9608 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
9609 pBeaconFilterInfo->ucIeCount;
9610 //Fill structure with info contained in the ucRemIeId
9611 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
9612 pBeaconFilterInfo->ucRemIeId,
9613 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
9614 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
9615 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009616
9617 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009618 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07009619 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009620 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
9621
9622 pWdaParams->pWdaContext = pWDA;
9623
Jeff Johnson43971f52012-07-17 12:26:56 -07009624 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009625 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009626 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009627 {
9628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9629 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009630 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009631 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9632 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009633 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009634 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009635 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009636}
Jeff Johnson295189b2012-06-20 16:38:30 -07009637/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009638 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009639 *
9640 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009641void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009642{
9643 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009645 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009646 if(NULL == pWdaParams)
9647 {
9648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009649 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009650 VOS_ASSERT(0) ;
9651 return ;
9652 }
9653
9654 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9655 vos_mem_free(pWdaParams) ;
9656
Jeff Johnson295189b2012-06-20 16:38:30 -07009657 return ;
9658}
Jeff Johnson295189b2012-06-20 16:38:30 -07009659/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009660 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
9661 * Free memory.
9662 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
9663 */
9664void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
9665{
9666 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9667
9668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9669 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9670
9671 if(NULL == pWdaParams)
9672 {
9673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9674 "%s: pWdaParams received NULL", __func__);
9675 VOS_ASSERT(0);
9676 return;
9677 }
9678
9679 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9680 {
9681 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9682 vos_mem_free(pWdaParams);
9683 }
9684
9685 return;
9686}
9687/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009688 * FUNCTION: WDA_SetRSSIThresholdsReq
9689 * Request to WDI to set the RSSI thresholds (sta mode).
9690 */
9691VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
9692{
9693 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009694 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009695 tWDA_CbContext *pWDA = NULL ;
9696 v_PVOID_t pVosContext = NULL;
9697 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
9698 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
9699 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
9700 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009702 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009703 if(NULL == wdiRSSIThresholdsInfo)
9704 {
9705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009706 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009707 VOS_ASSERT(0);
9708 return VOS_STATUS_E_NOMEM;
9709 }
9710 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9711 if(NULL == pWdaParams)
9712 {
9713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009714 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009715 VOS_ASSERT(0);
9716 vos_mem_free(wdiRSSIThresholdsInfo);
9717 return VOS_STATUS_E_NOMEM;
9718 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009719 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07009720 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
9721 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
9722 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07009723 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
9724 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
9725 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07009726 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
9727 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
9728 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009729 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
9730 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009731 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
9732 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
9733
Jeff Johnson295189b2012-06-20 16:38:30 -07009734 /* Store param pointer as passed in by caller */
9735 /* store Params pass it to WDI */
9736 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
9737 pWdaParams->pWdaContext = pWDA;
9738 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07009739 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009740 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009741 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009742 {
9743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9744 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009745 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009746 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9747 vos_mem_free(pWdaParams) ;
9748 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009749 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009750
9751}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009752/*
Yue Madb90ac12013-04-04 13:39:13 -07009753 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009754 *
9755 */
Yue Madb90ac12013-04-04 13:39:13 -07009756void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009757{
9758 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9759
9760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009761 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009762 if(NULL == pWdaParams)
9763 {
9764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009765 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009766 VOS_ASSERT(0) ;
9767 return ;
9768 }
9769
9770 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9771 vos_mem_free(pWdaParams->wdaMsgParam);
9772 vos_mem_free(pWdaParams) ;
9773
9774 //print a msg, nothing else to do
9775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -07009776 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009777 return ;
9778}
Jeff Johnson295189b2012-06-20 16:38:30 -07009779/*
Yue Madb90ac12013-04-04 13:39:13 -07009780 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -07009781 * Free memory.
9782 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -07009783 */
9784void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
9785{
9786 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9787
9788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9789 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9790
9791 if(NULL == pWdaParams)
9792 {
9793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9794 "%s: Invalid pWdaParams pointer", __func__);
9795 VOS_ASSERT(0);
9796 return;
9797 }
9798
9799 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9800 {
9801 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9802 vos_mem_free(pWdaParams->wdaMsgParam);
9803 vos_mem_free(pWdaParams);
9804 }
9805
9806 return;
9807}
9808/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009809 * FUNCTION: WDA_ProcessHostOffloadReq
9810 * Request to WDI to set the filter to minimize unnecessary host wakeup due
9811 * to broadcast traffic (sta mode).
9812 */
9813VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
9814 tSirHostOffloadReq *pHostOffloadParams)
9815{
9816 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009817 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009818 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
9819 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
9820 sizeof(WDI_HostOffloadReqParamsType)) ;
9821 tWDA_ReqParams *pWdaParams ;
9822
9823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009824 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07009825
9826 if(NULL == wdiHostOffloadInfo)
9827 {
9828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009829 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009830 VOS_ASSERT(0);
9831 return VOS_STATUS_E_NOMEM;
9832 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009833 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9834 if(NULL == pWdaParams)
9835 {
9836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009837 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009838 VOS_ASSERT(0);
9839 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009840 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009841 return VOS_STATUS_E_NOMEM;
9842 }
9843
9844 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
9845 pHostOffloadParams->offloadType;
9846 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
9847 pHostOffloadParams->enableOrDisable;
9848
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009849 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
9850 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
9851
Jeff Johnson295189b2012-06-20 16:38:30 -07009852 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
9853 {
9854 case SIR_IPV4_ARP_REPLY_OFFLOAD:
9855 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
9856 pHostOffloadParams->params.hostIpv4Addr,
9857 4);
9858 break;
9859 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
9860 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
9861 pHostOffloadParams->params.hostIpv6Addr,
9862 16);
9863 break;
9864 case SIR_IPV6_NS_OFFLOAD:
9865 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
9866 pHostOffloadParams->params.hostIpv6Addr,
9867 16);
9868
9869#ifdef WLAN_NS_OFFLOAD
9870 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
9871 {
9872 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
9873 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
9874 16);
9875 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
9876 }
9877 else
9878 {
9879 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
9880 }
9881
9882 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
9883 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
9884 16);
9885 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
9886 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
9887 6);
9888
9889 //Only two are supported so let's go through them without a loop
9890 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
9891 {
9892 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
9893 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
9894 16);
9895 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
9896 }
9897 else
9898 {
9899 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
9900 }
9901
9902 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
9903 {
9904 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
9905 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
9906 16);
9907 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
9908 }
9909 else
9910 {
9911 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
9912 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +05309913 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
9914 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07009915 break;
9916#endif //WLAN_NS_OFFLOAD
9917 default:
9918 {
9919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9920 "No Handling for Offload Type %x in WDA "
9921 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
9922 //WDA_VOS_ASSERT(0) ;
9923 }
9924 }
Yue Madb90ac12013-04-04 13:39:13 -07009925 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
9926 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009927
Jeff Johnson295189b2012-06-20 16:38:30 -07009928 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009929 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009930 /* store Params pass it to WDI */
9931 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
9932 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009933
Jeff Johnson295189b2012-06-20 16:38:30 -07009934
Jeff Johnson43971f52012-07-17 12:26:56 -07009935 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -07009936 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009937
Jeff Johnson43971f52012-07-17 12:26:56 -07009938 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009939 {
9940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
c_hpothu86feba52014-10-28 15:51:18 +05309941 "Failure in host offload REQ WDI API, free all the memory %d",
9942 wstatus);
Jeff Johnson43971f52012-07-17 12:26:56 -07009943 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009944 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9945 vos_mem_free(pWdaParams->wdaMsgParam);
9946 vos_mem_free(pWdaParams) ;
9947 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009948 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009949
9950}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009951/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009952 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009953 *
9954 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009955void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009956{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009957 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9958
Jeff Johnson295189b2012-06-20 16:38:30 -07009959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009960 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009961
9962 if(NULL == pWdaParams)
9963 {
9964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009965 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009966 VOS_ASSERT(0) ;
9967 return ;
9968 }
9969
9970 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9971 vos_mem_free(pWdaParams->wdaMsgParam);
9972 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009973
Jeff Johnson295189b2012-06-20 16:38:30 -07009974 //print a msg, nothing else to do
9975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009976 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009977 return ;
9978}
Jeff Johnson295189b2012-06-20 16:38:30 -07009979/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009980 * FUNCTION: WDA_KeepAliveReqCallback
9981 * Free memory.
9982 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
9983 */
9984void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
9985{
9986 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9987
9988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9989 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9990
9991 if(NULL == pWdaParams)
9992 {
9993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9994 "%s: pWdaParams received NULL", __func__);
9995 VOS_ASSERT(0);
9996 return;
9997 }
9998
9999 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10000 {
10001 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10002 vos_mem_free(pWdaParams->wdaMsgParam);
10003 vos_mem_free(pWdaParams);
10004 }
10005
10006 return;
10007}
10008/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010009 * FUNCTION: WDA_ProcessKeepAliveReq
10010 * Request to WDI to send Keep Alive packets to minimize unnecessary host
10011 * wakeup due to broadcast traffic (sta mode).
10012 */
10013VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
10014 tSirKeepAliveReq *pKeepAliveParams)
10015{
10016 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010017 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010018 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
10019 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
10020 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010021 tWDA_ReqParams *pWdaParams;
10022
Jeff Johnson295189b2012-06-20 16:38:30 -070010023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010024 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010025 if(NULL == wdiKeepAliveInfo)
10026 {
10027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010028 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010029 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010030 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010031 return VOS_STATUS_E_NOMEM;
10032 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010033
10034 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10035 if(NULL == pWdaParams)
10036 {
10037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010038 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010039 VOS_ASSERT(0);
10040 vos_mem_free(wdiKeepAliveInfo);
10041 vos_mem_free(pKeepAliveParams);
10042 return VOS_STATUS_E_NOMEM;
10043 }
10044
Jeff Johnson295189b2012-06-20 16:38:30 -070010045 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
10046 pKeepAliveParams->packetType;
10047 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
10048 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010049
10050 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
10051 pKeepAliveParams->bssId,
10052 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010053
10054 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
10055 {
10056 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
10057 pKeepAliveParams->hostIpv4Addr,
10058 SIR_IPV4_ADDR_LEN);
10059 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
10060 pKeepAliveParams->destIpv4Addr,
10061 SIR_IPV4_ADDR_LEN);
10062 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
10063 pKeepAliveParams->destMacAddr,
10064 SIR_MAC_ADDR_LEN);
10065 }
10066 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
10067 {
10068 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
10069 SIR_IPV4_ADDR_LEN,
10070 0);
10071 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
10072 SIR_IPV4_ADDR_LEN,
10073 0);
10074 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
10075 SIR_MAC_ADDR_LEN,
10076 0);
10077 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010078 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
10079 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010080
Jeff Johnson295189b2012-06-20 16:38:30 -070010081 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010082 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010083 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010084 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
10085 pWdaParams->pWdaContext = pWDA;
10086
Jeff Johnson295189b2012-06-20 16:38:30 -070010087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
10088 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
10089 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
10090 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
10091 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
10092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
10093 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
10094 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
10095 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
10096 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
10097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10098 "WDA DMAC : %d:%d:%d:%d:%d:%d",
10099 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
10100 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
10101 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
10102 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
10103 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
10104 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
10105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10106 "TimePeriod %d PacketType %d",
10107 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
10108 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -070010109 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010110 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010111
Jeff Johnson43971f52012-07-17 12:26:56 -070010112 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010113 {
10114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10115 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010116 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010117 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10118 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070010119 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010120 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010121 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010122
10123}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010124/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010125 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010126 *
10127 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010128void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010129 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
10130 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010131{
10132 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010134 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010135 if(NULL == pWdaParams)
10136 {
10137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010138 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010139 VOS_ASSERT(0) ;
10140 return ;
10141 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010142 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10143 vos_mem_free(pWdaParams->wdaMsgParam);
10144 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010145 return ;
10146}
Jeff Johnson295189b2012-06-20 16:38:30 -070010147/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010148 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
10149 * Free memory.
10150 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
10151 */
10152void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
10153{
10154 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10155
10156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10157 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10158
10159 if(NULL == pWdaParams)
10160 {
10161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10162 "%s: pWdaParams received NULL", __func__);
10163 VOS_ASSERT(0);
10164 return;
10165 }
10166
10167 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10168 {
10169 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10170 vos_mem_free(pWdaParams->wdaMsgParam);
10171 vos_mem_free(pWdaParams);
10172 }
10173
10174 return;
10175}
10176
10177/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010178 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
10179 * Request to WDI to add WOWL Bcast pattern
10180 */
10181VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
10182 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
10183{
10184 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010185 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010186 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
10187 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
10188 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
10189 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010191 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010192 if(NULL == wdiWowlAddBcPtrnInfo)
10193 {
10194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010195 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010196 VOS_ASSERT(0);
10197 return VOS_STATUS_E_NOMEM;
10198 }
10199 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10200 if(NULL == pWdaParams)
10201 {
10202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010203 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010204 VOS_ASSERT(0);
10205 vos_mem_free(wdiWowlAddBcPtrnInfo);
10206 return VOS_STATUS_E_NOMEM;
10207 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010208 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
10209 pWowlAddBcPtrnParams->ucPatternId;
10210 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
10211 pWowlAddBcPtrnParams->ucPatternByteOffset;
10212 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
10213 pWowlAddBcPtrnParams->ucPatternMaskSize;
10214 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
10215 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -070010216 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
10217 {
10218 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
10219 pWowlAddBcPtrnParams->ucPattern,
10220 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
10221 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
10222 pWowlAddBcPtrnParams->ucPatternMask,
10223 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
10224 }
10225 else
10226 {
10227 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
10228 pWowlAddBcPtrnParams->ucPattern,
10229 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10230 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
10231 pWowlAddBcPtrnParams->ucPatternMask,
10232 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10233
10234 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
10235 pWowlAddBcPtrnParams->ucPatternExt,
10236 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10237 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
10238 pWowlAddBcPtrnParams->ucPatternMaskExt,
10239 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10240 }
10241
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010242 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
10243 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
10244
Yue Ma7f44bbe2013-04-12 11:47:39 -070010245 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
10246 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010247 /* Store param pointer as passed in by caller */
10248 /* store Params pass it to WDI */
10249 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
10250 pWdaParams->pWdaContext = pWDA;
10251 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010252 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010253 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010254 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010255 {
10256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10257 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010258 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010259 vos_mem_free(pWdaParams->wdaMsgParam) ;
10260 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10261 vos_mem_free(pWdaParams) ;
10262 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010263 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010264
10265}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010266/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010267 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010268 *
10269 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010270void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010271 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
10272 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010273{
10274 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010276 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010277 if(NULL == pWdaParams)
10278 {
10279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010280 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010281 VOS_ASSERT(0) ;
10282 return ;
10283 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010284 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10285 vos_mem_free(pWdaParams->wdaMsgParam);
10286 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010287 return ;
10288}
Jeff Johnson295189b2012-06-20 16:38:30 -070010289/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010290 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
10291 * Free memory.
10292 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
10293 */
10294void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
10295{
10296 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10297
10298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10299 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10300
10301 if(NULL == pWdaParams)
10302 {
10303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10304 "%s: pWdaParams received NULL", __func__);
10305 VOS_ASSERT(0);
10306 return;
10307 }
10308
10309 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10310 {
10311 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10312 vos_mem_free(pWdaParams->wdaMsgParam);
10313 vos_mem_free(pWdaParams);
10314 }
10315
10316 return;
10317}
10318/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010319 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
10320 * Request to WDI to delete WOWL Bcast pattern
10321 */
10322VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
10323 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
10324{
10325 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010326 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010327 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
10328 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
10329 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
10330 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010332 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010333 if(NULL == wdiWowlDelBcPtrnInfo)
10334 {
10335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010336 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010337 VOS_ASSERT(0);
10338 return VOS_STATUS_E_NOMEM;
10339 }
10340 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10341 if(NULL == pWdaParams)
10342 {
10343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010344 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010345 VOS_ASSERT(0);
10346 vos_mem_free(wdiWowlDelBcPtrnInfo);
10347 return VOS_STATUS_E_NOMEM;
10348 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010349 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
10350 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010351
10352 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
10353 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
10354
Yue Ma7f44bbe2013-04-12 11:47:39 -070010355 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
10356 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010357 /* Store param pointer as passed in by caller */
10358 /* store Params pass it to WDI */
10359 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
10360 pWdaParams->pWdaContext = pWDA;
10361 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010362 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010363 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010364 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010365 {
10366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10367 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010368 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010369 vos_mem_free(pWdaParams->wdaMsgParam) ;
10370 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10371 vos_mem_free(pWdaParams) ;
10372 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010373 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010374
10375}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010376/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010377 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010378 *
10379 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010380void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010381{
10382 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10383 tWDA_CbContext *pWDA;
10384 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010386 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010387 if(NULL == pWdaParams)
10388 {
10389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010390 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010391 VOS_ASSERT(0) ;
10392 return ;
10393 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010394 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
10395 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
10396
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010397 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
10398
Jeff Johnson295189b2012-06-20 16:38:30 -070010399 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10400 vos_mem_free(pWdaParams) ;
10401
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010402 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010403 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -070010404 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010405 return ;
10406}
Jeff Johnson295189b2012-06-20 16:38:30 -070010407/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010408 * FUNCTION: WDA_WowlEnterReqCallback
10409 * Free memory and send WOWL Enter RSP back to PE.
10410 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
10411 */
10412void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
10413{
10414 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10415 tWDA_CbContext *pWDA;
10416 tSirHalWowlEnterParams *pWowlEnterParams;
10417
10418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10419 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10420
10421 if(NULL == pWdaParams)
10422 {
10423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10424 "%s: pWdaParams received NULL", __func__);
10425 VOS_ASSERT(0);
10426 return;
10427 }
10428
10429 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10430 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
10431 pWowlEnterParams->status = wdiStatus;
10432
10433 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10434 {
10435 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10436 vos_mem_free(pWdaParams);
10437 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
10438 }
10439
10440 return;
10441}
10442/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010443 * FUNCTION: WDA_ProcessWowlEnterReq
10444 * Request to WDI to enter WOWL
10445 */
10446VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
10447 tSirHalWowlEnterParams *pWowlEnterParams)
10448{
10449 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010450 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010451 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
10452 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
10453 sizeof(WDI_WowlEnterReqParamsType)) ;
10454 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010456 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010457 if(NULL == wdiWowlEnterInfo)
10458 {
10459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010460 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010461 VOS_ASSERT(0);
10462 return VOS_STATUS_E_NOMEM;
10463 }
10464 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10465 if(NULL == pWdaParams)
10466 {
10467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010468 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010469 VOS_ASSERT(0);
10470 vos_mem_free(wdiWowlEnterInfo);
10471 return VOS_STATUS_E_NOMEM;
10472 }
Kumar Anandaca924e2013-07-22 14:35:34 -070010473
10474 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
10475
Jeff Johnson295189b2012-06-20 16:38:30 -070010476 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
10477 pWowlEnterParams->magicPtrn,
10478 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010479 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
10480 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010481 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
10482 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010483 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
10484 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010485 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
10486 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010487 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
10488 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010489 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
10490 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010491 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
10492 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -070010493 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
10494 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -070010495#ifdef WLAN_WAKEUP_EVENTS
10496 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
10497 pWowlEnterParams->ucWoWEAPIDRequestEnable;
10498
10499 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
10500 pWowlEnterParams->ucWoWEAPOL4WayEnable;
10501
10502 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
10503 pWowlEnterParams->ucWowNetScanOffloadMatch;
10504
10505 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
10506 pWowlEnterParams->ucWowGTKRekeyError;
10507
10508 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
10509 pWowlEnterParams->ucWoWBSSConnLoss;
10510#endif // WLAN_WAKEUP_EVENTS
10511
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010512 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
10513 pWowlEnterParams->bssIdx;
10514
Yue Ma7f44bbe2013-04-12 11:47:39 -070010515 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
10516 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010517 /* Store param pointer as passed in by caller */
10518 /* store Params pass it to WDI */
10519 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
10520 pWdaParams->pWdaContext = pWDA;
10521 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010522 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010523 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010524 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010525 {
10526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10527 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010528 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010529 vos_mem_free(pWdaParams->wdaMsgParam) ;
10530 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10531 vos_mem_free(pWdaParams) ;
10532 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010533 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010534
10535}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010536/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010537 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010538 *
10539 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010540void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010541{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010542 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10543 tWDA_CbContext *pWDA;
10544 tSirHalWowlExitParams *pWowlExitParams;
10545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010546 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010547 if(NULL == pWdaParams)
10548 {
10549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010550 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010551 VOS_ASSERT(0) ;
10552 return ;
10553 }
10554 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
10555 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
10556
10557 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010558 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010559
10560 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10561 vos_mem_free(pWdaParams) ;
10562
Jeff Johnson295189b2012-06-20 16:38:30 -070010563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010564 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010565 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010566 return ;
10567}
Jeff Johnson295189b2012-06-20 16:38:30 -070010568/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010569 * FUNCTION: WDA_WowlExitReqCallback
10570 * Free memory and send WOWL Exit RSP back to PE.
10571 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
10572 */
10573void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
10574{
10575 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10576 tWDA_CbContext *pWDA;
10577 tSirHalWowlExitParams *pWowlExitParams;
10578
10579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10580 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10581
10582 if(NULL == pWdaParams)
10583 {
10584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10585 "%s: pWdaParams received NULL", __func__);
10586 VOS_ASSERT(0);
10587 return;
10588 }
10589
10590 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10591 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
10592 pWowlExitParams->status = wdiStatus;
10593
10594 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10595 {
10596 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10597 vos_mem_free(pWdaParams);
10598 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
10599 }
10600
10601 return;
10602}
10603/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010604 * FUNCTION: WDA_ProcessWowlExitReq
10605 * Request to WDI to add WOWL Bcast pattern
10606 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010607VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
10608 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010609{
10610 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010611 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010612 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
10613 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
10614 sizeof(WDI_WowlExitReqParamsType)) ;
10615 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010617 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010618 if(NULL == wdiWowlExitInfo)
10619 {
10620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010621 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010622 VOS_ASSERT(0);
10623 return VOS_STATUS_E_NOMEM;
10624 }
10625 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10626 if(NULL == pWdaParams)
10627 {
10628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010629 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010630 VOS_ASSERT(0);
10631 vos_mem_free(wdiWowlExitInfo);
10632 return VOS_STATUS_E_NOMEM;
10633 }
10634
10635 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
10636 pWowlExitParams->bssIdx;
10637
Yue Ma7f44bbe2013-04-12 11:47:39 -070010638 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
10639 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010640
10641 /* Store param pointer as passed in by caller */
10642 /* store Params pass it to WDI */
10643 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
10644 pWdaParams->pWdaContext = pWDA;
10645 pWdaParams->wdaMsgParam = pWowlExitParams;
10646
10647 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010648 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010649
Jeff Johnson43971f52012-07-17 12:26:56 -070010650 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010651 {
10652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10653 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010654 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010655 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10656 vos_mem_free(pWdaParams->wdaMsgParam);
10657 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010658 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010659 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010660}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010661/*
10662 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
10663 * Request to WDI to determine whether a given station is capable of
10664 * using HW-based frame translation
10665 */
10666v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
10667 tANI_U8 staIdx)
10668{
10669 return WDI_IsHwFrameTxTranslationCapable(staIdx);
10670}
Katya Nigam6201c3e2014-05-27 17:51:42 +053010671
10672/*
10673 * FUNCTION: WDA_IsSelfSTA
10674 * Request to WDI to determine whether a given STAID is self station
10675 * index.
10676 */
10677v_BOOL_t WDA_IsSelfSTA(v_PVOID_t pVosContext, tANI_U8 ucSTAIdx)
10678{
10679
10680 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
10681
Girish Gowli05cf44e2014-06-12 21:53:37 +053010682 if (NULL != pWDA)
10683 return WDI_IsSelfSTA(pWDA->pWdiContext,ucSTAIdx);
10684 else
10685 return VOS_TRUE;
Katya Nigam6201c3e2014-05-27 17:51:42 +053010686}
Jeff Johnson295189b2012-06-20 16:38:30 -070010687/*
10688 * FUNCTION: WDA_NvDownloadReqCallback
10689 * send NV Download RSP back to PE
10690 */
10691void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
10692 void* pUserData)
10693{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010694
10695 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
10696 tWDA_CbContext *pWDA;
10697
Jeff Johnson295189b2012-06-20 16:38:30 -070010698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010699 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010700
10701 if(NULL == pWdaParams)
10702 {
10703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010704 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010705 VOS_ASSERT(0) ;
10706 return ;
10707 }
10708
10709 pWDA = pWdaParams->pWdaContext;
10710
Jeff Johnson295189b2012-06-20 16:38:30 -070010711 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010712 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10713 vos_mem_free(pWdaParams);
10714
Jeff Johnson295189b2012-06-20 16:38:30 -070010715 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070010716 return ;
10717}
Jeff Johnson295189b2012-06-20 16:38:30 -070010718/*
10719 * FUNCTION: WDA_ProcessNvDownloadReq
10720 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
10721 */
10722VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
10723{
10724 /* Initialize the local Variables*/
10725 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
10726 v_VOID_t *pNvBuffer=NULL;
10727 v_SIZE_t bufferSize = 0;
10728 WDI_Status status = WDI_STATUS_E_FAILURE;
10729 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010730 tWDA_ReqParams *pWdaParams ;
10731
Jeff Johnson295189b2012-06-20 16:38:30 -070010732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010733 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010734 if(NULL == pWDA)
10735 {
10736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010737 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010738 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070010739 return VOS_STATUS_E_FAILURE;
10740 }
10741
10742 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -070010743 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
10744
Jeff Johnson295189b2012-06-20 16:38:30 -070010745 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
10746 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010747 if(NULL == wdiNvDownloadReqParam)
10748 {
10749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010750 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010751 VOS_ASSERT(0);
10752 return VOS_STATUS_E_NOMEM;
10753 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010754 /* Copy Params to wdiNvDownloadReqParam*/
10755 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
10756 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010757
10758 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10759 if(NULL == pWdaParams)
10760 {
10761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010762 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010763 VOS_ASSERT(0);
10764 vos_mem_free(wdiNvDownloadReqParam);
10765 return VOS_STATUS_E_NOMEM;
10766 }
10767
Jeff Johnson295189b2012-06-20 16:38:30 -070010768 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010769 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
10770 pWdaParams->wdaMsgParam = NULL;
10771 pWdaParams->pWdaContext = pWDA;
10772
10773
Jeff Johnson295189b2012-06-20 16:38:30 -070010774 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010775
Jeff Johnson295189b2012-06-20 16:38:30 -070010776 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010777 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
10778
Jeff Johnson295189b2012-06-20 16:38:30 -070010779 if(IS_WDI_STATUS_FAILURE(status))
10780 {
10781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10782 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010783 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10784 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010785 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010786 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010787}
10788/*
10789 * FUNCTION: WDA_FlushAcReqCallback
10790 * send Flush AC RSP back to TL
10791 */
10792void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
10793{
10794 vos_msg_t wdaMsg = {0} ;
10795 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10796 tFlushACReq *pFlushACReqParams;
10797 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010799 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010800 if(NULL == pWdaParams)
10801 {
10802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010803 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010804 VOS_ASSERT(0) ;
10805 return ;
10806 }
10807
10808 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
10809 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
10810 if(NULL == pFlushACRspParams)
10811 {
10812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010813 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010814 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010815 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010816 return ;
10817 }
10818 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
10819 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
10820 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
10821 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
10822 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010823 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010824 vos_mem_free(pWdaParams->wdaMsgParam) ;
10825 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10826 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010827 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
10828 wdaMsg.bodyptr = (void *)pFlushACRspParams;
10829 // POST message to TL
10830 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
10831
Jeff Johnson295189b2012-06-20 16:38:30 -070010832 return ;
10833}
Jeff Johnson295189b2012-06-20 16:38:30 -070010834/*
10835 * FUNCTION: WDA_ProcessFlushAcReq
10836 * Request to WDI to Update the DELBA REQ params.
10837 */
10838VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
10839 tFlushACReq *pFlushAcReqParams)
10840{
10841 WDI_Status status = WDI_STATUS_SUCCESS ;
10842 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
10843 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
10844 sizeof(WDI_FlushAcReqParamsType)) ;
10845 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010846 if(NULL == wdiFlushAcReqParam)
10847 {
10848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010849 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010850 VOS_ASSERT(0);
10851 return VOS_STATUS_E_NOMEM;
10852 }
10853 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10854 if(NULL == pWdaParams)
10855 {
10856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010857 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010858 VOS_ASSERT(0);
10859 vos_mem_free(wdiFlushAcReqParam);
10860 return VOS_STATUS_E_NOMEM;
10861 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010863 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010864 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
10865 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
10866 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
10867 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -070010868 /* Store Flush AC pointer, as this will be used for response */
10869 /* store Params pass it to WDI */
10870 pWdaParams->pWdaContext = pWDA;
10871 pWdaParams->wdaMsgParam = pFlushAcReqParams;
10872 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010873 status = WDI_FlushAcReq(wdiFlushAcReqParam,
10874 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010875 if(IS_WDI_STATUS_FAILURE(status))
10876 {
10877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10878 "Failure in Flush AC REQ Params WDI API, free all the memory " );
10879 vos_mem_free(pWdaParams->wdaMsgParam) ;
10880 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10881 vos_mem_free(pWdaParams) ;
10882 //TODO: respond to TL with failure
10883 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010884 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010885}
Jeff Johnson295189b2012-06-20 16:38:30 -070010886/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010887 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010888 *
10889 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010890void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010891{
10892 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10893 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -070010894 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010895
10896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010897 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010898 if(NULL == pWdaParams)
10899 {
10900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010901 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010902 VOS_ASSERT(0) ;
10903 return ;
10904 }
10905 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10906 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
10907 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
10908 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10909 {
10910 pWDA->wdaAmpSessionOn = VOS_FALSE;
10911 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010912 vos_mem_free(pWdaParams->wdaMsgParam) ;
10913 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10914 vos_mem_free(pWdaParams) ;
10915 /*
10916 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
10917 * param here
10918 */
Jeff Johnson295189b2012-06-20 16:38:30 -070010919 return ;
10920}
Yue Ma7f44bbe2013-04-12 11:47:39 -070010921/*
10922 * FUNCTION: WDA_BtAmpEventReqCallback
10923 * Free memory.
10924 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
10925 */
10926void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
10927{
10928 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10929 tWDA_CbContext *pWDA;
10930 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010931
Yue Ma7f44bbe2013-04-12 11:47:39 -070010932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10933 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10934
10935 if(NULL == pWdaParams)
10936 {
10937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10938 "%s: pWdaParams received NULL", __func__);
10939 VOS_ASSERT(0);
10940 return;
10941 }
10942
10943 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10944 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
10945
10946 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
10947 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10948 {
10949 pWDA->wdaAmpSessionOn = VOS_FALSE;
10950 }
10951
10952 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10953 {
10954 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10955 vos_mem_free(pWdaParams->wdaMsgParam);
10956 vos_mem_free(pWdaParams);
10957 }
10958
10959 return;
10960}
Jeff Johnson295189b2012-06-20 16:38:30 -070010961/*
10962 * FUNCTION: WDA_ProcessBtAmpEventReq
10963 * Request to WDI to Update with BT AMP events.
10964 */
10965VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
10966 tSmeBtAmpEvent *pBtAmpEventParams)
10967{
10968 WDI_Status status = WDI_STATUS_SUCCESS ;
10969 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
10970 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
10971 sizeof(WDI_BtAmpEventParamsType)) ;
10972 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010974 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010975 if(NULL == wdiBtAmpEventParam)
10976 {
10977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010978 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010979 VOS_ASSERT(0);
10980 return VOS_STATUS_E_NOMEM;
10981 }
10982 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10983 if(NULL == pWdaParams)
10984 {
10985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010986 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010987 VOS_ASSERT(0);
10988 vos_mem_free(wdiBtAmpEventParam);
10989 return VOS_STATUS_E_NOMEM;
10990 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010991 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
10992 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010993 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
10994 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010995 /* Store BT AMP event pointer, as this will be used for response */
10996 /* store Params pass it to WDI */
10997 pWdaParams->pWdaContext = pWDA;
10998 pWdaParams->wdaMsgParam = pBtAmpEventParams;
10999 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011000 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011001 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011002 if(IS_WDI_STATUS_FAILURE(status))
11003 {
11004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11005 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
11006 vos_mem_free(pWdaParams->wdaMsgParam) ;
11007 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11008 vos_mem_free(pWdaParams) ;
11009 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011010 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
11011 {
11012 pWDA->wdaAmpSessionOn = VOS_TRUE;
11013 }
11014 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011015}
11016
Jeff Johnson295189b2012-06-20 16:38:30 -070011017/*
11018 * FUNCTION: WDA_FTMCommandReqCallback
11019 * Handle FTM CMD response came from HAL
11020 * Route responce to HDD FTM
11021 */
11022void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
11023 void *usrData)
11024{
11025 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011026 if((NULL == pWDA) || (NULL == ftmCmdRspData))
11027 {
11028 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053011029 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070011030 return;
11031 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011032 /* Release Current FTM Command Request */
11033 vos_mem_free(pWDA->wdaFTMCmdReq);
11034 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011035 /* Post FTM Responce to HDD FTM */
11036 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070011037 return;
11038}
Jeff Johnson295189b2012-06-20 16:38:30 -070011039/*
11040 * FUNCTION: WDA_ProcessFTMCommand
11041 * Send FTM command to WDI
11042 */
11043VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
11044 tPttMsgbuffer *pPTTFtmCmd)
11045{
11046 WDI_Status status = WDI_STATUS_SUCCESS;
11047 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011048 ftmCMDReq = (WDI_FTMCommandReqType *)
11049 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
11050 if(NULL == ftmCMDReq)
11051 {
11052 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11053 "WDA FTM Command buffer alloc fail");
11054 return VOS_STATUS_E_NOMEM;
11055 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011056 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
11057 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070011058 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070011059 /* Send command to WDI */
11060 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070011061 return status;
11062}
Jeff Johnsone7245742012-09-05 17:12:55 -070011063#ifdef FEATURE_OEM_DATA_SUPPORT
11064/*
11065 * FUNCTION: WDA_StartOemDataReqCallback
11066 *
11067 */
11068void WDA_StartOemDataReqCallback(
11069 WDI_oemDataRspParamsType *wdiOemDataRspParams,
11070 void* pUserData)
11071{
11072 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011073 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11074 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -070011075 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011076
Jeff Johnsone7245742012-09-05 17:12:55 -070011077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011078 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011079
11080 if(NULL == pWdaParams)
11081 {
11082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011083 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011084 VOS_ASSERT(0) ;
11085 return ;
11086 }
11087 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
11088
Jeff Johnsone7245742012-09-05 17:12:55 -070011089 if(NULL == pWDA)
11090 {
11091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011092 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011093 VOS_ASSERT(0);
11094 return ;
11095 }
11096
11097 /*
11098 * Allocate memory for response params sent to PE
11099 */
11100 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
11101
11102 // Check if memory is allocated for OemdataMeasRsp Params.
11103 if(NULL == pOemDataRspParams)
11104 {
11105 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11106 "OEM DATA WDA callback alloc fail");
11107 VOS_ASSERT(0) ;
11108 return;
11109 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011110
Jeff Johnsone7245742012-09-05 17:12:55 -070011111 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011112 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11113 vos_mem_free(pWdaParams->wdaMsgParam);
11114 vos_mem_free(pWdaParams) ;
11115
Jeff Johnsone7245742012-09-05 17:12:55 -070011116 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080011117 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070011118 * Also, here success always means that we have atleast one BSSID.
11119 */
11120 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
11121
11122 //enable Tx
11123 status = WDA_ResumeDataTx(pWDA);
11124 if(status != VOS_STATUS_SUCCESS)
11125 {
11126 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
11127 }
11128 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
11129 return ;
11130}
11131/*
11132 * FUNCTION: WDA_ProcessStartOemDataReq
11133 * Send Start Oem Data Req to WDI
11134 */
11135VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
11136 tStartOemDataReq *pOemDataReqParams)
11137{
11138 WDI_Status status = WDI_STATUS_SUCCESS;
11139 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011140 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070011141
11142 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
11143
11144 if(NULL == wdiOemDataReqParams)
11145 {
11146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011147 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011148 VOS_ASSERT(0);
11149 return VOS_STATUS_E_NOMEM;
11150 }
11151
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011152 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
11153 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
11154 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
11155 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070011156
11157 wdiOemDataReqParams->wdiReqStatusCB = NULL;
11158
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011159 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11160 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070011161 {
11162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011163 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011164 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011165 vos_mem_free(pOemDataReqParams);
11166 VOS_ASSERT(0);
11167 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070011168 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011169
Bernald44a1ae2013-01-09 08:30:39 -080011170 pWdaParams->pWdaContext = (void*)pWDA;
11171 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
11172 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011173
11174 status = WDI_StartOemDataReq(wdiOemDataReqParams,
11175 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011176
11177 if(IS_WDI_STATUS_FAILURE(status))
11178 {
11179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11180 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011181 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11182 vos_mem_free(pWdaParams->wdaMsgParam);
11183 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011184 }
11185 return CONVERT_WDI2VOS_STATUS(status) ;
11186}
11187#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070011188/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011189 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011190 *
11191 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011192void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011193{
11194 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011196 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011197 if(NULL == pWdaParams)
11198 {
11199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011200 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011201 VOS_ASSERT(0) ;
11202 return ;
11203 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011204
11205 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11206 vos_mem_free(pWdaParams->wdaMsgParam);
11207 vos_mem_free(pWdaParams);
11208
11209 return ;
11210}
11211/*
11212 * FUNCTION: WDA_SetTxPerTrackingReqCallback
11213 * Free memory.
11214 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
11215 */
11216void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
11217{
11218 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11219
11220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11221 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11222
11223 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070011224 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070011225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11226 "%s: pWdaParams received NULL", __func__);
11227 VOS_ASSERT(0);
11228 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011229 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011230
11231 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011232 {
11233 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011234 vos_mem_free(pWdaParams->wdaMsgParam);
11235 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011236 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011237
11238 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011239}
Jeff Johnson295189b2012-06-20 16:38:30 -070011240#ifdef WLAN_FEATURE_GTK_OFFLOAD
11241/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011242 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011243 *
11244 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011245void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011246 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011247{
11248 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11249
11250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011251 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080011252 if(NULL == pWdaParams)
11253 {
11254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11255 "%s: pWdaParams received NULL", __func__);
11256 VOS_ASSERT(0);
11257 return;
11258 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011259
Jeff Johnson295189b2012-06-20 16:38:30 -070011260 vos_mem_free(pWdaParams->wdaMsgParam) ;
11261 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11262 vos_mem_free(pWdaParams) ;
11263
11264 //print a msg, nothing else to do
11265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011266 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011267
11268 return ;
11269}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011270/*
11271 * FUNCTION: WDA_GTKOffloadReqCallback
11272 * Free memory.
11273 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
11274 */
11275void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
11276{
11277 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011278
Yue Ma7f44bbe2013-04-12 11:47:39 -070011279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11280 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11281
11282 if(NULL == pWdaParams)
11283 {
11284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11285 "%s: pWdaParams received NULL", __func__);
11286 VOS_ASSERT(0);
11287 return;
11288 }
11289
11290 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11291 {
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053011292 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
11293 sizeof(WDI_GtkOffloadReqMsg));
11294 vos_mem_zero(pWdaParams->wdaMsgParam,
11295 sizeof(tSirGtkOffloadParams));
Yue Ma7f44bbe2013-04-12 11:47:39 -070011296 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11297 vos_mem_free(pWdaParams->wdaMsgParam);
11298 vos_mem_free(pWdaParams);
11299 }
11300
11301 return;
11302}
Jeff Johnson295189b2012-06-20 16:38:30 -070011303/*
11304 * FUNCTION: WDA_ProcessGTKOffloadReq
11305 * Request to WDI to set the filter to minimize unnecessary host wakeup due
11306 * to broadcast traffic (sta mode).
11307 */
11308VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
11309 tpSirGtkOffloadParams pGtkOffloadParams)
11310{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011311 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011312 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
11313 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
11314 sizeof(WDI_GtkOffloadReqMsg)) ;
11315 tWDA_ReqParams *pWdaParams ;
11316
11317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011318 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011319
11320 if(NULL == wdiGtkOffloadReqMsg)
11321 {
11322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011323 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011324 VOS_ASSERT(0);
11325 return VOS_STATUS_E_NOMEM;
11326 }
11327
11328 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11329 if(NULL == pWdaParams)
11330 {
11331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011332 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011333 VOS_ASSERT(0);
11334 vos_mem_free(wdiGtkOffloadReqMsg);
11335 return VOS_STATUS_E_NOMEM;
11336 }
11337
11338 //
11339 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
11340 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011341
11342 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011343 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011344
Jeff Johnson295189b2012-06-20 16:38:30 -070011345 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
11346 // Copy KCK
11347 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
11348 // Copy KEK
11349 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
11350 // Copy KeyReplayCounter
11351 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
11352 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
11353
Yue Ma7f44bbe2013-04-12 11:47:39 -070011354 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
11355 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011356
Jeff Johnson295189b2012-06-20 16:38:30 -070011357
11358 /* Store Params pass it to WDI */
11359 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
11360 pWdaParams->pWdaContext = pWDA;
11361 /* Store param pointer as passed in by caller */
11362 pWdaParams->wdaMsgParam = pGtkOffloadParams;
11363
Yue Ma7f44bbe2013-04-12 11:47:39 -070011364 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011365
11366 if(IS_WDI_STATUS_FAILURE(status))
11367 {
11368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11369 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053011370 vos_mem_zero(wdiGtkOffloadReqMsg, sizeof(WDI_GtkOffloadReqMsg));
11371 vos_mem_zero(pGtkOffloadParams, sizeof(tSirGtkOffloadParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070011372 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11373 vos_mem_free(pWdaParams->wdaMsgParam);
11374 vos_mem_free(pWdaParams);
11375 }
11376
11377 return CONVERT_WDI2VOS_STATUS(status) ;
11378}
11379
11380/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011381 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011382 *
11383 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011384void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011385 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011386{
11387 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11388 tWDA_CbContext *pWDA;
11389 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Nirav Shah374de6e2014-02-13 16:40:01 +053011390 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070011391 vos_msg_t vosMsg;
11392
11393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011394 "<------ %s " ,__func__);
Nirav Shah374de6e2014-02-13 16:40:01 +053011395
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080011396 if(NULL == pWdaParams)
11397 {
11398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11399 "%s: pWdaParams received NULL", __func__);
11400 VOS_ASSERT(0);
11401 return;
11402 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011403
Nirav Shah374de6e2014-02-13 16:40:01 +053011404 pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams));
11405 if(NULL == pGtkOffloadGetInfoRsp)
11406 {
11407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11408 "%s: vos_mem_malloc failed ", __func__);
11409 VOS_ASSERT(0);
11410 return;
11411 }
11412
Jeff Johnson295189b2012-06-20 16:38:30 -070011413 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
11414 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
11415
11416 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
11417 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
11418
11419 /* Message Header */
11420 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070011421 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011422
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011423 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
11424 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
11425 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
11426 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
11427 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070011428
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011429 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
11430 pwdiGtkOffloadGetInfoRsparams->bssId,
11431 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011432 /* VOS message wrapper */
11433 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
11434 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
11435 vosMsg.bodyval = 0;
11436
11437 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11438 {
11439 /* free the mem and return */
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053011440 vos_mem_zero(pGtkOffloadGetInfoRsp,
11441 sizeof(tSirGtkOffloadGetInfoRspParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070011442 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
11443 }
11444
11445 vos_mem_free(pWdaParams->wdaMsgParam) ;
11446 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11447 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011448
11449 return;
11450}
11451/*
11452 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
11453 * Free memory and send RSP back to SME.
11454 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
11455 */
11456void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
11457{
11458 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11459 vos_msg_t vosMsg;
11460
11461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11462 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11463
11464 if(NULL == pWdaParams)
11465 {
11466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11467 "%s: pWdaParams received NULL", __func__);
11468 VOS_ASSERT(0);
11469 return;
11470 }
11471
11472 /* VOS message wrapper */
11473 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
11474 vosMsg.bodyptr = NULL;
11475 vosMsg.bodyval = 0;
11476
11477 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11478 {
11479 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11480 vos_mem_free(pWdaParams->wdaMsgParam);
11481 vos_mem_free(pWdaParams);
11482 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
11483 }
11484
11485 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011486}
11487#endif
11488
11489/*
11490 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
11491 * Request to WDI to set Tx Per Tracking configurations
11492 */
11493VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
11494{
11495 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011496 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011497 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
11498 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
11499 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
11500 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011502 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011503 if(NULL == pwdiSetTxPerTrackingReqParams)
11504 {
11505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011506 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011507 vos_mem_free(pTxPerTrackingParams);
11508 VOS_ASSERT(0);
11509 return VOS_STATUS_E_NOMEM;
11510 }
11511 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11512 if(NULL == pWdaParams)
11513 {
11514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011515 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011516 vos_mem_free(pwdiSetTxPerTrackingReqParams);
11517 vos_mem_free(pTxPerTrackingParams);
11518 VOS_ASSERT(0);
11519 return VOS_STATUS_E_NOMEM;
11520 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011521 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
11522 pTxPerTrackingParams->ucTxPerTrackingEnable;
11523 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
11524 pTxPerTrackingParams->ucTxPerTrackingPeriod;
11525 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
11526 pTxPerTrackingParams->ucTxPerTrackingRatio;
11527 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
11528 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011529 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
11530 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011531 /* Store param pointer as passed in by caller */
11532 /* store Params pass it to WDI
11533 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
11534 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
11535 pWdaParams->pWdaContext = pWDA;
11536 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011537 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011538 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011539 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011540 {
11541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11542 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011543 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011544 vos_mem_free(pWdaParams->wdaMsgParam) ;
11545 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11546 vos_mem_free(pWdaParams) ;
11547 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011548 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011549
11550}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011551/*
11552 * FUNCTION: WDA_HALDumpCmdCallback
11553 * Send the VOS complete .
11554 */
11555void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
11556 void* pUserData)
11557{
11558 tANI_U8 *buffer = NULL;
11559 tWDA_CbContext *pWDA = NULL;
11560 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011561 if(NULL == pWdaParams)
11562 {
11563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011564 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011565 VOS_ASSERT(0) ;
11566 return ;
11567 }
11568
11569 pWDA = pWdaParams->pWdaContext;
11570 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011571 if(wdiRspParams->usBufferLen > 0)
11572 {
11573 /*Copy the Resp data to UMAC supplied buffer*/
11574 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
11575 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011576 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11577 vos_mem_free(pWdaParams);
11578
11579 /* Indicate VOSS about the start complete */
11580 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070011581 return ;
11582}
11583
Jeff Johnson295189b2012-06-20 16:38:30 -070011584/*
11585 * FUNCTION: WDA_ProcessHALDumpCmdReq
11586 * Send Dump command to WDI
11587 */
11588VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
11589 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
11590 tANI_U32 arg4, tANI_U8 *pBuffer)
11591{
11592 WDI_Status status = WDI_STATUS_SUCCESS;
11593 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
11594 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
11595 tWDA_ReqParams *pWdaParams ;
11596 pVosContextType pVosContext = NULL;
11597 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011598 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
11599 (void *)pMac);
Katya Nigame4bafe02014-02-28 15:37:57 +053011600 if(pVosContext)
11601 {
11602 if (pVosContext->isLogpInProgress)
11603 {
11604 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
11605 "%s:LOGP in Progress. Ignore!!!", __func__);
11606 return VOS_STATUS_E_BUSY;
11607 }
11608 }
11609 else
11610 {
11611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11612 "%s: VOS Context Null", __func__);
11613 return VOS_STATUS_E_RESOURCES;
11614 }
11615
Jeff Johnson295189b2012-06-20 16:38:30 -070011616 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11617 if(NULL == pWdaParams)
11618 {
11619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011620 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011621 return VOS_STATUS_E_NOMEM;
11622 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011623 /* Allocate memory WDI request structure*/
11624 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
11625 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
11626 if(NULL == wdiHALDumpCmdReqParam)
11627 {
11628 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11629 "WDA HAL DUMP Command buffer alloc fail");
11630 vos_mem_free(pWdaParams);
11631 return WDI_STATUS_E_FAILURE;
11632 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011633 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070011634 /* Extract the arguments */
11635 wdiHalDumpCmdInfo->command = cmd;
11636 wdiHalDumpCmdInfo->argument1 = arg1;
11637 wdiHalDumpCmdInfo->argument2 = arg2;
11638 wdiHalDumpCmdInfo->argument3 = arg3;
11639 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070011640 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011641 pWdaParams->pWdaContext = pVosContext->pWDAContext;
11642
11643 /* Response message will be passed through the buffer */
11644 pWdaParams->wdaMsgParam = (void *)pBuffer;
11645
11646 /* store Params pass it to WDI */
11647 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011648 /* Send command to WDI */
11649 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -080011650 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), WDA_DUMPCMD_WAIT_TIMEOUT );
Jeff Johnson295189b2012-06-20 16:38:30 -070011651 if ( vStatus != VOS_STATUS_SUCCESS )
11652 {
11653 if ( vStatus == VOS_STATUS_E_TIMEOUT )
11654 {
11655 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011656 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011657 }
11658 else
11659 {
11660 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011661 "%s: WDA_HALDUMP reporting other error",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011662 }
11663 VOS_ASSERT(0);
11664 }
11665 return status;
11666}
Jeff Johnson295189b2012-06-20 16:38:30 -070011667#ifdef WLAN_FEATURE_GTK_OFFLOAD
11668/*
11669 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
11670 * Request to WDI to get GTK Offload Information
11671 */
11672VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
11673 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
11674{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011675 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011676 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
11677 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
11678 tWDA_ReqParams *pWdaParams ;
11679
11680 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
11681 {
11682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011683 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011684 VOS_ASSERT(0);
11685 return VOS_STATUS_E_NOMEM;
11686 }
11687
11688 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11689 if(NULL == pWdaParams)
11690 {
11691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011692 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011693 VOS_ASSERT(0);
11694 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
11695 return VOS_STATUS_E_NOMEM;
11696 }
11697
Yue Ma7f44bbe2013-04-12 11:47:39 -070011698 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
11699 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011700
Jeff Johnson295189b2012-06-20 16:38:30 -070011701 /* Store Params pass it to WDI */
11702 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
11703 pWdaParams->pWdaContext = pWDA;
11704 /* Store param pointer as passed in by caller */
11705 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
11706
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011707 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011708 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011709
Yue Ma7f44bbe2013-04-12 11:47:39 -070011710 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011711
11712 if(IS_WDI_STATUS_FAILURE(status))
11713 {
11714 /* failure returned by WDI API */
11715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11716 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
11717 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11718 vos_mem_free(pWdaParams) ;
11719 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
11720 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
11721 }
11722
11723 return CONVERT_WDI2VOS_STATUS(status) ;
11724}
11725#endif // WLAN_FEATURE_GTK_OFFLOAD
11726
11727/*
Yue Mab9c86f42013-08-14 15:59:08 -070011728 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
11729 *
11730 */
11731VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
11732 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
11733{
11734 WDI_Status wdiStatus;
11735 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
11736
11737 addPeriodicTxPtrnParams =
11738 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
11739
11740 if (NULL == addPeriodicTxPtrnParams)
11741 {
11742 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11743 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
11744 __func__);
11745
11746 return VOS_STATUS_E_NOMEM;
11747 }
11748
11749 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
11750 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
11751
11752 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
11753 addPeriodicTxPtrnParams->pUserData = pWDA;
11754
11755 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
11756
11757 if (WDI_STATUS_PENDING == wdiStatus)
11758 {
11759 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11760 "Pending received for %s:%d", __func__, __LINE__ );
11761 }
11762 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11763 {
11764 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11765 "Failure in %s:%d", __func__, __LINE__ );
11766 }
11767
11768 vos_mem_free(addPeriodicTxPtrnParams);
11769
11770 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11771}
11772
11773/*
11774 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
11775 *
11776 */
11777VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
11778 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
11779{
11780 WDI_Status wdiStatus;
11781 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
11782
11783 delPeriodicTxPtrnParams =
11784 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
11785
11786 if (NULL == delPeriodicTxPtrnParams)
11787 {
11788 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11789 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
11790 __func__);
11791
11792 return VOS_STATUS_E_NOMEM;
11793 }
11794
11795 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
11796 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
11797
11798 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
11799 delPeriodicTxPtrnParams->pUserData = pWDA;
11800
11801 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
11802
11803 if (WDI_STATUS_PENDING == wdiStatus)
11804 {
11805 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11806 "Pending received for %s:%d", __func__, __LINE__ );
11807 }
11808 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11809 {
11810 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11811 "Failure in %s:%d", __func__, __LINE__ );
11812 }
11813
11814 vos_mem_free(delPeriodicTxPtrnParams);
11815
11816 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11817}
11818
Rajeev79dbe4c2013-10-05 11:03:42 +053011819#ifdef FEATURE_WLAN_BATCH_SCAN
11820/*
11821 * FUNCTION: WDA_ProcessStopBatchScanInd
11822 *
11823 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
11824 *
11825 * PARAM:
11826 * pWDA: pointer to WDA context
11827 * pReq: pointer to stop batch scan request
11828 */
11829VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
11830 tSirStopBatchScanInd *pReq)
11831{
11832 WDI_Status wdiStatus;
11833 WDI_StopBatchScanIndType wdiReq;
11834
11835 wdiReq.param = pReq->param;
11836
11837 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
11838
11839 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11840 {
11841 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11842 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
11843 }
11844
11845 vos_mem_free(pReq);
11846
11847 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11848}
11849/*==========================================================================
11850 FUNCTION WDA_ProcessTriggerBatchScanResultInd
11851
11852 DESCRIPTION
11853 API to pull batch scan result from FW
11854
11855 PARAMETERS
11856 pWDA: Pointer to WDA context
11857 pGetBatchScanReq: Pointer to get batch scan result indication
11858
11859 RETURN VALUE
11860 NONE
11861
11862===========================================================================*/
11863VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
11864 tSirTriggerBatchScanResultInd *pReq)
11865{
11866 WDI_Status wdiStatus;
11867 WDI_TriggerBatchScanResultIndType wdiReq;
11868
11869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11870 "------> %s " ,__func__);
11871
11872 wdiReq.param = pReq->param;
11873
11874 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
11875
11876 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11877 {
11878 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11879 "Trigger batch scan result ind failed %s:%d",
11880 __func__, wdiStatus);
11881 }
11882
11883 vos_mem_free(pReq);
11884
11885 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11886}
11887
11888/*==========================================================================
11889 FUNCTION WDA_SetBatchScanRespCallback
11890
11891 DESCRIPTION
11892 API to process set batch scan response from FW
11893
11894 PARAMETERS
11895 pRsp: Pointer to set batch scan response
11896 pUserData: Pointer to user data
11897
11898 RETURN VALUE
11899 NONE
11900
11901===========================================================================*/
11902void WDA_SetBatchScanRespCallback
11903(
11904 WDI_SetBatchScanRspType *pRsp,
11905 void* pUserData
11906)
11907{
11908 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
11909 tpAniSirGlobal pMac;
11910 void *pCallbackContext;
11911 tWDA_CbContext *pWDA = NULL ;
11912 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11913
11914
11915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11916 "<------ %s " ,__func__);
11917 if (NULL == pWdaParams)
11918 {
11919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11920 "%s: pWdaParams received NULL", __func__);
11921 VOS_ASSERT(0) ;
11922 return ;
11923 }
11924
11925 /*extract WDA context*/
11926 pWDA = pWdaParams->pWdaContext;
11927 if (NULL == pWDA)
11928 {
11929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11930 "%s:pWDA is NULL can't invole HDD callback",
11931 __func__);
11932 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11933 vos_mem_free(pWdaParams->wdaMsgParam);
11934 vos_mem_free(pWdaParams);
11935 VOS_ASSERT(0);
11936 return;
11937 }
11938
11939 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11940 vos_mem_free(pWdaParams->wdaMsgParam);
11941 vos_mem_free(pWdaParams);
11942
11943 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
11944 if (NULL == pMac)
11945 {
11946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11947 "%s:pMac is NULL", __func__);
11948 VOS_ASSERT(0);
11949 return;
11950 }
11951
11952 pHddSetBatchScanRsp =
11953 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
11954 if (NULL == pHddSetBatchScanRsp)
11955 {
11956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11957 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
11958 VOS_ASSERT(0);
11959 return;
11960 }
11961
11962 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
11963
11964 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
11965 /*call hdd callback with set batch scan response data*/
11966 if(pMac->pmc.setBatchScanReqCallback)
11967 {
11968 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
11969 }
11970 else
11971 {
11972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11973 "%s:HDD callback is null", __func__);
11974 VOS_ASSERT(0);
11975 }
11976
11977 vos_mem_free(pHddSetBatchScanRsp);
11978 return ;
11979}
11980
11981/*==========================================================================
11982 FUNCTION WDA_ProcessSetBatchScanReq
11983
11984 DESCRIPTION
11985 API to send set batch scan request to WDI
11986
11987 PARAMETERS
11988 pWDA: Pointer to WDA context
11989 pSetBatchScanReq: Pointer to set batch scan req
11990
11991 RETURN VALUE
11992 NONE
11993
11994===========================================================================*/
11995VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
11996 tSirSetBatchScanReq *pSetBatchScanReq)
11997{
11998 WDI_Status status;
11999 tWDA_ReqParams *pWdaParams ;
12000 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
12001
12002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12003 "------> %s " ,__func__);
12004
12005 pWdiSetBatchScanReq =
12006 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
12007 if (NULL == pWdiSetBatchScanReq)
12008 {
12009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12010 "%s: VOS MEM Alloc Failure", __func__);
12011 vos_mem_free(pSetBatchScanReq);
12012 VOS_ASSERT(0);
12013 return VOS_STATUS_E_NOMEM;
12014 }
12015
12016 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
12017 if (NULL == pWdaParams)
12018 {
12019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12020 "%s: VOS MEM Alloc Failure", __func__);
12021 VOS_ASSERT(0);
12022 vos_mem_free(pSetBatchScanReq);
12023 vos_mem_free(pWdiSetBatchScanReq);
12024 return VOS_STATUS_E_NOMEM;
12025 }
12026
12027 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
12028 pWdiSetBatchScanReq->numberOfScansToBatch =
12029 pSetBatchScanReq->numberOfScansToBatch;
12030 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
12031 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
12032 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
12033
12034 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
12035 pWdaParams->pWdaContext = pWDA;
12036 pWdaParams->wdaMsgParam = pSetBatchScanReq;
12037
12038 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
12039 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
12040 if (IS_WDI_STATUS_FAILURE(status))
12041 {
12042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12043 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
12044 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12045 vos_mem_free(pWdaParams->wdaMsgParam);
12046 vos_mem_free(pWdaParams);
12047 }
12048 return CONVERT_WDI2VOS_STATUS(status);
12049}
12050
12051#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053012052/*
12053 * FUNCTION: WDA_ProcessHT40OBSSScanInd
12054 *
12055 * DESCRIPTION: This function sends start/update OBSS scan
12056 * inidcation message to WDI
12057 *
12058 * PARAM:
12059 * pWDA: pointer to WDA context
12060 * pReq: pointer to start OBSS scan request
12061 */
12062VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
12063 tSirHT40OBSSScanInd *pReq)
12064{
12065 WDI_Status status;
12066 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
12067 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053012068
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053012069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12070 "------> %s " ,__func__);
12071 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
12072 wdiOBSSScanParams.pUserData = pWDA;
12073
12074 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
12075 pWdiOBSSScanInd->cmdType = pReq->cmdType;
12076 pWdiOBSSScanInd->scanType = pReq->scanType;
12077 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
12078 pReq->OBSSScanActiveDwellTime;
12079 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
12080 pReq->OBSSScanPassiveDwellTime;
12081 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
12082 pReq->BSSChannelWidthTriggerScanInterval;
12083 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
12084 pReq->BSSWidthChannelTransitionDelayFactor;
12085 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
12086 pReq->OBSSScanActiveTotalPerChannel;
12087 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
12088 pReq->OBSSScanPassiveTotalPerChannel;
12089 pWdiOBSSScanInd->OBSSScanActivityThreshold =
12090 pReq->OBSSScanActivityThreshold;
12091 pWdiOBSSScanInd->channelCount = pReq->channelCount;
12092 vos_mem_copy(pWdiOBSSScanInd->channels,
12093 pReq->channels,
12094 pReq->channelCount);
12095 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
12096 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
12097 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
12098 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
12099 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
12100
12101 vos_mem_copy(pWdiOBSSScanInd->ieField,
12102 pReq->ieField,
12103 pReq->ieFieldLen);
12104
12105 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
12106 if (WDI_STATUS_PENDING == status)
12107 {
12108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12109 "Pending received for %s:%d ",__func__,__LINE__ );
12110 }
12111 else if (WDI_STATUS_SUCCESS_SYNC != status)
12112 {
12113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12114 "Failure in %s:%d ",__func__,__LINE__ );
12115 }
12116 return CONVERT_WDI2VOS_STATUS(status) ;
12117}
12118/*
12119 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
12120 *
12121 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
12122 *
12123 * PARAM:
12124 * pWDA: pointer to WDA context
12125 * pReq: pointer to stop batch scan request
12126 */
12127VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
12128 tANI_U8 *bssIdx)
12129{
12130 WDI_Status status;
12131
12132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12133 "------> %s " ,__func__);
12134
12135 status = WDI_HT40OBSSStopScanInd(*bssIdx);
12136 if (WDI_STATUS_PENDING == status)
12137 {
12138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12139 "Pending received for %s:%d ",__func__,__LINE__ );
12140 }
12141 else if (WDI_STATUS_SUCCESS_SYNC != status)
12142 {
12143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12144 "Failure in %s:%d ",__func__,__LINE__ );
12145 }
12146 return CONVERT_WDI2VOS_STATUS(status) ;
12147}
Yue Mab9c86f42013-08-14 15:59:08 -070012148/*
Chittajit Mitraf5413a42013-10-18 14:20:08 -070012149 * FUNCTION: WDA_ProcessRateUpdateInd
12150 *
12151 */
12152VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
12153 tSirRateUpdateInd *pRateUpdateParams)
12154{
12155 WDI_Status wdiStatus;
12156 WDI_RateUpdateIndParams rateUpdateParams;
12157
12158 vos_mem_copy(rateUpdateParams.bssid,
12159 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
12160
12161 rateUpdateParams.ucastDataRateTxFlag =
12162 pRateUpdateParams->ucastDataRateTxFlag;
12163 rateUpdateParams.reliableMcastDataRateTxFlag =
12164 pRateUpdateParams->reliableMcastDataRateTxFlag;
12165 rateUpdateParams.mcastDataRate24GHzTxFlag =
12166 pRateUpdateParams->mcastDataRate24GHzTxFlag;
12167 rateUpdateParams.mcastDataRate5GHzTxFlag =
12168 pRateUpdateParams->mcastDataRate5GHzTxFlag;
12169
12170 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
12171 rateUpdateParams.reliableMcastDataRate =
12172 pRateUpdateParams->reliableMcastDataRate;
12173 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
12174 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
12175
12176 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
12177 rateUpdateParams.pUserData = pWDA;
12178
12179 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
12180
12181 if (WDI_STATUS_PENDING == wdiStatus)
12182 {
12183 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12184 "Pending received for %s:%d", __func__, __LINE__ );
12185 }
12186 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12187 {
12188 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12189 "Failure in %s:%d", __func__, __LINE__ );
12190 }
12191
12192 vos_mem_free(pRateUpdateParams);
12193
12194 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12195}
12196
12197/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012198 * -------------------------------------------------------------------------
12199 * DATA interface with WDI for Mgmt Frames
12200 * -------------------------------------------------------------------------
12201 */
Jeff Johnson295189b2012-06-20 16:38:30 -070012202/*
12203 * FUNCTION: WDA_TxComplete
12204 * Callback function for the WDA_TxPacket
12205 */
12206VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
12207 VOS_STATUS status )
12208{
12209
12210 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
12211 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012212 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012213
12214 if(NULL == wdaContext)
12215 {
12216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12217 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012218 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012219 VOS_ASSERT(0);
Sushant Kaushik8355d202014-12-17 16:48:10 +053012220 vos_pkt_return_packet(pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012221 return VOS_STATUS_E_FAILURE;
12222 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012223
12224 /*Check if frame was timed out or not*/
12225 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
12226 (v_PVOID_t)&uUserData);
12227
12228 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
12229 {
12230 /*Discard frame - no further processing is needed*/
12231 vos_pkt_return_packet(pData);
12232 return VOS_STATUS_SUCCESS;
12233 }
12234
Jeff Johnson295189b2012-06-20 16:38:30 -070012235 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
12236 if( NULL!=wdaContext->pTxCbFunc)
12237 {
12238 /*check if packet is freed already*/
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012239 if(vos_atomic_set((uintptr_t*)&wdaContext->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (uintptr_t)pData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012240 {
12241 wdaContext->pTxCbFunc(pMac, pData);
12242 }
12243 else
12244 {
12245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012246 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012247 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012248 //Return from here since we reaching here because the packet already timeout
12249 return status;
12250 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012251 }
12252
12253 /*
12254 * Trigger the event to bring the HAL TL Tx complete function to come
12255 * out of wait
12256 * Let the coe above to complete the packet first. When this event is set,
12257 * the thread waiting for the event may run and set Vospacket_freed causing the original
12258 * packet not being freed.
12259 */
12260 status = vos_event_set(&wdaContext->txFrameEvent);
12261 if(!VOS_IS_STATUS_SUCCESS(status))
12262 {
12263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012264 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012265 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012266 return status;
12267}
Jeff Johnson295189b2012-06-20 16:38:30 -070012268/*
12269 * FUNCTION: WDA_TxPacket
12270 * Forward TX management frame to WDI
12271 */
12272VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
12273 void *pFrmBuf,
12274 tANI_U16 frmLen,
12275 eFrameType frmType,
12276 eFrameTxDir txDir,
12277 tANI_U8 tid,
12278 pWDATxRxCompFunc pCompFunc,
12279 void *pData,
12280 pWDAAckFnTxComp pAckTxComp,
Kanchanapally, Vidyullathaf9426e52013-12-24 17:28:54 +053012281 tANI_U32 txFlag)
Jeff Johnson295189b2012-06-20 16:38:30 -070012282{
12283 VOS_STATUS status = VOS_STATUS_SUCCESS ;
12284 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
12285 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
12286 tANI_U8 eventIdx = 0;
12287 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
12288 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -070012289 if((NULL == pWDA)||(NULL == pFrmBuf))
12290 {
12291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012292 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012293 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070012294 VOS_ASSERT(0);
12295 return VOS_STATUS_E_FAILURE;
12296 }
12297
12298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012299 "Tx Mgmt Frame Subtype: %d alloc(%p)", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070012300 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12301 if(NULL == pMac)
12302 {
12303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012304 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012305 VOS_ASSERT(0);
12306 return VOS_STATUS_E_FAILURE;
12307 }
12308
12309
12310
12311 /* store the call back function in WDA context */
12312 pWDA->pTxCbFunc = pCompFunc;
12313 /* store the call back for the function of ackTxComplete */
12314 if( pAckTxComp )
12315 {
Jeff Johnsone7245742012-09-05 17:12:55 -070012316 if( NULL != pWDA->pAckTxCbFunc )
12317 {
12318 /* Already TxComp is active no need to active again */
12319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012320 "There is already one request pending for tx complete");
Jeff Johnsone7245742012-09-05 17:12:55 -070012321 pWDA->pAckTxCbFunc( pMac, 0);
12322 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012323
Jeff Johnsone7245742012-09-05 17:12:55 -070012324 if( VOS_STATUS_SUCCESS !=
12325 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12326 {
12327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12328 "Tx Complete timeout Timer Stop Failed ");
12329 }
12330 else
12331 {
12332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080012333 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070012334 }
12335 }
12336
12337 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
12338 pWDA->pAckTxCbFunc = pAckTxComp;
12339 if( VOS_STATUS_SUCCESS !=
12340 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
12341 {
12342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12343 "Tx Complete Timer Start Failed ");
12344 pWDA->pAckTxCbFunc = NULL;
12345 return eHAL_STATUS_FAILURE;
12346 }
12347 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012348 /* Reset the event to be not signalled */
12349 status = vos_event_reset(&pWDA->txFrameEvent);
12350 if(!VOS_IS_STATUS_SUCCESS(status))
12351 {
12352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012353 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012354 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
12355 if( pAckTxComp )
12356 {
12357 pWDA->pAckTxCbFunc = NULL;
12358 if( VOS_STATUS_SUCCESS !=
12359 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12360 {
12361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12362 "Tx Complete timeout Timer Stop Failed ");
12363 }
12364 }
12365 return VOS_STATUS_E_FAILURE;
12366 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012367
12368 /* If Peer Sta mask is set don't overwrite to self sta */
12369 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070012370 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012371 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070012372 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012373 else
12374 {
Ganesh K08bce952012-12-13 15:04:41 -080012375 /* Get system role, use the self station if in unknown role or STA role */
12376 systemRole = wdaGetGlobalSystemRole(pMac);
12377 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
12378 (( eSYSTEM_STA_ROLE == systemRole )
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012379#if defined FEATURE_WLAN_ESE || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080012380 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012381#endif
Ganesh K08bce952012-12-13 15:04:41 -080012382 ))
12383 {
12384 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
12385 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080012386 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012387
Jeff Johnsone7245742012-09-05 17:12:55 -070012388 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
12389 disassoc frame reaches the HW, HAL has already deleted the peer station */
12390 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070012391 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080012392 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070012393 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070012394 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012395 /*Send Probe request frames on self sta idx*/
12396 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070012397 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012398 /* Since we donot want probe responses to be retried, send probe responses
12399 through the NO_ACK queues */
12400 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
12401 {
12402 //probe response is sent out using self station and no retries options.
12403 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
12404 }
12405 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
12406 {
12407 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
12408 }
12409 }
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012410 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012411
12412 /*Set frame tag to 0
12413 We will use the WDA user data in order to tag a frame as expired*/
12414 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
12415 (v_PVOID_t)0);
12416
12417
12418 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
12419 frmLen, ucTypeSubType, tid,
12420 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
12421 {
12422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012423 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012424 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012425 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);/*reset the VosPacket_freed*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012426 if( pAckTxComp )
12427 {
12428 pWDA->pAckTxCbFunc = NULL;
12429 if( VOS_STATUS_SUCCESS !=
12430 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12431 {
12432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12433 "Tx Complete timeout Timer Stop Failed ");
12434 }
12435 }
12436 return VOS_STATUS_E_FAILURE;
12437 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012438 /*
12439 * Wait for the event to be set by the TL, to get the response of TX
12440 * complete, this event should be set by the Callback function called by TL
12441 */
12442 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
12443 &eventIdx);
12444 if(!VOS_IS_STATUS_SUCCESS(status))
12445 {
12446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12447 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012448 __func__, status);
Sushant Kaushik8355d202014-12-17 16:48:10 +053012449
12450 /*Tag Frame as timed out for later deletion*/
12451 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
12452 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
Jeff Johnson295189b2012-06-20 16:38:30 -070012453 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
12454 after the packet gets completed(packet freed once)*/
12455
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070012456 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Katya Nigam53677462014-08-04 11:37:28 +053012457 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070012458
Jeff Johnson295189b2012-06-20 16:38:30 -070012459 /* check whether the packet was freed already,so need not free again when
12460 * TL calls the WDA_Txcomplete routine
12461 */
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012462 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED);
12463 /*if(vos_atomic_set(uintptr_t *)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (v_U32_t)pFrmBuf)
Jeff Johnson295189b2012-06-20 16:38:30 -070012464 {
12465 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012466 } */
12467
Jeff Johnson295189b2012-06-20 16:38:30 -070012468 if( pAckTxComp )
12469 {
12470 pWDA->pAckTxCbFunc = NULL;
12471 if( VOS_STATUS_SUCCESS !=
12472 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12473 {
12474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12475 "Tx Complete timeout Timer Stop Failed ");
12476 }
12477 }
12478 status = VOS_STATUS_E_FAILURE;
12479 }
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053012480#ifdef WLAN_DUMP_MGMTFRAMES
12481 if (VOS_IS_STATUS_SUCCESS(status))
12482 {
12483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12484 "%s() TX packet : SubType %d", __func__,pFc->subType);
12485 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12486 pData, frmLen);
12487 }
12488#endif
12489
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080012490 if (VOS_IS_STATUS_SUCCESS(status))
12491 {
12492 if (pMac->fEnableDebugLog & 0x1)
12493 {
12494 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
12495 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
12496 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
12497 {
12498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
12499 pFc->type, pFc->subType);
12500 }
12501 }
12502 }
12503
12504
Jeff Johnson295189b2012-06-20 16:38:30 -070012505 return status;
12506}
Jeff Johnson295189b2012-06-20 16:38:30 -070012507/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012508 * FUNCTION: WDA_ProcessDHCPStartInd
12509 * Forward DHCP Start to WDI
12510 */
12511static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
12512 tAniDHCPInd *dhcpStartInd)
12513{
12514 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053012515 WDI_DHCPInd wdiDHCPInd;
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012516
c_hpothu0b0cab72014-02-13 21:52:40 +053012517 wdiDHCPInd.device_mode = dhcpStartInd->device_mode;
12518 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStartInd->macAddr,
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012519 sizeof(tSirMacAddr));
12520
c_hpothu0b0cab72014-02-13 21:52:40 +053012521 status = WDI_dhcpStartInd(&wdiDHCPInd);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012522
c_hpothu0b0cab72014-02-13 21:52:40 +053012523 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012524 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12526 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012527 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012528 else if (WDI_STATUS_SUCCESS_SYNC != status)
12529 {
12530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12531 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
12532 }
12533
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012534 vos_mem_free(dhcpStartInd);
12535 return CONVERT_WDI2VOS_STATUS(status) ;
12536}
12537
12538 /*
12539 * FUNCTION: WDA_ProcessDHCPStopInd
12540 * Forward DHCP Stop to WDI
12541 */
12542 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
12543 tAniDHCPInd *dhcpStopInd)
12544 {
12545 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053012546 WDI_DHCPInd wdiDHCPInd;
12547
12548 wdiDHCPInd.device_mode = dhcpStopInd->device_mode;
12549 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
12550
12551 status = WDI_dhcpStopInd(&wdiDHCPInd);
12552
12553 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012554 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12556 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012557 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012558 else if (WDI_STATUS_SUCCESS_SYNC != status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012559 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12561 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012562 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012563
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012564 vos_mem_free(dhcpStopInd);
c_hpothu0b0cab72014-02-13 21:52:40 +053012565
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012566 return CONVERT_WDI2VOS_STATUS(status) ;
12567 }
12568
12569/*
Siddharth Bhal171788a2014-09-29 21:02:40 +053012570 * FUNCTION: WDA_ProcessSetSpoofMacAddrReq
12571 *
12572 * DESCRIPTION: This function sends Spoof Mac Addr Req to WDI
12573 *
12574 * PARAM:
12575 * pWDA: pointer to WDA context
12576 * pReq: pointer to stop batch scan request
12577 */
12578VOS_STATUS WDA_ProcessSetSpoofMacAddrReq(tWDA_CbContext *pWDA,
12579 tpSpoofMacAddrReqParams pReq)
12580{
12581 WDI_Status wdiStatus;
12582 WDI_SpoofMacAddrInfoType *WDI_SpoofMacAddrInfoParams;
12583 tWDA_ReqParams *pWdaParams;
12584
12585 WDI_SpoofMacAddrInfoParams = (WDI_SpoofMacAddrInfoType *)vos_mem_malloc(
12586 sizeof(WDI_SpoofMacAddrInfoType));
12587 if(NULL == WDI_SpoofMacAddrInfoParams) {
12588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12589 "%s: VOS MEM Alloc Failure in Spoof Req", __func__);
12590 VOS_ASSERT(0);
12591 return VOS_STATUS_E_NOMEM;
12592 }
12593 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12594 if(NULL == pWdaParams) {
12595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12596 "%s: VOS MEM Alloc Failure", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +053012597 vos_mem_free(WDI_SpoofMacAddrInfoParams);
Siddharth Bhal171788a2014-09-29 21:02:40 +053012598 VOS_ASSERT(0);
12599 return VOS_STATUS_E_NOMEM;
12600 }
12601
12602 vos_mem_copy(WDI_SpoofMacAddrInfoParams->macAddr,
12603 pReq->macAddr, VOS_MAC_ADDRESS_LEN);
12604
12605 pWdaParams->pWdaContext = pWDA;
12606 /* Store Upper layer req pointer, as this will be used for response */
Siddharth Bhal029d6732014-10-09 21:31:23 +053012607 pWdaParams->wdaMsgParam = (void *)pReq;
12608
12609 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, WDA_MAC_ADDRESS_STR,
12610 WDA_MAC_ADDR_ARRAY(WDI_SpoofMacAddrInfoParams->macAddr));
12611
Siddharth Bhal171788a2014-09-29 21:02:40 +053012612 /* store Params pass it to WDI */
12613 pWdaParams->wdaWdiApiMsgParam = (void *)WDI_SpoofMacAddrInfoParams ;
12614
12615 wdiStatus = WDI_SetSpoofMacAddrReq(WDI_SpoofMacAddrInfoParams,
Siddharth Bhal029d6732014-10-09 21:31:23 +053012616 (WDI_SetSpoofMacAddrRspCb) WDA_SpoofMacAddrRspCallback,
12617 pWdaParams );
Siddharth Bhal171788a2014-09-29 21:02:40 +053012618
12619 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12620 {
12621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12622 "Failure in SetSpoofMacAddrReq Params WDI API, free all the memory " );
12623 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12624 vos_mem_free(pWdaParams->wdaMsgParam);
12625 vos_mem_free(pWdaParams);
12626 }
12627
12628 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
12629}
12630
12631/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012632 * FUNCTION: WDA_McProcessMsg
12633 * Trigger DAL-AL to start CFG download
12634 */
12635VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
12636{
12637 VOS_STATUS status = VOS_STATUS_SUCCESS;
12638 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012639 if(NULL == pMsg)
12640 {
12641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012642 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012643 VOS_ASSERT(0);
12644 return VOS_STATUS_E_FAILURE;
12645 }
12646
12647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012648 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070012649
12650 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
12651 if(NULL == pWDA )
12652 {
12653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012654 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012655 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070012656 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012657 return VOS_STATUS_E_FAILURE;
12658 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012659 /* Process all the WDA messages.. */
12660 switch( pMsg->type )
12661 {
12662 case WNI_CFG_DNLD_REQ:
12663 {
12664 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070012665 /* call WDA complete event if config download success */
12666 if( VOS_IS_STATUS_SUCCESS(status) )
12667 {
12668 vos_WDAComplete_cback(pVosContext);
12669 }
12670 else
12671 {
12672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12673 "WDA Config Download failure" );
12674 }
12675 break ;
12676 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012677 /*
12678 * Init SCAN request from PE, convert it into DAL format
12679 * and send it to DAL
12680 */
12681 case WDA_INIT_SCAN_REQ:
12682 {
12683 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
12684 break ;
12685 }
12686 /* start SCAN request from PE */
12687 case WDA_START_SCAN_REQ:
12688 {
12689 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
12690 break ;
12691 }
12692 /* end SCAN request from PE */
12693 case WDA_END_SCAN_REQ:
12694 {
12695 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
12696 break ;
12697 }
12698 /* end SCAN request from PE */
12699 case WDA_FINISH_SCAN_REQ:
12700 {
12701 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
12702 break ;
12703 }
12704 /* join request from PE */
12705 case WDA_CHNL_SWITCH_REQ:
12706 {
12707 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
12708 {
12709 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
12710 }
12711 else
12712 {
Kalikinkar dhara1e83b772014-02-06 12:59:22 -080012713 if (IS_FEATURE_SUPPORTED_BY_FW(CH_SWITCH_V1) &&
12714 eHAL_CHANNEL_SWITCH_SOURCE_CSA ==
12715 ((tSwitchChannelParams*)pMsg->bodyptr)->channelSwitchSrc )
12716 {
12717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12718 "call ProcessChannelSwitchReq_V1" );
12719 WDA_ProcessChannelSwitchReq_V1(pWDA,
12720 (tSwitchChannelParams*)pMsg->bodyptr) ;
12721 }
12722 else
12723 {
12724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12725 "call ProcessChannelSwitchReq" );
12726 WDA_ProcessChannelSwitchReq(pWDA,
12727 (tSwitchChannelParams*)pMsg->bodyptr) ;
12728 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012729 }
12730 break ;
12731 }
12732 /* ADD BSS request from PE */
12733 case WDA_ADD_BSS_REQ:
12734 {
12735 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
12736 break ;
12737 }
12738 case WDA_ADD_STA_REQ:
12739 {
12740 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
12741 break ;
12742 }
12743 case WDA_DELETE_BSS_REQ:
12744 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012745 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
12746 break ;
12747 }
12748 case WDA_DELETE_STA_REQ:
12749 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012750 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
12751 break ;
12752 }
12753 case WDA_CONFIG_PARAM_UPDATE_REQ:
12754 {
12755 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
12756 break ;
12757 }
12758 case WDA_SET_BSSKEY_REQ:
12759 {
12760 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
12761 break ;
12762 }
12763 case WDA_SET_STAKEY_REQ:
12764 {
12765 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
12766 break ;
12767 }
12768 case WDA_SET_STA_BCASTKEY_REQ:
12769 {
12770 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
12771 break ;
12772 }
12773 case WDA_REMOVE_BSSKEY_REQ:
12774 {
12775 WDA_ProcessRemoveBssKeyReq(pWDA,
12776 (tRemoveBssKeyParams *)pMsg->bodyptr);
12777 break ;
12778 }
12779 case WDA_REMOVE_STAKEY_REQ:
12780 {
12781 WDA_ProcessRemoveStaKeyReq(pWDA,
12782 (tRemoveStaKeyParams *)pMsg->bodyptr);
12783 break ;
12784 }
12785 case WDA_REMOVE_STA_BCASTKEY_REQ:
12786 {
12787 /* TODO: currently UMAC is not sending this request, Add the code for
12788 handling this request when UMAC supports */
12789 break;
12790 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012791#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -070012792 case WDA_TSM_STATS_REQ:
12793 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070012794 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012795 break;
12796 }
12797#endif
12798 case WDA_UPDATE_EDCA_PROFILE_IND:
12799 {
12800 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
12801 break;
12802 }
12803 case WDA_ADD_TS_REQ:
12804 {
12805 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
12806 break;
12807 }
12808 case WDA_DEL_TS_REQ:
12809 {
12810 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
12811 break;
12812 }
12813 case WDA_ADDBA_REQ:
12814 {
12815 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
12816 break;
12817 }
12818 case WDA_DELBA_IND:
12819 {
12820 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
12821 break;
12822 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080012823 case WDA_UPDATE_CHAN_LIST_REQ:
12824 {
12825 WDA_ProcessUpdateChannelList(pWDA,
12826 (tSirUpdateChanList *)pMsg->bodyptr);
12827 break;
12828 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012829 case WDA_SET_LINK_STATE:
12830 {
12831 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
12832 break;
12833 }
12834 case WDA_GET_STATISTICS_REQ:
12835 {
12836 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
12837 break;
12838 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012839#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080012840 case WDA_GET_ROAM_RSSI_REQ:
12841 {
12842 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
12843 break;
12844 }
12845#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012846 case WDA_PWR_SAVE_CFG:
12847 {
12848 if(pWDA->wdaState == WDA_READY_STATE)
12849 {
12850 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
12851 }
12852 else
12853 {
12854 if(NULL != pMsg->bodyptr)
12855 {
12856 vos_mem_free(pMsg->bodyptr);
12857 }
12858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12859 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
12860 }
12861 break;
12862 }
12863 case WDA_ENTER_IMPS_REQ:
12864 {
12865 if(pWDA->wdaState == WDA_READY_STATE)
12866 {
12867 WDA_ProcessEnterImpsReq(pWDA);
12868 }
12869 else
12870 {
12871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12872 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
12873 }
12874 break;
12875 }
12876 case WDA_EXIT_IMPS_REQ:
12877 {
12878 if(pWDA->wdaState == WDA_READY_STATE)
12879 {
12880 WDA_ProcessExitImpsReq(pWDA);
12881 }
12882 else
12883 {
12884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12885 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
12886 }
12887 break;
12888 }
12889 case WDA_ENTER_BMPS_REQ:
12890 {
12891 if(pWDA->wdaState == WDA_READY_STATE)
12892 {
12893 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
12894 }
12895 else
12896 {
12897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12898 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
12899 }
12900 break;
12901 }
12902 case WDA_EXIT_BMPS_REQ:
12903 {
12904 if(pWDA->wdaState == WDA_READY_STATE)
12905 {
12906 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
12907 }
12908 else
12909 {
12910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12911 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
12912 }
12913 break;
12914 }
12915 case WDA_ENTER_UAPSD_REQ:
12916 {
12917 if(pWDA->wdaState == WDA_READY_STATE)
12918 {
12919 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
12920 }
12921 else
12922 {
12923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12924 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
12925 }
12926 break;
12927 }
12928 case WDA_EXIT_UAPSD_REQ:
12929 {
12930 if(pWDA->wdaState == WDA_READY_STATE)
12931 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012932 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012933 }
12934 else
12935 {
12936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12937 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
12938 }
12939 break;
12940 }
12941 case WDA_UPDATE_UAPSD_IND:
12942 {
12943 if(pWDA->wdaState == WDA_READY_STATE)
12944 {
12945 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
12946 }
12947 else
12948 {
12949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12950 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
12951 }
12952 break;
12953 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012954 case WDA_REGISTER_PE_CALLBACK :
12955 {
12956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12957 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
12958 /*TODO: store the PE callback */
12959 /* Do Nothing? MSG Body should be freed at here */
12960 if(NULL != pMsg->bodyptr)
12961 {
12962 vos_mem_free(pMsg->bodyptr);
12963 }
12964 break;
12965 }
12966 case WDA_SYS_READY_IND :
12967 {
12968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12969 "Handling msg type WDA_SYS_READY_IND " );
12970 pWDA->wdaState = WDA_READY_STATE;
12971 if(NULL != pMsg->bodyptr)
12972 {
12973 vos_mem_free(pMsg->bodyptr);
12974 }
12975 break;
12976 }
12977 case WDA_BEACON_FILTER_IND :
12978 {
12979 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
12980 break;
12981 }
12982 case WDA_BTC_SET_CFG:
12983 {
12984 /*TODO: handle this while dealing with BTC */
12985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12986 "Handling msg type WDA_BTC_SET_CFG " );
12987 /* Do Nothing? MSG Body should be freed at here */
12988 if(NULL != pMsg->bodyptr)
12989 {
12990 vos_mem_free(pMsg->bodyptr);
12991 }
12992 break;
12993 }
12994 case WDA_SIGNAL_BT_EVENT:
12995 {
12996 /*TODO: handle this while dealing with BTC */
12997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12998 "Handling msg type WDA_SIGNAL_BT_EVENT " );
12999 /* Do Nothing? MSG Body should be freed at here */
13000 if(NULL != pMsg->bodyptr)
13001 {
13002 vos_mem_free(pMsg->bodyptr);
13003 }
13004 break;
13005 }
13006 case WDA_CFG_RXP_FILTER_REQ:
13007 {
13008 WDA_ProcessConfigureRxpFilterReq(pWDA,
13009 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
13010 break;
13011 }
13012 case WDA_SET_HOST_OFFLOAD:
13013 {
13014 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
13015 break;
13016 }
13017 case WDA_SET_KEEP_ALIVE:
13018 {
13019 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
13020 break;
13021 }
13022#ifdef WLAN_NS_OFFLOAD
13023 case WDA_SET_NS_OFFLOAD:
13024 {
13025 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
13026 break;
13027 }
13028#endif //WLAN_NS_OFFLOAD
13029 case WDA_ADD_STA_SELF_REQ:
13030 {
13031 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
13032 break;
13033 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013034 case WDA_DEL_STA_SELF_REQ:
13035 {
13036 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
13037 break;
13038 }
13039 case WDA_WOWL_ADD_BCAST_PTRN:
13040 {
13041 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
13042 break;
13043 }
13044 case WDA_WOWL_DEL_BCAST_PTRN:
13045 {
13046 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
13047 break;
13048 }
13049 case WDA_WOWL_ENTER_REQ:
13050 {
13051 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
13052 break;
13053 }
13054 case WDA_WOWL_EXIT_REQ:
13055 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013056 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070013057 break;
13058 }
13059 case WDA_TL_FLUSH_AC_REQ:
13060 {
13061 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
13062 break;
13063 }
13064 case WDA_SIGNAL_BTAMP_EVENT:
13065 {
13066 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
13067 break;
13068 }
Abhishek Singh85b74712014-10-08 11:38:19 +053013069 case WDA_FW_STATS_GET_REQ:
13070 {
13071 WDA_ProcessFWStatsGetReq(pWDA,
13072 (tSirFWStatsGetReq *)pMsg->bodyptr);
13073 break;
13074 }
Sunil Duttbd736ed2014-05-26 21:19:41 +053013075#ifdef WLAN_FEATURE_LINK_LAYER_STATS
13076 case WDA_LINK_LAYER_STATS_SET_REQ:
13077 {
13078 WDA_ProcessLLStatsSetReq(pWDA, (tSirLLStatsSetReq *)pMsg->bodyptr);
13079 break;
13080 }
13081 case WDA_LINK_LAYER_STATS_GET_REQ:
13082 {
13083 WDA_ProcessLLStatsGetReq(pWDA, (tSirLLStatsGetReq *)pMsg->bodyptr);
13084 break;
13085 }
13086 case WDA_LINK_LAYER_STATS_CLEAR_REQ:
13087 {
13088 WDA_ProcessLLStatsClearReq(pWDA, (tSirLLStatsClearReq *)pMsg->bodyptr);
13089 break;
13090 }
13091#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Dino Mycle41bdc942014-06-10 11:30:24 +053013092#ifdef WLAN_FEATURE_EXTSCAN
13093 case WDA_EXTSCAN_GET_CAPABILITIES_REQ:
13094 {
13095 WDA_ProcessEXTScanGetCapabilitiesReq(pWDA,
13096 (tSirGetEXTScanCapabilitiesReqParams *)pMsg->bodyptr);
13097 break;
13098 }
13099 case WDA_EXTSCAN_START_REQ:
13100 {
13101 WDA_ProcessEXTScanStartReq(pWDA,
13102 (tSirEXTScanStartReqParams *)pMsg->bodyptr);
13103 break;
13104 }
13105 case WDA_EXTSCAN_STOP_REQ:
13106 {
13107 WDA_ProcessEXTScanStopReq(pWDA,
13108 (tSirEXTScanStopReqParams *)pMsg->bodyptr);
13109 break;
13110 }
13111 case WDA_EXTSCAN_GET_CACHED_RESULTS_REQ:
13112 {
13113 WDA_ProcessEXTScanGetCachedResultsReq(pWDA,
13114 (tSirEXTScanGetCachedResultsReqParams *)pMsg->bodyptr);
13115 break;
13116 }
13117 case WDA_EXTSCAN_SET_BSSID_HOTLIST_REQ:
13118 {
13119 WDA_ProcessEXTScanSetBSSIDHotlistReq(pWDA,
13120 (tSirEXTScanSetBssidHotListReqParams *)pMsg->bodyptr);
13121 break;
13122 }
13123 case WDA_EXTSCAN_RESET_BSSID_HOTLIST_REQ:
13124 {
13125 WDA_ProcessEXTScanResetBSSIDHotlistReq(pWDA,
13126 (tSirEXTScanResetBssidHotlistReqParams *)pMsg->bodyptr);
13127 break;
13128 }
13129 case WDA_EXTSCAN_SET_SIGNF_RSSI_CHANGE_REQ:
13130 {
13131 WDA_ProcessEXTScanSetSignfRSSIChangeReq(pWDA,
13132 (tSirEXTScanSetSignificantChangeReqParams *)pMsg->bodyptr);
13133 break;
13134 }
13135 case WDA_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_REQ:
13136 {
13137 WDA_ProcessEXTScanResetSignfRSSIChangeReq(pWDA,
13138 (tSirEXTScanResetSignificantChangeReqParams *)pMsg->bodyptr);
13139 break;
13140 }
13141#endif /* WLAN_FEATURE_EXTSCAN */
Jeff Johnson295189b2012-06-20 16:38:30 -070013142#ifdef WDA_UT
13143 case WDA_WDI_EVENT_MSG:
13144 {
13145 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
13146 break ;
13147 }
13148#endif
13149 case WDA_UPDATE_BEACON_IND:
13150 {
13151 WDA_ProcessUpdateBeaconParams(pWDA,
13152 (tUpdateBeaconParams *)pMsg->bodyptr);
13153 break;
13154 }
13155 case WDA_SEND_BEACON_REQ:
13156 {
13157 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
13158 break;
13159 }
13160 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
13161 {
13162 WDA_ProcessUpdateProbeRspTemplate(pWDA,
13163 (tSendProbeRespParams *)pMsg->bodyptr);
13164 break;
13165 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013166#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -070013167 case WDA_SET_MAX_TX_POWER_REQ:
13168 {
13169 WDA_ProcessSetMaxTxPowerReq(pWDA,
13170 (tMaxTxPowerParams *)pMsg->bodyptr);
13171 break;
13172 }
13173#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070013174 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
13175 {
13176 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
13177 pMsg->bodyptr);
13178 break;
13179 }
schang86c22c42013-03-13 18:41:24 -070013180 case WDA_SET_TX_POWER_REQ:
13181 {
13182 WDA_ProcessSetTxPowerReq(pWDA,
13183 (tSirSetTxPowerReq *)pMsg->bodyptr);
13184 break;
13185 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013186 case WDA_SET_P2P_GO_NOA_REQ:
13187 {
13188 WDA_ProcessSetP2PGONOAReq(pWDA,
13189 (tP2pPsParams *)pMsg->bodyptr);
13190 break;
13191 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013192 /* timer related messages */
13193 case WDA_TIMER_BA_ACTIVITY_REQ:
13194 {
13195 WDA_BaCheckActivity(pWDA) ;
13196 break ;
13197 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013198
13199 /* timer related messages */
13200 case WDA_TIMER_TRAFFIC_STATS_IND:
13201 {
13202 WDA_TimerTrafficStatsInd(pWDA);
13203 break;
13204 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013205#ifdef WLAN_FEATURE_VOWIFI_11R
13206 case WDA_AGGR_QOS_REQ:
13207 {
13208 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
13209 break;
13210 }
13211#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070013212 case WDA_FTM_CMD_REQ:
13213 {
13214 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
13215 break ;
13216 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013217#ifdef FEATURE_OEM_DATA_SUPPORT
13218 case WDA_START_OEM_DATA_REQ:
13219 {
13220 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
13221 break;
13222 }
13223#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070013224 /* Tx Complete Time out Indication */
13225 case WDA_TX_COMPLETE_TIMEOUT_IND:
13226 {
13227 WDA_ProcessTxCompleteTimeOutInd(pWDA);
13228 break;
13229 }
13230 case WDA_WLAN_SUSPEND_IND:
13231 {
13232 WDA_ProcessWlanSuspendInd(pWDA,
13233 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
13234 break;
13235 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013236 case WDA_WLAN_RESUME_REQ:
13237 {
13238 WDA_ProcessWlanResumeReq(pWDA,
13239 (tSirWlanResumeParam *)pMsg->bodyptr) ;
13240 break;
13241 }
13242
13243 case WDA_UPDATE_CF_IND:
13244 {
13245 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
13246 pMsg->bodyptr = NULL;
13247 break;
13248 }
13249#ifdef FEATURE_WLAN_SCAN_PNO
13250 case WDA_SET_PNO_REQ:
13251 {
13252 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
13253 break;
13254 }
13255 case WDA_UPDATE_SCAN_PARAMS_REQ:
13256 {
13257 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
13258 break;
13259 }
13260 case WDA_SET_RSSI_FILTER_REQ:
13261 {
13262 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
13263 break;
13264 }
13265#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013266#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013267 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013268 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013269 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013270 break;
13271 }
13272#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013273 case WDA_SET_TX_PER_TRACKING_REQ:
13274 {
13275 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
13276 break;
13277 }
13278
13279#ifdef WLAN_FEATURE_PACKET_FILTERING
13280 case WDA_8023_MULTICAST_LIST_REQ:
13281 {
13282 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
13283 break;
13284 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013285 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
13286 {
13287 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
13288 break;
13289 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013290 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
13291 {
13292 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
13293 break;
13294 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013295 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
13296 {
13297 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
13298 break;
13299 }
13300#endif // WLAN_FEATURE_PACKET_FILTERING
13301
13302
13303 case WDA_TRANSMISSION_CONTROL_IND:
13304 {
13305 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
13306 break;
13307 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013308 case WDA_SET_POWER_PARAMS_REQ:
13309 {
13310 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
13311 break;
13312 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013313#ifdef WLAN_FEATURE_GTK_OFFLOAD
13314 case WDA_GTK_OFFLOAD_REQ:
13315 {
13316 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
13317 break;
13318 }
13319
13320 case WDA_GTK_OFFLOAD_GETINFO_REQ:
13321 {
13322 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
13323 break;
13324 }
13325#endif //WLAN_FEATURE_GTK_OFFLOAD
13326
13327 case WDA_SET_TM_LEVEL_REQ:
13328 {
13329 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
13330 break;
13331 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053013332
Mohit Khanna4a70d262012-09-11 16:30:12 -070013333 case WDA_UPDATE_OP_MODE:
13334 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053013335 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
13336 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
13337 {
13338 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
13339 }
13340 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070013341 {
13342 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
13343 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
13344 else
13345 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013346 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070013347 }
13348 else
13349 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013350 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070013351 break;
13352 }
Chet Lanctot186b5732013-03-18 10:26:30 -070013353#ifdef WLAN_FEATURE_11W
13354 case WDA_EXCLUDE_UNENCRYPTED_IND:
13355 {
13356 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
13357 break;
13358 }
13359#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053013360#ifdef FEATURE_WLAN_TDLS
13361 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
13362 {
13363 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
13364 break;
13365 }
13366#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013367 case WDA_DHCP_START_IND:
13368 {
13369 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
13370 break;
13371 }
13372 case WDA_DHCP_STOP_IND:
13373 {
13374 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
13375 break;
13376 }
Leo Chang9056f462013-08-01 19:21:11 -070013377#ifdef FEATURE_WLAN_LPHB
13378 case WDA_LPHB_CONF_REQ:
13379 {
13380 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
13381 break;
13382 }
13383#endif
Yue Mab9c86f42013-08-14 15:59:08 -070013384 case WDA_ADD_PERIODIC_TX_PTRN_IND:
13385 {
13386 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
13387 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
13388 break;
13389 }
13390 case WDA_DEL_PERIODIC_TX_PTRN_IND:
13391 {
13392 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
13393 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
13394 break;
13395 }
13396
Rajeev79dbe4c2013-10-05 11:03:42 +053013397#ifdef FEATURE_WLAN_BATCH_SCAN
13398 case WDA_SET_BATCH_SCAN_REQ:
13399 {
13400 WDA_ProcessSetBatchScanReq(pWDA,
13401 (tSirSetBatchScanReq *)pMsg->bodyptr);
13402 break;
13403 }
Chittajit Mitraf5413a42013-10-18 14:20:08 -070013404 case WDA_RATE_UPDATE_IND:
13405 {
13406 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
13407 break;
13408 }
Rajeev79dbe4c2013-10-05 11:03:42 +053013409 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
13410 {
13411 WDA_ProcessTriggerBatchScanResultInd(pWDA,
13412 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
13413 break;
13414 }
13415 case WDA_STOP_BATCH_SCAN_IND:
13416 {
13417 WDA_ProcessStopBatchScanInd(pWDA,
13418 (tSirStopBatchScanInd *)pMsg->bodyptr);
13419 break;
13420 }
c_hpothu92367912014-05-01 15:18:17 +053013421 case WDA_GET_BCN_MISS_RATE_REQ:
13422 WDA_ProcessGetBcnMissRateReq(pWDA,
13423 (tSirBcnMissRateReq *)pMsg->bodyptr);
13424 break;
Rajeev79dbe4c2013-10-05 11:03:42 +053013425#endif
13426
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053013427 case WDA_HT40_OBSS_SCAN_IND:
13428 {
13429 WDA_ProcessHT40OBSSScanInd(pWDA,
13430 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
13431 break;
13432 }
13433 case WDA_HT40_OBSS_STOP_SCAN_IND:
13434 {
13435 WDA_ProcessHT40OBSSStopScanInd(pWDA,
13436 (tANI_U8*)pMsg->bodyptr);
13437 break;
13438 }
Atul Mittalc0f739f2014-07-31 13:47:47 +053013439// tdlsoffchan
13440#ifdef FEATURE_WLAN_TDLS
13441 case WDA_SET_TDLS_CHAN_SWITCH_REQ:
13442 {
13443 WDA_ProcessSetTdlsChanSwitchReq(pWDA, (tTdlsChanSwitchParams *)pMsg->bodyptr);
13444 break;
13445 }
13446#endif
Siddharth Bhal171788a2014-09-29 21:02:40 +053013447 case WDA_SPOOF_MAC_ADDR_REQ:
13448 {
13449 WDA_ProcessSetSpoofMacAddrReq(pWDA, (tpSpoofMacAddrReqParams)pMsg->bodyptr);
13450 break;
13451 }
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053013452 case WDA_ENCRYPT_MSG_REQ:
13453 {
13454 WDA_ProcessEncryptMsgReq(pWDA, (u8 *)pMsg->bodyptr);
13455 break;
13456 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013457 default:
13458 {
Agarwal Ashishbf98caf2014-03-25 13:29:11 +053013459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070013460 "No Handling for msg type %x in WDA "
13461 ,pMsg->type);
13462 /* Do Nothing? MSG Body should be freed at here */
13463 if(NULL != pMsg->bodyptr)
13464 {
13465 vos_mem_free(pMsg->bodyptr);
13466 }
13467 //WDA_VOS_ASSERT(0) ;
13468 }
13469 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013470 return status ;
13471}
13472
Jeff Johnson295189b2012-06-20 16:38:30 -070013473/*
13474 * FUNCTION: WDA_LowLevelIndCallback
13475 * IND API callback from WDI, send Ind to PE
13476 */
13477void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
13478 void* pUserData )
13479{
13480 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
13481#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
13482 tSirRSSINotification rssiNotification;
13483#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013484 if(NULL == pWDA)
13485 {
13486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013487 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013488 VOS_ASSERT(0);
13489 return ;
13490 }
13491
13492 switch(wdiLowLevelInd->wdiIndicationType)
13493 {
13494 case WDI_RSSI_NOTIFICATION_IND:
13495 {
13496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13497 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013498#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
13499 rssiNotification.bReserved =
13500 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
13501 rssiNotification.bRssiThres1NegCross =
13502 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
13503 rssiNotification.bRssiThres1PosCross =
13504 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
13505 rssiNotification.bRssiThres2NegCross =
13506 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
13507 rssiNotification.bRssiThres2PosCross =
13508 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
13509 rssiNotification.bRssiThres3NegCross =
13510 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
13511 rssiNotification.bRssiThres3PosCross =
13512 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080013513 rssiNotification.avgRssi = (v_S7_t)
13514 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070013515 WLANTL_BMPSRSSIRegionChangedNotification(
13516 pWDA->pVosContext,
13517 &rssiNotification);
13518#endif
13519 break ;
13520 }
13521 case WDI_MISSED_BEACON_IND:
13522 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080013523 tpSirSmeMissedBeaconInd pMissBeacInd =
13524 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070013525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13526 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013527 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080013528 if(NULL == pMissBeacInd)
13529 {
13530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13531 "%s: VOS MEM Alloc Failure", __func__);
13532 break;
13533 }
13534 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
13535 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
13536 pMissBeacInd->bssIdx =
13537 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
13538 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013539 break ;
13540 }
13541 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
13542 {
13543 /* TODO: Decode Ind and send Ind to PE */
13544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13545 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
13546 break ;
13547 }
13548
13549 case WDI_MIC_FAILURE_IND:
13550 {
13551 tpSirSmeMicFailureInd pMicInd =
13552 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
13553
13554 if(NULL == pMicInd)
13555 {
13556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013557 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013558 break;
13559 }
13560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13561 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013562 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
13563 pMicInd->length = sizeof(tSirSmeMicFailureInd);
13564 vos_mem_copy(pMicInd->bssId,
13565 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
13566 sizeof(tSirMacAddr));
13567 vos_mem_copy(pMicInd->info.srcMacAddr,
13568 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
13569 sizeof(tSirMacAddr));
13570 vos_mem_copy(pMicInd->info.taMacAddr,
13571 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
13572 sizeof(tSirMacAddr));
13573 vos_mem_copy(pMicInd->info.dstMacAddr,
13574 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
13575 sizeof(tSirMacAddr));
13576 vos_mem_copy(pMicInd->info.rxMacAddr,
13577 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
13578 sizeof(tSirMacAddr));
13579 pMicInd->info.multicast =
13580 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
13581 pMicInd->info.keyId=
13582 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
13583 pMicInd->info.IV1=
13584 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
13585 vos_mem_copy(pMicInd->info.TSC,
13586 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070013587 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
13588 (void *)pMicInd , 0) ;
13589 break ;
13590 }
13591 case WDI_FATAL_ERROR_IND:
13592 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070013593 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070013594 /* TODO: Decode Ind and send Ind to PE */
13595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13596 "Received WDI_FATAL_ERROR_IND from WDI ");
13597 break ;
13598 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013599 case WDI_DEL_STA_IND:
13600 {
Jeff Johnson295189b2012-06-20 16:38:30 -070013601 tpDeleteStaContext pDelSTACtx =
13602 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
13603
13604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13605 "Received WDI_DEL_STA_IND from WDI ");
13606 if(NULL == pDelSTACtx)
13607 {
13608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013609 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013610 break;
13611 }
13612 vos_mem_copy(pDelSTACtx->addr2,
13613 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
13614 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013615 vos_mem_copy(pDelSTACtx->bssId,
13616 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
13617 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013618 pDelSTACtx->assocId =
13619 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
13620 pDelSTACtx->reasonCode =
13621 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
13622 pDelSTACtx->staId =
13623 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070013624 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
13625 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013626 break ;
13627 }
13628 case WDI_COEX_IND:
13629 {
13630 tANI_U32 index;
13631 vos_msg_t vosMsg;
c_hpothub3458992014-09-19 19:58:57 +053013632 tSirSmeCoexInd *pSmeCoexInd;
13633
13634 if (SIR_COEX_IND_TYPE_CXM_FEATURES_NOTIFICATION ==
13635 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType)
13636 {
13637 if(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData)
13638 {
13639 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13640 FL("Coex state: 0x%x coex feature: 0x%x"),
13641 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[0],
13642 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[1]);
13643
13644 if (wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2] << 16)
13645 {
13646 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, FL("power limit: 0x%x"),
13647 (tANI_U16)(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2]));
13648 }
13649 }
13650 break;
13651 }
13652
13653 pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070013654 if(NULL == pSmeCoexInd)
13655 {
13656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013657 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013658 break;
13659 }
13660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13661 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013662 /* Message Header */
13663 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
13664 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070013665 /* Info from WDI Indication */
13666 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
13667 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
13668 {
13669 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
13670 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013671 /* VOS message wrapper */
13672 vosMsg.type = eWNI_SME_COEX_IND;
13673 vosMsg.bodyptr = (void *)pSmeCoexInd;
13674 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013675 /* Send message to SME */
13676 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13677 {
13678 /* free the mem and return */
13679 vos_mem_free((v_VOID_t *)pSmeCoexInd);
13680 }
13681 else
13682 {
13683 /* DEBUG */
13684 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13685 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
13686 pSmeCoexInd->coexIndType,
13687 pSmeCoexInd->coexIndData[0],
13688 pSmeCoexInd->coexIndData[1],
13689 pSmeCoexInd->coexIndData[2],
13690 pSmeCoexInd->coexIndData[3]);
13691 }
13692 break;
13693 }
13694 case WDI_TX_COMPLETE_IND:
13695 {
13696 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
13697 /* Calling TxCompleteAck Indication from wda context*/
13698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13699 "Complete Indication received from HAL");
13700 if( pWDA->pAckTxCbFunc )
13701 {
13702 if( VOS_STATUS_SUCCESS !=
13703 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
13704 {
13705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13706 "Tx Complete timeout Timer Stop Failed ");
13707 }
13708 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
13709 pWDA->pAckTxCbFunc = NULL;
13710 }
13711 else
13712 {
13713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13714 "Tx Complete Indication is received after timeout ");
13715 }
13716 break;
13717 }
Viral Modid86bde22012-12-10 13:09:21 -080013718 case WDI_P2P_NOA_START_IND :
13719 {
13720 tSirP2PNoaStart *pP2pNoaStart =
13721 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
13722
13723 if (NULL == pP2pNoaStart)
13724 {
13725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13726 "Memory allocation failure, "
13727 "WDI_P2P_NOA_START_IND not forwarded");
13728 break;
13729 }
13730 pP2pNoaStart->status =
13731 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
13732 pP2pNoaStart->bssIdx =
13733 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
13734 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
13735 (void *)pP2pNoaStart , 0) ;
13736 break;
13737 }
13738
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053013739#ifdef FEATURE_WLAN_TDLS
13740 case WDI_TDLS_IND :
13741 {
13742 tSirTdlsInd *pTdlsInd =
13743 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
13744
13745 if (NULL == pTdlsInd)
13746 {
13747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13748 "Memory allocation failure, "
13749 "WDI_TDLS_IND not forwarded");
13750 break;
13751 }
13752 pTdlsInd->status =
13753 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
13754 pTdlsInd->assocId =
13755 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
13756 pTdlsInd->staIdx =
13757 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
13758 pTdlsInd->reasonCode =
13759 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
13760 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
13761 (void *)pTdlsInd , 0) ;
13762 break;
13763 }
13764#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013765 case WDI_P2P_NOA_ATTR_IND :
13766 {
13767 tSirP2PNoaAttr *pP2pNoaAttr =
13768 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13770 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070013771 if (NULL == pP2pNoaAttr)
13772 {
13773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13774 "Memory allocation failure, "
13775 "WDI_P2P_NOA_ATTR_IND not forwarded");
13776 break;
13777 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013778 pP2pNoaAttr->index =
13779 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
13780 pP2pNoaAttr->oppPsFlag =
13781 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
13782 pP2pNoaAttr->ctWin =
13783 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
13784
13785 pP2pNoaAttr->uNoa1IntervalCnt =
13786 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
13787 pP2pNoaAttr->uNoa1Duration =
13788 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
13789 pP2pNoaAttr->uNoa1Interval =
13790 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
13791 pP2pNoaAttr->uNoa1StartTime =
13792 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070013793 pP2pNoaAttr->uNoa2IntervalCnt =
13794 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
13795 pP2pNoaAttr->uNoa2Duration =
13796 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
13797 pP2pNoaAttr->uNoa2Interval =
13798 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
13799 pP2pNoaAttr->uNoa2StartTime =
13800 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070013801 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
13802 (void *)pP2pNoaAttr , 0) ;
13803 break;
13804 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013805#ifdef FEATURE_WLAN_SCAN_PNO
13806 case WDI_PREF_NETWORK_FOUND_IND:
13807 {
13808 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070013809 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
13810 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
13811 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
13812 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
13813
Jeff Johnson295189b2012-06-20 16:38:30 -070013814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13815 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070013816 if (NULL == pPrefNetworkFoundInd)
13817 {
13818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13819 "Memory allocation failure, "
13820 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053013821 if (NULL !=
13822 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
13823 {
13824 wpalMemoryFree(
13825 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
13826 );
13827 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
13828 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013829 break;
13830 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013831 /* Message Header */
13832 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070013833 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070013834
13835 /* Info from WDI Indication */
13836 pPrefNetworkFoundInd->ssId.length =
13837 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070013838 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070013839 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
13840 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
13841 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070013842 if (NULL !=
13843 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
13844 {
13845 pPrefNetworkFoundInd->frameLength =
13846 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
13847 vos_mem_copy( pPrefNetworkFoundInd->data,
13848 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
13849 pPrefNetworkFoundInd->frameLength);
13850 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
13851 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
13852 }
13853 else
13854 {
13855 pPrefNetworkFoundInd->frameLength = 0;
13856 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013857 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070013858 /* VOS message wrapper */
13859 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
13860 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
13861 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013862 /* Send message to SME */
13863 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13864 {
13865 /* free the mem and return */
13866 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
13867 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013868 break;
13869 }
13870#endif // FEATURE_WLAN_SCAN_PNO
13871
13872#ifdef WLAN_WAKEUP_EVENTS
13873 case WDI_WAKE_REASON_IND:
13874 {
13875 vos_msg_t vosMsg;
13876 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
13877 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
13878 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
13879
13880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Sushant Kaushik1b645382014-10-13 16:39:36 +053013881 "[WAKE_REASON WDI] WAKE_REASON_IND Type (%d) data (ulReason=0x%x, ulReasonArg=0x%x, ulStoredDataLen=0x%x)",
Jeff Johnson295189b2012-06-20 16:38:30 -070013882 wdiLowLevelInd->wdiIndicationType,
13883 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
13884 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
13885 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
13886
13887 if (NULL == pWakeReasonInd)
13888 {
13889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13890 "Memory allocation failure, "
13891 "WDI_WAKE_REASON_IND not forwarded");
13892 break;
13893 }
13894
13895 vos_mem_zero(pWakeReasonInd, allocSize);
13896
13897 /* Message Header */
13898 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
13899 pWakeReasonInd->mesgLen = allocSize;
13900
13901 /* Info from WDI Indication */
13902 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
13903 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
13904 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
13905 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
13906 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
13907 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
13908 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
13909 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
13910
13911 /* VOS message wrapper */
13912 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
13913 vosMsg.bodyptr = (void *) pWakeReasonInd;
13914 vosMsg.bodyval = 0;
13915
13916 /* Send message to SME */
13917 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13918 {
13919 /* free the mem and return */
13920 vos_mem_free((v_VOID_t *) pWakeReasonInd);
13921 }
13922
13923 break;
13924 }
13925#endif // WLAN_WAKEUP_EVENTS
13926
13927 case WDI_TX_PER_HIT_IND:
13928 {
13929 vos_msg_t vosMsg;
13930 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
13931 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
13932 /* VOS message wrapper */
13933 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
13934 vosMsg.bodyptr = NULL;
13935 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013936 /* Send message to SME */
13937 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13938 {
13939 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
13940 }
13941 break;
13942 }
13943
Leo Chang9056f462013-08-01 19:21:11 -070013944#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070013945 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070013946 {
Leo Changd9df8aa2013-09-26 13:32:26 -070013947 vos_msg_t vosMsg;
13948 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070013949
Leo Changd9df8aa2013-09-26 13:32:26 -070013950 lphbInd =
13951 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
13952 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070013953 {
13954 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13955 "%s: LPHB IND buffer alloc Fail", __func__);
13956 return ;
13957 }
13958
Leo Changd9df8aa2013-09-26 13:32:26 -070013959 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070013960 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070013961 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070013962 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070013963 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070013964 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
13965
13966 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070013967 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070013968 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
13969
Leo Changd9df8aa2013-09-26 13:32:26 -070013970 vosMsg.type = eWNI_SME_LPHB_IND;
13971 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070013972 vosMsg.bodyval = 0;
13973 /* Send message to SME */
13974 if (VOS_STATUS_SUCCESS !=
13975 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13976 {
13977 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13978 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070013979 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070013980 }
13981 break;
13982 }
13983#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070013984 case WDI_PERIODIC_TX_PTRN_FW_IND:
13985 {
13986 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13987 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
13988 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
13989 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
13990 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
13991 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
13992 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
13993
13994 break;
13995 }
Leo Chang9056f462013-08-01 19:21:11 -070013996
Ravi Joshid2ca7c42013-07-23 08:37:49 -070013997 case WDI_IBSS_PEER_INACTIVITY_IND:
13998 {
13999 tSirIbssPeerInactivityInd *pIbssInd =
14000 (tSirIbssPeerInactivityInd *)
14001 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
14002
14003 if (NULL == pIbssInd)
14004 {
14005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14006 "Memory allocation failure, "
14007 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
14008 break;
14009 }
14010
14011 pIbssInd->bssIdx =
14012 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
14013 pIbssInd->staIdx =
14014 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
14015 vos_mem_copy(pIbssInd->peerAddr,
14016 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
14017 sizeof(tSirMacAddr));
14018 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
14019 break;
14020 }
14021
Rajeev79dbe4c2013-10-05 11:03:42 +053014022#ifdef FEATURE_WLAN_BATCH_SCAN
14023 case WDI_BATCH_SCAN_RESULT_IND:
14024 {
14025 void *pBatchScanResult;
14026 void *pCallbackContext;
14027 tpAniSirGlobal pMac;
14028
14029 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14030 "Received WDI_BATCHSCAN_RESULT_IND from FW");
14031
14032 /*sanity check*/
Sunil Duttbd736ed2014-05-26 21:19:41 +053014033 if (NULL == pWDA)
Rajeev79dbe4c2013-10-05 11:03:42 +053014034 {
14035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14036 "%s:pWDA is NULL", __func__);
14037 VOS_ASSERT(0);
14038 return;
14039 }
14040
14041 pBatchScanResult =
14042 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
14043 if (NULL == pBatchScanResult)
14044 {
14045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14046 "%s:Batch scan result from FW is null can't invoke HDD callback",
14047 __func__);
14048 VOS_ASSERT(0);
14049 return;
14050 }
14051
14052 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14053 if (NULL == pMac)
14054 {
14055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14056 "%s:pMac is NULL", __func__);
14057 VOS_ASSERT(0);
14058 return;
14059 }
14060
14061 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
14062 /*call hdd callback with set batch scan response data*/
14063 if(pMac->pmc.batchScanResultCallback)
14064 {
14065 pMac->pmc.batchScanResultCallback(pCallbackContext,
14066 pBatchScanResult);
14067 }
14068 else
14069 {
14070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14071 "%s:HDD callback is null", __func__);
14072 VOS_ASSERT(0);
14073 }
14074 break;
14075 }
14076#endif
14077
Leo Chang0b0e45a2013-12-15 15:18:55 -080014078#ifdef FEATURE_WLAN_CH_AVOID
14079 case WDI_CH_AVOID_IND:
14080 {
14081 vos_msg_t vosMsg;
14082 tSirChAvoidIndType *chAvoidInd;
14083
14084 chAvoidInd =
14085 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
14086 if (NULL == chAvoidInd)
14087 {
14088 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14089 "%s: CH_AVOID IND buffer alloc Fail", __func__);
14090 return ;
14091 }
14092
14093 chAvoidInd->avoidRangeCount =
14094 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
14095 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
14096 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
14097 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
14098
14099 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14100 "%s : WDA CH avoid notification", __func__);
14101
14102 vosMsg.type = eWNI_SME_CH_AVOID_IND;
14103 vosMsg.bodyptr = chAvoidInd;
14104 vosMsg.bodyval = 0;
14105 /* Send message to SME */
14106 if (VOS_STATUS_SUCCESS !=
14107 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14108 {
14109 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14110 "post eWNI_SME_CH_AVOID_IND to SME Failed");
14111 vos_mem_free(chAvoidInd);
14112 }
14113 break;
14114 }
14115#endif /* FEATURE_WLAN_CH_AVOID */
14116
Sunil Duttbd736ed2014-05-26 21:19:41 +053014117#ifdef WLAN_FEATURE_LINK_LAYER_STATS
14118 case WDI_LL_STATS_RESULTS_IND:
14119 {
14120 void *pLinkLayerStatsInd;
Sunil Duttbd736ed2014-05-26 21:19:41 +053014121 tpAniSirGlobal pMac;
14122
14123 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14124 "Received WDI_LL_STATS_RESULTS_IND from FW");
14125
14126 /*sanity check*/
14127 if (NULL == pWDA)
14128 {
14129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14130 "%s:pWDA is NULL", __func__);
14131 VOS_ASSERT(0);
14132 return;
14133 }
14134
14135 pLinkLayerStatsInd =
Dino Mycled3d50022014-07-07 12:58:25 +053014136 (void *)wdiLowLevelInd->
14137 wdiIndicationData.wdiLinkLayerStatsResults.pLinkLayerStatsResults;
Sunil Duttbd736ed2014-05-26 21:19:41 +053014138 if (NULL == pLinkLayerStatsInd)
14139 {
14140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14141 "%s:Link Layer Statistics from FW is null can't invoke HDD callback",
14142 __func__);
14143 VOS_ASSERT(0);
14144 return;
14145 }
14146
14147 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14148 if (NULL == pMac)
14149 {
14150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14151 "%s:pMac is NULL", __func__);
14152 VOS_ASSERT(0);
14153 return;
14154 }
14155
Dino Mycled3d50022014-07-07 12:58:25 +053014156 /* call hdd callback with Link Layer Statistics.
14157 * vdev_id/ifacId in link_stats_results will be
14158 * used to retrieve the correct HDD context
14159 */
Sunil Duttbd736ed2014-05-26 21:19:41 +053014160 if (pMac->sme.pLinkLayerStatsIndCallback)
14161 {
Dino Mycled3d50022014-07-07 12:58:25 +053014162 pMac->sme.pLinkLayerStatsIndCallback(pMac->pAdapter,
Sunil Duttbd736ed2014-05-26 21:19:41 +053014163 WDA_LINK_LAYER_STATS_RESULTS_RSP,
Dino Mycled3d50022014-07-07 12:58:25 +053014164 pLinkLayerStatsInd,
14165 wdiLowLevelInd->
14166 wdiIndicationData.wdiLinkLayerStatsResults.macAddr);
Sunil Duttbd736ed2014-05-26 21:19:41 +053014167 }
14168 else
14169 {
14170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14171 "%s:HDD callback is null", __func__);
14172 }
14173 break;
14174 }
14175#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
14176
Dino Mycle41bdc942014-06-10 11:30:24 +053014177#ifdef WLAN_FEATURE_EXTSCAN
14178 case WDI_EXTSCAN_PROGRESS_IND:
14179 case WDI_EXTSCAN_SCAN_AVAILABLE_IND:
14180 case WDI_EXTSCAN_SCAN_RESULT_IND:
14181 case WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND:
14182 case WDI_EXTSCAN_SIGN_RSSI_RESULT_IND:
14183 {
14184 void *pEXTScanData;
14185 void *pCallbackContext;
14186 tpAniSirGlobal pMac;
14187 tANI_U16 indType;
14188
14189 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14190 "Received WDI_EXTSCAN Indications from FW");
14191 /*sanity check*/
14192 if (NULL == pWDA)
14193 {
14194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14195 "%s:pWDA is NULL", __func__);
14196 VOS_ASSERT(0);
14197 return;
14198 }
14199 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_PROGRESS_IND)
14200 {
14201 indType = WDA_EXTSCAN_PROGRESS_IND;
14202
14203 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14204 "WDI_EXTSCAN Indication is WDI_EXTSCAN_PROGRESS_IND");
14205 }
14206 if (wdiLowLevelInd->wdiIndicationType ==
14207 WDI_EXTSCAN_SCAN_AVAILABLE_IND)
14208 {
14209 indType = WDA_EXTSCAN_SCAN_AVAILABLE_IND;
14210
14211 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14212 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_AVAILABLE_IND");
14213 }
14214 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_SCAN_RESULT_IND)
14215 {
14216 indType = WDA_EXTSCAN_SCAN_RESULT_IND;
14217
14218 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14219 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_RESULT_IND");
14220 }
14221 if (wdiLowLevelInd->wdiIndicationType ==
14222 WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND)
14223 {
14224 indType = WDA_EXTSCAN_BSSID_HOTLIST_RESULT_IND;
14225
14226 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14227 "WDI_EXTSCAN Indication is WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND");
14228 }
14229 if (wdiLowLevelInd->wdiIndicationType ==
14230 WDI_EXTSCAN_SIGN_RSSI_RESULT_IND)
14231 {
14232 indType = WDA_EXTSCAN_SIGNF_RSSI_RESULT_IND;
14233
14234 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14235 "WDI_EXTSCAN Indication is WDA_EXTSCAN_SIGNF_RSSI_RESULT_IND");
14236 }
14237
14238 pEXTScanData =
14239 (void *)wdiLowLevelInd->wdiIndicationData.pEXTScanIndData;
14240 if (NULL == pEXTScanData)
14241 {
14242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14243 "%s: EXTSCAN Indication Data is null, can't invoke HDD callback",
14244 __func__);
14245 VOS_ASSERT(0);
14246 return;
14247 }
14248
14249 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14250 if (NULL == pMac)
14251 {
14252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14253 "%s:pMac is NULL", __func__);
14254 VOS_ASSERT(0);
14255 return;
14256 }
14257
14258 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
14259
14260 if(pMac->sme.pEXTScanIndCb)
14261 {
14262 pMac->sme.pEXTScanIndCb(pCallbackContext,
14263 indType,
14264 pEXTScanData);
14265 }
14266 else
14267 {
14268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14269 "%s:HDD callback is null", __func__);
14270 }
14271 break;
14272 }
14273#endif /* WLAN_FEATURE_EXTSCAN */
Abhishek Singh66c16762014-08-14 19:13:19 +053014274 case WDI_DEL_BA_IND:
14275 {
14276 tpBADeleteParams pDelBAInd =
14277 (tpBADeleteParams)vos_mem_malloc(sizeof(tpBADeleteParams));
14278
14279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14280 "Received WDI_DEL_BA_IND from WDI ");
14281 if(NULL == pDelBAInd)
14282 {
14283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14284 "%s: VOS MEM Alloc Failure", __func__);
14285 break;
14286 }
14287 vos_mem_copy(pDelBAInd->peerMacAddr,
14288 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.peerMacAddr,
14289 sizeof(tSirMacAddr));
14290 vos_mem_copy(pDelBAInd->bssId,
14291 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.bssId,
14292 sizeof(tSirMacAddr));
14293 pDelBAInd->staIdx =
14294 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.staIdx;
14295 pDelBAInd->baTID =
14296 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baTID;
14297 pDelBAInd->baDirection =
14298 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baDirection;
14299 pDelBAInd->reasonCode =
14300 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.reasonCode;
14301
14302 WDA_SendMsg(pWDA, SIR_LIM_DEL_BA_IND,
14303 (void *)pDelBAInd , 0) ;
14304 break;
14305 }
Dino Mycle41bdc942014-06-10 11:30:24 +053014306
Jeff Johnson295189b2012-06-20 16:38:30 -070014307 default:
14308 {
14309 /* TODO error */
14310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14311 "Received UNKNOWN Indication from WDI ");
14312 }
14313 }
14314 return ;
14315}
14316
Jeff Johnson295189b2012-06-20 16:38:30 -070014317/*
14318 * BA related processing in WDA.
14319 */
Jeff Johnson295189b2012-06-20 16:38:30 -070014320void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
14321 void* pUserData)
14322{
14323 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14324 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070014325 if(NULL == pWdaParams)
14326 {
14327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014328 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014329 VOS_ASSERT(0) ;
14330 return ;
14331 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014332 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070014333 vos_mem_free(pWdaParams->wdaMsgParam) ;
14334 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14335 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014337 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014338 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
14339 {
14340 tANI_U8 i = 0 ;
14341 tBaActivityInd *baActivityInd = NULL ;
14342 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
14343 tANI_U8 allocSize = sizeof(tBaActivityInd)
14344 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
14345 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
14346 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014347 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014348 if(NULL == baActivityInd)
14349 {
14350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014351 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014352 VOS_ASSERT(0) ;
14353 return;
14354 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014355 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
14356 sizeof(tSirMacAddr)) ;
14357 baActivityInd->baCandidateCnt = baCandidateCount ;
14358
14359 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
14360 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
14361
14362 for(i = 0 ; i < baCandidateCount ; i++)
14363 {
14364 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014365 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
14366 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014367 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
14368 {
14369 baCandidate->baInfo[tid].fBaEnable =
14370 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
14371 baCandidate->baInfo[tid].startingSeqNum =
14372 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
14373 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070014374 wdiBaCandidate++ ;
14375 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014376 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014377 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
14378 }
14379 else
14380 {
14381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14382 "BA Trigger RSP with Failure received ");
14383 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014384 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014385}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014386
14387
14388/*
14389 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
14390 * during MCC
14391 */
14392void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
14393{
14394 wpt_uint32 enabled;
14395 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
14396 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
14397 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
14398
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014399 if (NULL == pMac )
14400 {
14401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14402 "%s: Invoked with invalid MAC context ", __func__ );
14403 VOS_ASSERT(0);
14404 return;
14405 }
14406
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014407 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
14408 != eSIR_SUCCESS)
14409 {
14410 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14411 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
14412 return;
14413 }
14414
14415 if(!enabled)
14416 {
14417 return;
14418 }
14419
14420 if(NULL == pWDA)
14421 {
14422 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14423 "%s:WDA context is NULL", __func__);
14424 VOS_ASSERT(0);
14425 return;
14426 }
14427
14428 if(activate)
14429 {
14430 if( VOS_STATUS_SUCCESS !=
14431 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
14432 {
14433 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14434 "Traffic Stats Timer Start Failed ");
14435 return;
14436 }
14437 WDI_DS_ActivateTrafficStats();
14438 }
14439 else
14440 {
14441 WDI_DS_DeactivateTrafficStats();
14442 WDI_DS_ClearTrafficStats();
14443
14444 if( VOS_STATUS_SUCCESS !=
14445 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
14446 {
14447 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14448 "Traffic Stats Timer Stop Failed ");
14449 return;
14450 }
14451 }
14452}
14453
14454/*
14455 * Traffic Stats Timer handler
14456 */
14457void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
14458{
14459 WDI_Status wdiStatus;
14460 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
14461 WDI_TrafficStatsIndType trafficStatsIndParams;
14462 wpt_uint32 length, enabled;
14463 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14464
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014465 if (NULL == pMac )
14466 {
14467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14468 "%s: Invoked with invalid MAC context ", __func__ );
14469 VOS_ASSERT(0);
14470 return;
14471 }
14472
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014473 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
14474 != eSIR_SUCCESS)
14475 {
14476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14477 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
14478 return;
14479 }
14480
14481 if(!enabled)
14482 {
14483 WDI_DS_DeactivateTrafficStats();
14484 return;
14485 }
14486
14487 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
14488
14489 if(pWdiTrafficStats != NULL)
14490 {
14491 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
14492 trafficStatsIndParams.length = length;
14493 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080014494 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014495 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
14496 trafficStatsIndParams.pUserData = pWDA;
14497
14498 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
14499
14500 if(WDI_STATUS_PENDING == wdiStatus)
14501 {
14502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14503 "Pending received for %s:%d ",__func__,__LINE__ );
14504 }
14505 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
14506 {
14507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14508 "Failure in %s:%d ",__func__,__LINE__ );
14509 }
14510
14511 WDI_DS_ClearTrafficStats();
14512 }
14513 else
14514 {
14515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
14516 "pWdiTrafficStats is Null");
14517 }
14518
14519 if( VOS_STATUS_SUCCESS !=
14520 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
14521 {
14522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
14523 "Traffic Stats Timer Start Failed ");
14524 return;
14525 }
14526}
14527
Jeff Johnson295189b2012-06-20 16:38:30 -070014528/*
14529 * BA Activity check timer handler
14530 */
14531void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
14532{
14533 tANI_U8 curSta = 0 ;
14534 tANI_U8 tid = 0 ;
14535 tANI_U8 size = 0 ;
14536 tANI_U8 baCandidateCount = 0 ;
14537 tANI_U8 newBaCandidate = 0 ;
Abhishek Singh0644e482014-10-06 18:38:23 +053014538 tANI_U32 val;
Jeff Johnson295189b2012-06-20 16:38:30 -070014539 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
Abhishek Singh0644e482014-10-06 18:38:23 +053014540 tpAniSirGlobal pMac;
14541
Jeff Johnson295189b2012-06-20 16:38:30 -070014542 if(NULL == pWDA)
14543 {
14544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014545 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014546 VOS_ASSERT(0);
14547 return ;
14548 }
14549 if(WDA_MAX_STA < pWDA->wdaMaxSta)
14550 {
14551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14552 "Inconsistent STA entries in WDA");
14553 VOS_ASSERT(0) ;
Abhishek Singh0644e482014-10-06 18:38:23 +053014554 }
14555 if(NULL == pWDA->pVosContext)
14556 {
14557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14558 "%s: pVosContext is NULL",__func__);
14559 VOS_ASSERT(0);
14560 return ;
14561 }
14562 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Abhishek Singh68883952014-10-14 11:59:05 +053014563 if(NULL == pMac)
14564 {
14565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14566 "%s: pMac is NULL",__func__);
14567 VOS_ASSERT(0);
14568 return ;
14569 }
14570
Abhishek Singh0644e482014-10-06 18:38:23 +053014571 if (wlan_cfgGetInt(pMac,
14572 WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC, &val) !=
14573 eSIR_SUCCESS)
14574 {
14575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14576 "Unable to get WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC");
14577 val = 0;
14578 }
14579
Jeff Johnson295189b2012-06-20 16:38:30 -070014580 /* walk through all STA entries and find out TX packet count */
14581 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
14582 {
Abhishek Singh0644e482014-10-06 18:38:23 +053014583 tANI_U32 currentOperChan = pWDA->wdaStaInfo[curSta].currentOperChan;
Gopichand Nakkala976e3252013-01-03 15:45:56 -080014584#ifdef WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053014585 // We can only do BA on "hard" STAs.
14586 if (!(IS_HWSTA_IDX(curSta)))
14587 {
14588 continue;
14589 }
Gopichand Nakkala976e3252013-01-03 15:45:56 -080014590#endif //WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053014591 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
14592 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070014593 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014594 tANI_U32 txPktCount = 0 ;
14595 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014596 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070014597 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
14598 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070014599 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
14600 curSta, tid, &txPktCount)))
14601 {
14602#if 0
14603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
14604 "************* %d:%d, %d ",curSta, txPktCount,
14605 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
14606#endif
Abhishek Singh0644e482014-10-06 18:38:23 +053014607 if(val && ( (currentOperChan >= SIR_11B_CHANNEL_BEGIN) &&
14608 (currentOperChan <= SIR_11B_CHANNEL_END)))
14609 {
14610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14611 "%s: BTC disabled aggregation - dont start "
14612 "TX ADDBA req",__func__);
14613 }
14614 else if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070014615 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Abhishek Singh424ae432014-12-05 11:54:54 +053014616 && (((eSYSTEM_STA_IN_IBSS_ROLE ==
14617 pWDA->wdaGlobalSystemRole) && txPktCount )
14618 || (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
14619 curSta, tid))))
Jeff Johnson295189b2012-06-20 16:38:30 -070014620 {
14621 /* get prepare for sending message to HAL */
14622 //baCandidate[baCandidateCount].staIdx = curSta ;
14623 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
14624 newBaCandidate = WDA_ENABLE_BA ;
14625 }
14626 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
14627 }
14628 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014629 /* fill the entry for all the sta with given TID's */
14630 if(WDA_ENABLE_BA == newBaCandidate)
14631 {
14632 /* move to next BA candidate */
14633 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
14634 size += sizeof(WDI_TriggerBAReqCandidateType) ;
14635 baCandidateCount++ ;
14636 newBaCandidate = WDA_DISABLE_BA ;
14637 }
14638 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014639 /* prepare and send message to hal */
14640 if( 0 < baCandidateCount)
14641 {
14642 WDI_Status status = WDI_STATUS_SUCCESS ;
14643 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
14644 tWDA_ReqParams *pWdaParams =
14645 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014646 if(NULL == pWdaParams)
14647 {
14648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014649 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014650 VOS_ASSERT(0) ;
14651 return;
14652 }
14653 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
14654 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
14655 if(NULL == wdiTriggerBaReq)
14656 {
14657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014658 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014659 VOS_ASSERT(0) ;
14660 vos_mem_free(pWdaParams);
14661 return;
14662 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014663 do
14664 {
14665 WDI_TriggerBAReqinfoType *triggerBaInfo =
14666 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
14667 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
14668 /* TEMP_FIX: Need to see if WDI need check for assoc session for
14669 * for each request */
14670 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
14671 triggerBaInfo->ucBASessionID = 0;
14672 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
14673 } while(0) ;
14674 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
14675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014676 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014677 pWdaParams->pWdaContext = pWDA;
14678 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
14679 pWdaParams->wdaMsgParam = NULL;
14680 status = WDI_TriggerBAReq(wdiTriggerBaReq,
14681 WDA_TriggerBaReqCallback, pWdaParams) ;
14682 if(IS_WDI_STATUS_FAILURE(status))
14683 {
14684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14685 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
14686 vos_mem_free(pWdaParams->wdaMsgParam) ;
14687 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14688 vos_mem_free(pWdaParams) ;
14689 }
14690 }
14691 else
14692 {
14693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
14694 "There is no TID for initiating BA");
14695 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014696 if( VOS_STATUS_SUCCESS !=
14697 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
14698 {
14699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14700 "BA Activity Timer Stop Failed ");
14701 return ;
14702 }
14703 if( VOS_STATUS_SUCCESS !=
14704 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
14705 {
14706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14707 "BA Activity Timer Start Failed ");
14708 return;
14709 }
14710 return ;
14711}
Jeff Johnson295189b2012-06-20 16:38:30 -070014712/*
14713 * WDA common routine to create timer used by WDA.
14714 */
14715static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
14716{
Jeff Johnson295189b2012-06-20 16:38:30 -070014717 VOS_STATUS status = VOS_STATUS_SUCCESS ;
14718 tANI_U32 val = 0 ;
14719 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14720
14721 if(NULL == pMac)
14722 {
14723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014724 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014725 VOS_ASSERT(0);
14726 return VOS_STATUS_E_FAILURE;
14727 }
14728 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
14729 != eSIR_SUCCESS)
14730 {
14731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14732 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
14733 return VOS_STATUS_E_FAILURE;
14734 }
14735 val = SYS_MS_TO_TICKS(val) ;
14736
14737 /* BA activity check timer */
14738 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
14739 "BA Activity Check timer", WDA_TimerHandler,
14740 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
14741 if(status != TX_SUCCESS)
14742 {
14743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14744 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014745 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014746 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014747 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014748 /* Tx Complete Timeout timer */
14749 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
14750 "Tx Complete Check timer", WDA_TimerHandler,
14751 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014752 if(status != TX_SUCCESS)
14753 {
14754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14755 "Unable to create Tx Complete Timeout timer");
14756 /* Destroy timer of BA activity check timer */
14757 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
14758 if(status != TX_SUCCESS)
14759 {
14760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14761 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014762 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014763 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014764 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014765 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014766
14767 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
14768
14769 /* Traffic Stats timer */
14770 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
14771 "Traffic Stats timer", WDA_TimerHandler,
14772 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
14773 if(status != TX_SUCCESS)
14774 {
14775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14776 "Unable to create traffic stats timer");
14777 /* Destroy timer of BA activity check timer */
14778 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
14779 if(status != TX_SUCCESS)
14780 {
14781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14782 "Unable to Destroy BA activity timer");
14783 }
14784 /* Destroy timer of tx complete timer */
14785 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
14786 if(status != TX_SUCCESS)
14787 {
14788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14789 "Unable to Tx complete timer");
14790 }
14791 return VOS_STATUS_E_FAILURE ;
14792 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014793 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014794}
Jeff Johnson295189b2012-06-20 16:38:30 -070014795/*
14796 * WDA common routine to destroy timer used by WDA.
14797 */
14798static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
14799{
14800 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014801 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
14802 if(status != TX_SUCCESS)
14803 {
14804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14805 "Unable to Destroy Tx Complete Timeout timer");
14806 return eSIR_FAILURE ;
14807 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014808 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
14809 if(status != TX_SUCCESS)
14810 {
14811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14812 "Unable to Destroy BA activity timer");
14813 return eSIR_FAILURE ;
14814 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014815 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
14816 if(status != TX_SUCCESS)
14817 {
14818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14819 "Unable to Destroy traffic stats timer");
14820 return eSIR_FAILURE ;
14821 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014822 return eSIR_SUCCESS ;
14823}
Jeff Johnson295189b2012-06-20 16:38:30 -070014824/*
14825 * WDA timer handler.
14826 */
14827void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
14828{
14829 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
14830 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014831 /*
14832 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
14833 */
14834 wdaMsg.type = timerInfo ;
14835 wdaMsg.bodyptr = NULL;
14836 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070014837 /* post the message.. */
14838 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
14839 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
14840 {
14841 vosStatus = VOS_STATUS_E_BADMSG;
14842 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014843}
Jeff Johnson295189b2012-06-20 16:38:30 -070014844/*
14845 * WDA Tx Complete timeout Indication.
14846 */
14847void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
14848{
14849 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014850 if( pWDA->pAckTxCbFunc )
14851 {
14852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014853 "TxComplete timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070014854 pWDA->pAckTxCbFunc( pMac, 0);
14855 pWDA->pAckTxCbFunc = NULL;
14856 }
14857 else
14858 {
14859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014860 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070014861 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014862}
Jeff Johnson295189b2012-06-20 16:38:30 -070014863/*
14864 * WDA Set REG Domain to VOS NV
14865 */
Abhishek Singha306a442013-11-07 18:39:01 +053014866eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
14867 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070014868{
Abhishek Singha306a442013-11-07 18:39:01 +053014869 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070014870 {
14871 return eHAL_STATUS_INVALID_PARAMETER;
14872 }
14873 return eHAL_STATUS_SUCCESS;
14874}
Jeff Johnson295189b2012-06-20 16:38:30 -070014875
Jeff Johnson295189b2012-06-20 16:38:30 -070014876#ifdef FEATURE_WLAN_SCAN_PNO
14877/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014878 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014879 *
14880 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014881void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014882{
14883 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014884 tSirPNOScanReq *pPNOScanReqParams;
14885
Jeff Johnson295189b2012-06-20 16:38:30 -070014886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014887 "<------ %s, wdiStatus: %d",__func__, status);
Yue Ma7f44bbe2013-04-12 11:47:39 -070014888 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070014889 {
14890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014891 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014892 VOS_ASSERT(0) ;
14893 return ;
14894 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014895
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014896 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
14897 if(pPNOScanReqParams->statusCallback)
14898 {
14899 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
14900 (status == WDI_STATUS_SUCCESS) ?
14901 VOS_STATUS_SUCCESS : VOS_STATUS_E_FAILURE);
14902 }
14903
Yue Ma7f44bbe2013-04-12 11:47:39 -070014904 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14905 vos_mem_free(pWdaParams->wdaMsgParam);
14906 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014907
14908 return ;
14909}
Jeff Johnson295189b2012-06-20 16:38:30 -070014910/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014911 * FUNCTION: WDA_PNOScanReqCallback
14912 * Free memory.
14913 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
14914 */
14915void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014916{
Yue Ma7f44bbe2013-04-12 11:47:39 -070014917 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014918 tSirPNOScanReq *pPNOScanReqParams;
Yue Ma7f44bbe2013-04-12 11:47:39 -070014919
14920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14921 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14922
14923 if(NULL == pWdaParams)
14924 {
14925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14926 "%s: pWdaParams received NULL", __func__);
14927 VOS_ASSERT(0);
14928 return;
14929 }
14930
14931 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14932 {
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014933 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
14934 if(pPNOScanReqParams->statusCallback)
14935 {
14936 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
14937 VOS_STATUS_E_FAILURE);
14938 }
14939
Yue Ma7f44bbe2013-04-12 11:47:39 -070014940 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14941 vos_mem_free(pWdaParams->wdaMsgParam);
14942 vos_mem_free(pWdaParams);
14943 }
14944
14945 return;
14946}
14947/*
14948 * FUNCTION: WDA_UpdateScanParamsRespCallback
14949 *
14950 */
14951void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
14952{
14953 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014955 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070014956 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070014957 {
14958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014959 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014960 VOS_ASSERT(0) ;
14961 return ;
14962 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014963
14964 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14965 vos_mem_free(pWdaParams->wdaMsgParam);
14966 vos_mem_free(pWdaParams);
14967
Jeff Johnson295189b2012-06-20 16:38:30 -070014968 return ;
14969}
Jeff Johnson295189b2012-06-20 16:38:30 -070014970/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014971 * FUNCTION: WDA_UpdateScanParamsReqCallback
14972 * Free memory.
14973 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
14974 */
14975void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
14976{
14977 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14978
14979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14980 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14981
14982 if(NULL == pWdaParams)
14983 {
14984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14985 "%s: pWdaParams received NULL", __func__);
14986 VOS_ASSERT(0);
14987 return;
14988 }
14989
14990 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14991 {
14992 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14993 vos_mem_free(pWdaParams->wdaMsgParam);
14994 vos_mem_free(pWdaParams);
14995 }
14996
14997 return;
14998}
14999/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015000 * FUNCTION: WDA_ProcessSetPreferredNetworkList
15001 * Request to WDI to set Preferred Network List.Offload
15002 */
15003VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
15004 tSirPNOScanReq *pPNOScanReqParams)
15005{
Jeff Johnson43971f52012-07-17 12:26:56 -070015006 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015007 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
15008 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
15009 tWDA_ReqParams *pWdaParams ;
15010 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070015011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015012 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015013 if(NULL == pwdiPNOScanReqInfo)
15014 {
15015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015016 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015017 VOS_ASSERT(0);
15018 return VOS_STATUS_E_NOMEM;
15019 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015020 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15021 if(NULL == pWdaParams)
15022 {
15023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015024 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015025 VOS_ASSERT(0);
15026 vos_mem_free(pwdiPNOScanReqInfo);
15027 return VOS_STATUS_E_NOMEM;
15028 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015029 //
15030 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
15031 //
15032 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
15033 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070015034 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
15035 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
15036 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015037 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
15038 {
15039 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
15040 &pPNOScanReqParams->aNetworks[i],
15041 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
15042 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015043 /*Scan timer intervals*/
15044 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
15045 &pPNOScanReqParams->scanTimers,
15046 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070015047 /*Probe template for 2.4GHz band*/
15048 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
15049 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15050 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015051 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
15052 pPNOScanReqParams->p24GProbeTemplate,
15053 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070015054 /*Probe template for 5GHz band*/
15055 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
15056 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15057 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015058 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
15059 pPNOScanReqParams->p5GProbeTemplate,
15060 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015061 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
15062 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015063
Jeff Johnson295189b2012-06-20 16:38:30 -070015064 /* Store Params pass it to WDI */
15065 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
15066 pWdaParams->pWdaContext = pWDA;
15067 /* Store param pointer as passed in by caller */
15068 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015069 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015070 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015071 if(IS_WDI_STATUS_FAILURE(status))
15072 {
15073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15074 "Failure in Set PNO REQ WDI API, free all the memory " );
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015075 if(pPNOScanReqParams->statusCallback)
15076 {
15077 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
15078 VOS_STATUS_E_FAILURE);
15079 }
15080
Jeff Johnson295189b2012-06-20 16:38:30 -070015081 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15082 vos_mem_free(pWdaParams->wdaMsgParam);
15083 pWdaParams->wdaWdiApiMsgParam = NULL;
15084 pWdaParams->wdaMsgParam = NULL;
15085 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015086 return CONVERT_WDI2VOS_STATUS(status) ;
15087}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015088
15089#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
15090
15091void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
15092{
15093 /*Convert the CSR Auth types to WDI Auth types */
15094 switch (csrAuthType)
15095 {
15096 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
15097 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
15098 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015099#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015100 case eCSR_AUTH_TYPE_CCKM_WPA:
15101 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
15102 break;
15103#endif
15104 case eCSR_AUTH_TYPE_WPA:
15105 *AuthType = eWDA_AUTH_TYPE_WPA;
15106 break;
15107 case eCSR_AUTH_TYPE_WPA_PSK:
15108 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
15109 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015110#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015111 case eCSR_AUTH_TYPE_CCKM_RSN:
15112 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
15113 break;
15114#endif
15115 case eCSR_AUTH_TYPE_RSN:
15116 *AuthType = eWDA_AUTH_TYPE_RSN;
15117 break;
15118 case eCSR_AUTH_TYPE_RSN_PSK:
15119 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
15120 break;
15121#if defined WLAN_FEATURE_VOWIFI_11R
15122 case eCSR_AUTH_TYPE_FT_RSN:
15123 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
15124 break;
15125 case eCSR_AUTH_TYPE_FT_RSN_PSK:
15126 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
15127 break;
15128#endif
15129#ifdef FEATURE_WLAN_WAPI
15130 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
15131 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
15132 break;
15133 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
15134 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
15135 break;
15136#endif /* FEATURE_WLAN_WAPI */
15137 case eCSR_AUTH_TYPE_SHARED_KEY:
15138 case eCSR_AUTH_TYPE_AUTOSWITCH:
15139 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
15140 break;
15141#if 0
15142 case eCSR_AUTH_TYPE_SHARED_KEY:
15143 *AuthType = eWDA_AUTH_TYPE_SHARED_KEY;
15144 break;
15145 case eCSR_AUTH_TYPE_AUTOSWITCH:
15146 *AuthType = eWDA_AUTH_TYPE_AUTOSWITCH;
15147#endif
15148 default:
Deepthi Gowribfd17132014-11-14 17:59:04 +053015149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015150 "%s: Unknown Auth Type", __func__);
15151 break;
15152 }
15153}
15154void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
15155{
15156 switch (csrEncrType)
15157 {
15158 case eCSR_ENCRYPT_TYPE_NONE:
15159 *EncrType = WDI_ED_NONE;
15160 break;
15161 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
15162 case eCSR_ENCRYPT_TYPE_WEP40:
15163 *EncrType = WDI_ED_WEP40;
15164 break;
15165 case eCSR_ENCRYPT_TYPE_WEP104:
15166 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
15167 *EncrType = WDI_ED_WEP104;
15168 break;
15169 case eCSR_ENCRYPT_TYPE_TKIP:
15170 *EncrType = WDI_ED_TKIP;
15171 break;
15172 case eCSR_ENCRYPT_TYPE_AES:
15173 *EncrType = WDI_ED_CCMP;
15174 break;
15175#ifdef WLAN_FEATURE_11W
15176 case eCSR_ENCRYPT_TYPE_AES_CMAC:
15177 *EncrType = WDI_ED_AES_128_CMAC;
15178 break;
15179#endif
15180#ifdef FEATURE_WLAN_WAPI
15181 case eCSR_ENCRYPT_TYPE_WPI:
15182 *EncrType = WDI_ED_WPI;
15183 break;
15184#endif
15185 case eCSR_ENCRYPT_TYPE_ANY:
15186 *EncrType = WDI_ED_ANY;
15187 break;
15188
15189 default:
15190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15191 "%s: Unknown Encryption Type", __func__);
15192 break;
15193 }
15194}
15195
15196/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015197 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015198 * Request to WDI to set Roam Offload Scan
15199 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015200VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015201 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
15202{
15203 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015204 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
15205 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015206 tWDA_ReqParams *pWdaParams ;
15207 v_U8_t csrAuthType;
15208 WDI_RoamNetworkType *pwdiRoamNetworkType;
15209 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
15210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15211 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015212 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015213 {
15214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15215 "%s: VOS MEM Alloc Failure", __func__);
15216 VOS_ASSERT(0);
15217 return VOS_STATUS_E_NOMEM;
15218 }
15219 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15220 if (NULL == pWdaParams)
15221 {
15222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15223 "%s: VOS MEM Alloc Failure", __func__);
15224 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015225 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015226 return VOS_STATUS_E_NOMEM;
15227 }
15228
15229 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015230 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015231 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015232 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
15233 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015234 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
15235 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
15236 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
15237 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
15238 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
15239 sizeof(pwdiRoamNetworkType->currAPbssid));
15240 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
15241 csrAuthType);
15242 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
15243 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
15244 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
15245 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
15246 pwdiRoamOffloadScanInfo->LookupThreshold =
15247 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080015248 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
15249 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015250 pwdiRoamOffloadScanInfo->RoamRssiDiff =
15251 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080015252 pwdiRoamOffloadScanInfo->MAWCEnabled =
15253 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015254 pwdiRoamOffloadScanInfo->Command =
15255 pRoamOffloadScanReqParams->Command ;
15256 pwdiRoamOffloadScanInfo->StartScanReason =
15257 pRoamOffloadScanReqParams->StartScanReason ;
15258 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
15259 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
15260 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
15261 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
15262 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
15263 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
15264 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
15265 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
15266 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
15267 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015268 pwdiRoamOffloadScanInfo->IsESEEnabled =
15269 pRoamOffloadScanReqParams->IsESEEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015270 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
15271 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
15272 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
15273 pwdiRoamNetworkType->ssId.ucLength =
15274 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
15275 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
15276 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
15277 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
15278 pwdiRoamNetworkType->ChannelCount =
15279 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
15280 pwdiRoamOffloadScanInfo->ChannelCacheType =
15281 pRoamOffloadScanReqParams->ChannelCacheType;
15282 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
15283 pRoamOffloadScanReqParams->ValidChannelList,
15284 pRoamOffloadScanReqParams->ValidChannelCount);
15285 pwdiRoamOffloadScanInfo->ValidChannelCount =
15286 pRoamOffloadScanReqParams->ValidChannelCount;
15287 pwdiRoamOffloadScanInfo->us24GProbeSize =
15288 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15289 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
15290 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
15291 pRoamOffloadScanReqParams->p24GProbeTemplate,
15292 pwdiRoamOffloadScanInfo->us24GProbeSize);
15293 pwdiRoamOffloadScanInfo->us5GProbeSize =
15294 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15295 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
15296 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
15297 pRoamOffloadScanReqParams->p5GProbeTemplate,
15298 pwdiRoamOffloadScanInfo->us5GProbeSize);
15299 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
15300 pRoamOffloadScanReqParams->MDID.mdiePresent;
15301 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
15302 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015303 pwdiRoamOffloadScanInfo->nProbes =
15304 pRoamOffloadScanReqParams->nProbes;
15305 pwdiRoamOffloadScanInfo->HomeAwayTime =
15306 pRoamOffloadScanReqParams->HomeAwayTime;
15307 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015308 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015309 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015310 pWdaParams->pWdaContext = pWDA;
15311 /* Store param pointer as passed in by caller */
15312 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015313 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015314 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
15315 if(IS_WDI_STATUS_FAILURE(status))
15316 {
15317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15318 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
15319 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15320 vos_mem_free(pWdaParams->wdaMsgParam);
15321 pWdaParams->wdaWdiApiMsgParam = NULL;
15322 pWdaParams->wdaMsgParam = NULL;
15323 }
15324 return CONVERT_WDI2VOS_STATUS(status) ;
15325}
15326#endif
15327
Jeff Johnson295189b2012-06-20 16:38:30 -070015328/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015329 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015330 *
15331 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015332void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015333{
15334 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15335
15336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015337 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015338
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015339 if(NULL == pWdaParams)
15340 {
15341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015342 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015343 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015344 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015345 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015346
Jeff Johnson295189b2012-06-20 16:38:30 -070015347 vos_mem_free(pWdaParams->wdaMsgParam) ;
15348 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15349 vos_mem_free(pWdaParams) ;
15350
15351 return ;
15352}
15353/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015354 * FUNCTION: WDA_RssiFilterReqCallback
15355 * Free memory.
15356 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
15357 */
15358void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
15359{
15360 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15361
15362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15363 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15364
15365 if(NULL == pWdaParams)
15366 {
15367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15368 "%s: pWdaParams received NULL", __func__);
15369 VOS_ASSERT(0);
15370 return;
15371 }
15372
15373 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15374 {
15375 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15376 vos_mem_free(pWdaParams->wdaMsgParam);
15377 vos_mem_free(pWdaParams);
15378 }
15379
15380 return;
15381}
15382/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015383 * FUNCTION: WDA_ProcessSetPreferredNetworkList
15384 * Request to WDI to set Preferred Network List.Offload
15385 */
15386VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
15387 tSirSetRSSIFilterReq* pRssiFilterParams)
15388{
Jeff Johnson43971f52012-07-17 12:26:56 -070015389 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015390 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
15391 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
15392 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015394 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015395 if(NULL == pwdiSetRssiFilterReqInfo)
15396 {
15397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015398 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015399 VOS_ASSERT(0);
15400 return VOS_STATUS_E_NOMEM;
15401 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015402 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15403 if(NULL == pWdaParams)
15404 {
15405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015406 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015407 VOS_ASSERT(0);
15408 vos_mem_free(pwdiSetRssiFilterReqInfo);
15409 return VOS_STATUS_E_NOMEM;
15410 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015411 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070015412 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
15413 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015414
Jeff Johnson295189b2012-06-20 16:38:30 -070015415 /* Store Params pass it to WDI */
15416 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
15417 pWdaParams->pWdaContext = pWDA;
15418 /* Store param pointer as passed in by caller */
15419 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015420 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015421 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015422 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015423 if(IS_WDI_STATUS_FAILURE(status))
15424 {
15425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15426 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
15427 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15428 vos_mem_free(pWdaParams->wdaMsgParam);
15429 pWdaParams->wdaWdiApiMsgParam = NULL;
15430 pWdaParams->wdaMsgParam = NULL;
15431 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015432 return CONVERT_WDI2VOS_STATUS(status) ;
15433}
15434
Jeff Johnson295189b2012-06-20 16:38:30 -070015435/*
15436 * FUNCTION: WDA_ProcessUpdateScanParams
15437 * Request to WDI to update Scan Parameters
15438 */
15439VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
15440 tSirUpdateScanParams *pUpdateScanParams)
15441{
Jeff Johnson43971f52012-07-17 12:26:56 -070015442 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015443 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
15444 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
15445 sizeof(WDI_UpdateScanParamsInfoType)) ;
15446 tWDA_ReqParams *pWdaParams ;
15447 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070015448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015449 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015450 if(NULL == wdiUpdateScanParamsInfoType)
15451 {
15452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015453 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015454 VOS_ASSERT(0);
15455 return VOS_STATUS_E_NOMEM;
15456 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015457 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15458 if ( NULL == pWdaParams )
15459 {
15460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015461 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015462 VOS_ASSERT(0);
15463 vos_mem_free(wdiUpdateScanParamsInfoType);
15464 return VOS_STATUS_E_NOMEM;
15465 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015466 //
15467 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
15468 //
Jeff Johnson295189b2012-06-20 16:38:30 -070015469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15470 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
15471 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
15472 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080015473 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070015474 pUpdateScanParams->b11dEnabled,
15475 pUpdateScanParams->b11dResolved,
15476 pUpdateScanParams->ucChannelCount,
15477 pUpdateScanParams->usPassiveMinChTime,
15478 pUpdateScanParams->usPassiveMaxChTime,
15479 pUpdateScanParams->usActiveMinChTime,
15480 pUpdateScanParams->usActiveMaxChTime,
15481 sizeof(tSirUpdateScanParams),
15482 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
15483
Jeff Johnson295189b2012-06-20 16:38:30 -070015484 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
15485 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070015486 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
15487 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070015488 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
15489 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070015490 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
15491 pUpdateScanParams->usActiveMaxChTime;
15492 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
15493 pUpdateScanParams->usActiveMinChTime;
15494 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
15495 pUpdateScanParams->usPassiveMaxChTime;
15496 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
15497 pUpdateScanParams->usPassiveMinChTime;
15498
Jeff Johnson295189b2012-06-20 16:38:30 -070015499 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053015500 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
15501 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070015502
Jeff Johnson295189b2012-06-20 16:38:30 -070015503 for ( i = 0; i <
15504 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
15505 i++)
15506 {
15507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15508 "Update Scan Parameters channel: %d",
15509 pUpdateScanParams->aChannels[i]);
15510
15511 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
15512 pUpdateScanParams->aChannels[i];
15513 }
15514
Yue Ma7f44bbe2013-04-12 11:47:39 -070015515 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
15516 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015517
Jeff Johnson295189b2012-06-20 16:38:30 -070015518 /* Store Params pass it to WDI */
15519 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
15520 pWdaParams->pWdaContext = pWDA;
15521 /* Store param pointer as passed in by caller */
15522 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070015523
Jeff Johnson295189b2012-06-20 16:38:30 -070015524
15525
15526 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015527 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015528 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015529 if(IS_WDI_STATUS_FAILURE(status))
15530 {
15531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15532 "Failure in Update Scan Params EQ WDI API, free all the memory " );
15533 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15534 vos_mem_free(pWdaParams->wdaMsgParam);
15535 vos_mem_free(pWdaParams);
15536 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015537 return CONVERT_WDI2VOS_STATUS(status) ;
15538}
15539#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015540
15541#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
15542/*
15543 * FUNCTION: WDA_RoamOffloadScanReqCallback
15544 *
15545 */
15546void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
15547{
15548 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070015549 vos_msg_t vosMsg;
15550 wpt_uint8 reason = 0;
15551
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070015552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015553 "<------ %s " ,__func__);
15554 if (NULL == pWdaParams)
15555 {
15556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15557 "%s: pWdaParams received NULL", __func__);
15558 VOS_ASSERT(0) ;
15559 return ;
15560 }
15561 if ( pWdaParams != NULL )
15562 {
15563 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
15564 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070015565 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015566 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15567 }
15568 if ( pWdaParams->wdaMsgParam != NULL)
15569 {
15570 vos_mem_free(pWdaParams->wdaMsgParam);
15571 }
15572
15573 vos_mem_free(pWdaParams) ;
15574 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070015575 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
15576 vosMsg.bodyptr = NULL;
15577 if (WDI_STATUS_SUCCESS != status)
15578 {
15579 reason = 0;
15580 }
15581 vosMsg.bodyval = reason;
15582 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15583 {
15584 /* free the mem and return */
15585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070015586 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070015587 }
15588
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015589 return ;
15590}
15591#endif
15592
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015593/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015594 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015595 *
15596 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015597void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015598{
15599 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15600
15601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15602 "<------ %s " ,__func__);
15603
15604 if(NULL == pWdaParams)
15605 {
15606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15607 "%s: pWdaParams received NULL", __func__);
15608 VOS_ASSERT(0);
15609 return;
15610 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015611
15612 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15613 vos_mem_free(pWdaParams->wdaMsgParam);
15614 vos_mem_free(pWdaParams);
15615
15616 return;
15617}
15618/*
15619 * FUNCTION: WDA_SetPowerParamsReqCallback
15620 * Free memory.
15621 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
15622 */
15623void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
15624{
15625 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15626
15627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15628 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15629
15630 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015631 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070015632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15633 "%s: pWdaParams received NULL", __func__);
15634 VOS_ASSERT(0);
15635 return;
15636 }
15637
15638 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15639 {
15640 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15641 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015642 vos_mem_free(pWdaParams);
15643 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015644
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015645 return;
15646}
15647
Jeff Johnson295189b2012-06-20 16:38:30 -070015648#ifdef WLAN_FEATURE_PACKET_FILTERING
15649/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015650 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015651 *
15652 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015653void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015654 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
15655 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015656{
15657 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070015658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015659 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015660 if(NULL == pWdaParams)
15661 {
15662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015663 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015664 VOS_ASSERT(0) ;
15665 return ;
15666 }
15667
15668 vos_mem_free(pWdaParams->wdaMsgParam) ;
15669 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15670 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015671 //print a msg, nothing else to do
15672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015673 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070015674 return ;
15675}
Jeff Johnson295189b2012-06-20 16:38:30 -070015676/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015677 * FUNCTION: WDA_8023MulticastListReqCallback
15678 * Free memory.
15679 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
15680 */
15681void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
15682{
15683 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15684
15685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15686 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15687
15688 if(NULL == pWdaParams)
15689 {
15690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15691 "%s: pWdaParams received NULL", __func__);
15692 VOS_ASSERT(0);
15693 return;
15694 }
15695
15696 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15697 {
15698 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15699 vos_mem_free(pWdaParams->wdaMsgParam);
15700 vos_mem_free(pWdaParams);
15701 }
15702
15703 return;
15704}
15705/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015706 * FUNCTION: WDA_Process8023MulticastListReq
15707 * Request to WDI to add 8023 Multicast List
15708 */
15709VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
15710 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
15711{
Jeff Johnson43971f52012-07-17 12:26:56 -070015712 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015713 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
15714 tWDA_ReqParams *pWdaParams ;
15715 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070015716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015717 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015718 pwdiFltPktSetMcListReqParamsType =
15719 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
15720 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
15721 ) ;
15722 if(NULL == pwdiFltPktSetMcListReqParamsType)
15723 {
15724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015725 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015726 return VOS_STATUS_E_NOMEM;
15727 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015728 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15729 if(NULL == pWdaParams)
15730 {
15731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015732 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015733 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
15734 return VOS_STATUS_E_NOMEM;
15735 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015736
Jeff Johnson295189b2012-06-20 16:38:30 -070015737 //
15738 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
15739 //
15740 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070015741 pRcvFltMcAddrList->ulMulticastAddrCnt;
15742
15743 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
15744 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
15745 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
15746 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
15747
Jeff Johnson295189b2012-06-20 16:38:30 -070015748 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
15749 {
15750 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
15751 &(pRcvFltMcAddrList->multicastAddr[i]),
15752 sizeof(tSirMacAddr));
15753 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015754 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
15755 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015756
Jeff Johnson295189b2012-06-20 16:38:30 -070015757 /* Store Params pass it to WDI */
15758 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
15759 pWdaParams->pWdaContext = pWDA;
15760 /* Store param pointer as passed in by caller */
15761 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070015762 status = WDI_8023MulticastListReq(
15763 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015764 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015765 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015766 if(IS_WDI_STATUS_FAILURE(status))
15767 {
15768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15769 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
15770 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15771 vos_mem_free(pWdaParams->wdaMsgParam);
15772 vos_mem_free(pWdaParams);
15773 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015774 return CONVERT_WDI2VOS_STATUS(status) ;
15775}
Jeff Johnson295189b2012-06-20 16:38:30 -070015776/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015777 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015778 *
15779 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015780void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015781 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
15782 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015783{
15784 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070015785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015786 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015787 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070015788 if(NULL == pWdaParams)
15789 {
15790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015791 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015792 VOS_ASSERT(0) ;
15793 return ;
15794 }
15795
15796 vos_mem_free(pWdaParams->wdaMsgParam) ;
15797 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15798 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015799 //print a msg, nothing else to do
15800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015801 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070015802 return ;
15803}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015804
15805/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015806 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
15807 * Free memory.
15808 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015809 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015810void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015811 void* pUserData)
15812{
15813 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15814
15815 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15816 "<------ %s, wdiStatus: %d",
15817 __func__, wdiStatus);
15818
15819 if (NULL == pWdaParams)
15820 {
15821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15822 "%s: Invalid pWdaParams pointer", __func__);
15823 VOS_ASSERT(0);
15824 return;
15825 }
15826
15827 if (IS_WDI_STATUS_FAILURE(wdiStatus))
15828 {
15829 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15830 vos_mem_free(pWdaParams->wdaMsgParam);
15831 vos_mem_free(pWdaParams);
15832 }
15833
15834 return;
15835}
15836
Jeff Johnson295189b2012-06-20 16:38:30 -070015837/*
15838 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
15839 * Request to WDI to set Receive Filters
15840 */
15841VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
15842 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
15843{
Jeff Johnson43971f52012-07-17 12:26:56 -070015844 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015845 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
15846 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
15847 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
15848 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
15849 tWDA_ReqParams *pWdaParams ;
15850 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070015851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015852 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015853 if(NULL == pwdiSetRcvPktFilterReqParamsType)
15854 {
15855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015856 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015857 VOS_ASSERT(0);
15858 return VOS_STATUS_E_NOMEM;
15859 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015860 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15861 if(NULL == pWdaParams)
15862 {
15863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015864 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015865 VOS_ASSERT(0);
15866 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
15867 return VOS_STATUS_E_NOMEM;
15868 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015869 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
15870 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
15871 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
15872 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070015873 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
15874 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
15875
15876 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
15877 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070015878
15879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15880 "FID %d FT %d NParams %d CT %d",
15881 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
15882 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
15883 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
15884 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070015885 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
15886 {
15887 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
15888 &pRcvPktFilterCfg->paramsData[i],
15889 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070015890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015891 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070015892 pwdiSetRcvPktFilterReqParamsType->
15893 wdiPktFilterCfg.paramsData[i].protocolLayer,
15894 pwdiSetRcvPktFilterReqParamsType->
15895 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070015896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015897 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070015898 pwdiSetRcvPktFilterReqParamsType->
15899 wdiPktFilterCfg.paramsData[i].dataOffset,
15900 pwdiSetRcvPktFilterReqParamsType->
15901 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070015902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015903 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070015904 pwdiSetRcvPktFilterReqParamsType->
15905 wdiPktFilterCfg.paramsData[i].compareData[0],
15906 pwdiSetRcvPktFilterReqParamsType->
15907 wdiPktFilterCfg.paramsData[i].compareData[1],
15908 pwdiSetRcvPktFilterReqParamsType->
15909 wdiPktFilterCfg.paramsData[i].compareData[2],
15910 pwdiSetRcvPktFilterReqParamsType->
15911 wdiPktFilterCfg.paramsData[i].compareData[3],
15912 pwdiSetRcvPktFilterReqParamsType->
15913 wdiPktFilterCfg.paramsData[i].compareData[4],
15914 pwdiSetRcvPktFilterReqParamsType->
15915 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070015916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015917 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070015918 pwdiSetRcvPktFilterReqParamsType->
15919 wdiPktFilterCfg.paramsData[i].dataMask[0],
15920 pwdiSetRcvPktFilterReqParamsType->
15921 wdiPktFilterCfg.paramsData[i].dataMask[1],
15922 pwdiSetRcvPktFilterReqParamsType->
15923 wdiPktFilterCfg.paramsData[i].dataMask[2],
15924 pwdiSetRcvPktFilterReqParamsType->
15925 wdiPktFilterCfg.paramsData[i].dataMask[3],
15926 pwdiSetRcvPktFilterReqParamsType->
15927 wdiPktFilterCfg.paramsData[i].dataMask[4],
15928 pwdiSetRcvPktFilterReqParamsType->
15929 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070015930 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015931 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015932 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015933 /* Store Params pass it to WDI */
15934 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
15935 pWdaParams->pWdaContext = pWDA;
15936 /* Store param pointer as passed in by caller */
15937 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070015938 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015939 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015940 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015941 if(IS_WDI_STATUS_FAILURE(status))
15942 {
15943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15944 "Failure in SetFilter(),free all the memory,status %d ",status);
15945 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15946 vos_mem_free(pWdaParams->wdaMsgParam);
15947 vos_mem_free(pWdaParams);
15948 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015949 return CONVERT_WDI2VOS_STATUS(status) ;
15950}
Jeff Johnson295189b2012-06-20 16:38:30 -070015951/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015952 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015953 *
15954 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015955void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015956 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
15957 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015958{
15959 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15960 tWDA_CbContext *pWDA;
15961 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
15962 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
15963 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
15964 tANI_U8 i;
15965 vos_msg_t vosMsg;
15966
15967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015968 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015969 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
15970
Jeff Johnsone7245742012-09-05 17:12:55 -070015971 if(NULL == pRcvFltPktMatchCntRsp)
15972 {
15973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015974 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070015975 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015976 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070015977 return ;
15978 }
15979
Jeff Johnson295189b2012-06-20 16:38:30 -070015980 if(NULL == pWdaParams)
15981 {
15982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015983 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015984 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015985 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070015986 return ;
15987 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015988 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
15989 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070015990 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
15991 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
15992
15993 /* Message Header */
15994 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
15995 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
15996
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015997 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070015998
15999 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
16000 {
16001 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
16002 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
16003 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016004 /* VOS message wrapper */
16005 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
16006 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
16007 vosMsg.bodyval = 0;
16008 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16009 {
16010 /* free the mem and return */
16011 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
16012 }
16013
16014 vos_mem_free(pWdaParams->wdaMsgParam) ;
16015 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16016 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070016017
16018 return;
16019}
16020/*
16021 * FUNCTION: WDA_FilterMatchCountReqCallback
16022 * Free memory and send RSP back to SME.
16023 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
16024 */
16025void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
16026{
16027 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16028 vos_msg_t vosMsg;
16029
16030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16031 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16032
16033 if(NULL == pWdaParams)
16034 {
16035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16036 "%s: pWdaParams received NULL", __func__);
16037 VOS_ASSERT(0);
16038 return;
16039 }
16040
16041 /* VOS message wrapper */
16042 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
16043 vosMsg.bodyptr = NULL;
16044 vosMsg.bodyval = 0;
16045
16046 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16047 {
16048 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16049 vos_mem_free(pWdaParams->wdaMsgParam);
16050 vos_mem_free(pWdaParams);
16051 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
16052 }
16053
16054 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070016055}
Jeff Johnson295189b2012-06-20 16:38:30 -070016056/*
16057 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
16058 * Request to WDI to get PC Filter Match Count
16059 */
16060VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
16061{
Jeff Johnson43971f52012-07-17 12:26:56 -070016062 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016063 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
16064 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
16065 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016067 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016068 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
16069 {
16070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016071 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016072 VOS_ASSERT(0);
16073 return VOS_STATUS_E_NOMEM;
16074 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016075 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16076 if(NULL == pWdaParams)
16077 {
16078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016079 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016080 VOS_ASSERT(0);
16081 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
16082 return VOS_STATUS_E_NOMEM;
16083 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016084
Yue Ma7f44bbe2013-04-12 11:47:39 -070016085 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
16086 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016087
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016088 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
16089 pRcvFltPktMatchRsp->bssId,
16090 sizeof(wpt_macAddr));
16091
Jeff Johnson295189b2012-06-20 16:38:30 -070016092 /* Store Params pass it to WDI */
16093 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
16094 pWdaParams->pWdaContext = pWDA;
16095 /* Store param pointer as passed in by caller */
16096 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070016097 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016098 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016099 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016100 if(IS_WDI_STATUS_FAILURE(status))
16101 {
16102 /* failure returned by WDI API */
16103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16104 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
16105 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16106 vos_mem_free(pWdaParams) ;
16107 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
16108 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
16109 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016110 return CONVERT_WDI2VOS_STATUS(status) ;
16111}
Jeff Johnson295189b2012-06-20 16:38:30 -070016112/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016113 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016114 *
16115 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016116void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016117 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
16118 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016119{
16120 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070016121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016122 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016123/* WDA_VOS_ASSERT(NULL != pWdaParams); */
16124 if(NULL == pWdaParams)
16125 {
16126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016127 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016128 VOS_ASSERT(0) ;
16129 return ;
16130 }
16131
16132 vos_mem_free(pWdaParams->wdaMsgParam) ;
16133 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16134 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016135 //print a msg, nothing else to do
16136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016137 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070016138 return ;
16139}
Jeff Johnson295189b2012-06-20 16:38:30 -070016140/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016141 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
16142 * Free memory.
16143 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
16144 */
16145void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
16146{
16147 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16148
16149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16150 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16151
16152 if(NULL == pWdaParams)
16153 {
16154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16155 "%s: Invalid pWdaParams pointer", __func__);
16156 VOS_ASSERT(0);
16157 return;
16158 }
16159
16160 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16161 {
16162 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16163 vos_mem_free(pWdaParams->wdaMsgParam);
16164 vos_mem_free(pWdaParams);
16165 }
16166
16167 return;
16168}
16169/*
Jeff Johnson295189b2012-06-20 16:38:30 -070016170 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
16171 * Request to WDI to clear Receive Filters
16172 */
16173VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
16174 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
16175{
Jeff Johnson43971f52012-07-17 12:26:56 -070016176 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016177 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
16178 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
16179 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016181 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016182 if(NULL == pwdiRcvFltPktClearReqParamsType)
16183 {
16184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016185 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016186 VOS_ASSERT(0);
16187 return VOS_STATUS_E_NOMEM;
16188 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016189 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16190 if(NULL == pWdaParams)
16191 {
16192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016193 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016194 VOS_ASSERT(0);
16195 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
16196 return VOS_STATUS_E_NOMEM;
16197 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016198 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
16199 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070016200 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
16201 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
16202 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
16203 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016204
Yue Ma7f44bbe2013-04-12 11:47:39 -070016205 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016206 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016207 /* Store Params pass it to WDI */
16208 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
16209 pWdaParams->pWdaContext = pWDA;
16210 /* Store param pointer as passed in by caller */
16211 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070016212 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016213 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016214 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016215 if(IS_WDI_STATUS_FAILURE(status))
16216 {
16217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16218 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
16219 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080016220 vos_mem_free(pWdaParams->wdaMsgParam);
16221 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016222 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016223 return CONVERT_WDI2VOS_STATUS(status) ;
16224}
16225#endif // WLAN_FEATURE_PACKET_FILTERING
16226
Jeff Johnson295189b2012-06-20 16:38:30 -070016227/*
16228 * FUNCTION: WDA_ProcessSetPowerParamsReq
16229 * Request to WDI to set power params
16230 */
16231VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
16232 tSirSetPowerParamsReq *pPowerParams)
16233{
Jeff Johnson43971f52012-07-17 12:26:56 -070016234 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016235 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
16236 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016237 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016239 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016240 if(NULL == pwdiSetPowerParamsReqInfo)
16241 {
16242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016243 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016244 VOS_ASSERT(0);
16245 return VOS_STATUS_E_NOMEM;
16246 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016247 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16248 if(NULL == pWdaParams)
16249 {
16250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016251 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016252 VOS_ASSERT(0);
16253 vos_mem_free(pwdiSetPowerParamsReqInfo);
16254 return VOS_STATUS_E_NOMEM;
16255 }
Jeff Johnsone7245742012-09-05 17:12:55 -070016256
Jeff Johnson295189b2012-06-20 16:38:30 -070016257
16258 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
16259 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070016260 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
16261 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070016262 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
16263 pPowerParams->uListenInterval;
16264 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
16265 pPowerParams->uBcastMcastFilter;
16266 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
16267 pPowerParams->uEnableBET;
16268 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
16269 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070016270 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
16271 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070016272 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
16273 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016274
Jeff Johnson295189b2012-06-20 16:38:30 -070016275 /* Store Params pass it to WDI */
16276 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
16277 pWdaParams->pWdaContext = pWDA;
16278 /* Store param pointer as passed in by caller */
16279 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016280 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016281 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016282 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016283 if(IS_WDI_STATUS_FAILURE(status))
16284 {
16285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16286 "Failure in Set power params REQ WDI API, free all the memory " );
16287 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16288 vos_mem_free(pWdaParams->wdaMsgParam);
16289 pWdaParams->wdaWdiApiMsgParam = NULL;
16290 pWdaParams->wdaMsgParam = NULL;
16291 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016292 return CONVERT_WDI2VOS_STATUS(status) ;
16293}
16294
16295/*
16296 * FUNCTION: WDA_SetTmLevelRspCallback
16297 * Set TM Level response
16298 */
16299void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
16300{
16301 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16302
16303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016304 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016305
16306 if(NULL == pWdaParams)
16307 {
16308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016309 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016310 VOS_ASSERT(0) ;
16311 return ;
16312 }
16313
16314 /* Dose not need to send notification to upper layer
16315 * Just free allocated resources */
16316 if( pWdaParams != NULL )
16317 {
16318 if( pWdaParams->wdaWdiApiMsgParam != NULL )
16319 {
16320 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16321 }
16322 vos_mem_free(pWdaParams->wdaMsgParam) ;
16323 vos_mem_free(pWdaParams) ;
16324 }
16325}
16326
16327/*
16328 * FUNCTION: WDA_ProcessSetTmLevelReq
16329 * Set TM Level request
16330 */
16331VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
16332 tAniSetTmLevelReq *setTmLevelReq)
16333{
16334 WDI_Status status = WDI_STATUS_SUCCESS ;
16335 tWDA_ReqParams *pWdaParams ;
16336 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
16337 (WDI_SetTmLevelReqType *)vos_mem_malloc(
16338 sizeof(WDI_SetTmLevelReqType)) ;
16339 if(NULL == wdiSetTmLevelReq)
16340 {
16341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016342 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016343 VOS_ASSERT(0);
16344 return VOS_STATUS_E_NOMEM;
16345 }
16346
16347 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16348 if(NULL == pWdaParams)
16349 {
16350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016351 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016352 VOS_ASSERT(0);
16353 vos_mem_free(wdiSetTmLevelReq);
16354 return VOS_STATUS_E_NOMEM;
16355 }
16356
16357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016358 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016359
16360 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
16361 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
16362
16363 pWdaParams->pWdaContext = pWDA;
16364 pWdaParams->wdaMsgParam = setTmLevelReq;
16365 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
16366
16367 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
16368 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
16369
16370 if(IS_WDI_STATUS_FAILURE(status))
16371 {
16372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080016373 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070016374 vos_mem_free(pWdaParams->wdaMsgParam) ;
16375 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16376 vos_mem_free(pWdaParams) ;
16377 }
16378
16379 return CONVERT_WDI2VOS_STATUS(status) ;
16380}
16381
16382VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
16383 tpTxControlParams pTxCtrlParam)
16384{
16385 VOS_STATUS wdaStatus;
16386
16387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016388 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016389 if( pTxCtrlParam == NULL )
16390 {
16391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016392 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016393 return VOS_STATUS_E_FAILURE;
16394 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016395 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
16396 {
16397 wdaStatus = WDA_SuspendDataTx(pWDA);
16398 }
16399 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
16400 {
16401 wdaStatus = WDA_ResumeDataTx(pWDA);
16402 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016403 return wdaStatus;
16404}
16405
16406 /* FUNCTION WDA_featureCapsExchange
16407 * WDA API to invoke capability exchange between host and FW.
16408 */
16409void WDA_featureCapsExchange(v_PVOID_t pVosContext)
16410{
16411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016412 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070016413 WDI_featureCapsExchangeReq( NULL, pVosContext);
16414}
16415
Yathish9f22e662012-12-10 14:21:35 -080016416/* FUNCTION WDA_disableCapablityFeature
16417 * WDA API to diable Active mode offload in host.
16418 */
16419void WDA_disableCapablityFeature(tANI_U8 feature_index)
16420{
16421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16422 "%s:enter", __func__ );
16423 WDI_disableCapablityFeature(feature_index);
16424}
16425
Jeff Johnson295189b2012-06-20 16:38:30 -070016426 /* FUNCTION WDA_getHostWlanFeatCaps
16427 * Wrapper for WDI API, that will return if the feature (enum value).passed
16428 * to this API is supported or not in Host
16429 * return value
16430 * 0 - implies feature is NOT Supported
16431 * any non zero value - implies feature is SUPPORTED
16432 */
16433tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
16434{
16435 return WDI_getHostWlanFeatCaps(featEnumValue);
16436}
16437
16438 /* FUNCTION WDA_getFwWlanFeatCaps
16439 * Wrapper for WDI API, that will return if the feature (enum value).passed
16440 * to this API is supported or not in FW
16441 * return value
16442 * 0 - implies feature is NOT Supported
16443 * any non zero value - implies feature is SUPPORTED
16444 */
16445tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
16446{
16447 return WDI_getFwWlanFeatCaps(featEnumValue);
16448}
16449
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053016450
Jeff Johnson295189b2012-06-20 16:38:30 -070016451/*
16452 * FUNCTION: WDA_shutdown
16453 * Shutdown WDA/WDI without handshaking with Riva.
16454 * Synchronous function.
16455 */
16456VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
16457{
16458 WDI_Status wdiStatus;
16459 //tANI_U8 eventIdx = 0;
16460 VOS_STATUS status = VOS_STATUS_SUCCESS;
16461 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070016462 if (NULL == pWDA)
16463 {
16464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016465 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070016466 VOS_ASSERT(0);
16467 return VOS_STATUS_E_FAILURE;
16468 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016469 /* FTM mode stay START_STATE */
16470 if( (WDA_READY_STATE != pWDA->wdaState) &&
16471 (WDA_INIT_STATE != pWDA->wdaState) &&
16472 (WDA_START_STATE != pWDA->wdaState) )
16473 {
16474 VOS_ASSERT(0);
16475 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016476
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080016477 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
16478 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070016479 {
16480 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080016481 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070016482 }
Leo Chang9d76f622013-08-23 16:34:52 -070016483 else
16484 {
16485 vos_event_destroy(&pWDA->ftmStopDoneEvent);
16486 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016487
Jeff Johnson295189b2012-06-20 16:38:30 -070016488 /* call WDI shutdown */
16489 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070016490 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
16491 {
16492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16493 "error in WDA Stop" );
16494 status = VOS_STATUS_E_FAILURE;
16495 }
16496 /* WDI stop is synchrnous, shutdown is complete when it returns */
16497 pWDA->wdaState = WDA_STOP_STATE;
16498
Jeff Johnson295189b2012-06-20 16:38:30 -070016499 /* shutdown should perform the stop & close actions. */
16500 /* Destroy the event */
16501 status = vos_event_destroy(&pWDA->txFrameEvent);
16502 if(!VOS_IS_STATUS_SUCCESS(status))
16503 {
16504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016505 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070016506 status = VOS_STATUS_E_FAILURE;
16507 }
16508 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
16509 if(!VOS_IS_STATUS_SUCCESS(status))
16510 {
16511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016512 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070016513 status = VOS_STATUS_E_FAILURE;
16514 }
16515 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
16516 if(!VOS_IS_STATUS_SUCCESS(status))
16517 {
16518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016519 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070016520 status = VOS_STATUS_E_FAILURE;
16521 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016522 /* free WDA context */
16523 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
16524 if ( !VOS_IS_STATUS_SUCCESS(status) )
16525 {
16526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16527 "error in WDA close " );
16528 status = VOS_STATUS_E_FAILURE;
16529 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016530 return status;
16531}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080016532
Jeff Johnsone7245742012-09-05 17:12:55 -070016533/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080016534 * FUNCTION: WDA_setNeedShutdown
16535 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070016536 */
16537
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080016538void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070016539{
16540 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070016541 if(pWDA == NULL)
16542 {
16543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16544 "Could not get the WDA Context pointer" );
16545 return;
16546 }
Jeff Johnsone7245742012-09-05 17:12:55 -070016547 pWDA->needShutdown = TRUE;
16548}
16549/*
16550 * FUNCTION: WDA_needShutdown
16551 * WDA needs a shutdown
16552 */
16553
16554v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
16555{
16556 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070016557 if(pWDA == NULL)
16558 {
16559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16560 "Could not get the WDA Context pointer" );
16561 return 0;
16562 }
16563 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070016564}
16565
Mohit Khanna4a70d262012-09-11 16:30:12 -070016566#ifdef WLAN_FEATURE_11AC
16567/*
16568 * FUNCTION: WDA_SetBeaconFilterReqCallback
16569 *
16570 */
16571void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
16572{
16573 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016575 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016576 if(NULL == pWdaParams)
16577 {
16578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016579 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016580 VOS_ASSERT(0) ;
16581 return ;
16582 }
Jeff Johnsone7245742012-09-05 17:12:55 -070016583
Mohit Khanna4a70d262012-09-11 16:30:12 -070016584 vos_mem_free(pWdaParams->wdaMsgParam) ;
16585 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16586 vos_mem_free(pWdaParams) ;
16587 /*
16588 * No respone required for SetBeaconFilter req so just free the request
16589 * param here
16590 */
16591
16592 return ;
16593}
16594
16595VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
16596 tUpdateVHTOpMode *pData)
16597{
16598 WDI_Status status = WDI_STATUS_SUCCESS ;
16599 tWDA_ReqParams *pWdaParams ;
16600 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
16601 sizeof(WDI_UpdateVHTOpMode)) ;
16602 if(NULL == wdiTemp)
16603 {
16604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016605 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016606 VOS_ASSERT(0);
16607 return VOS_STATUS_E_NOMEM;
16608 }
16609 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16610 if(NULL == pWdaParams)
16611 {
16612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016613 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016614 VOS_ASSERT(0);
16615 vos_mem_free(wdiTemp);
16616 return VOS_STATUS_E_NOMEM;
16617 }
Abhishek Singhdf8eb312014-11-15 00:49:28 +053016618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16619 "------> %s Opmode = %d and staid = %d" ,
16620 __func__, pData->opMode, pData->staId);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016621 wdiTemp->opMode = pData->opMode;
16622 wdiTemp->staId = pData->staId;
16623
16624 pWdaParams->pWdaContext = pWDA;
16625 /* Store Req pointer, as this will be used for response */
16626 pWdaParams->wdaMsgParam = (void *)pData;
16627 /* store Params pass it to WDI */
16628 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
16629
16630 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
16631
16632 if(IS_WDI_STATUS_FAILURE(status))
16633 {
16634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16635 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
16636 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16637 vos_mem_free(pWdaParams->wdaMsgParam);
16638 vos_mem_free(pWdaParams);
16639 }
16640 return CONVERT_WDI2VOS_STATUS(status) ;
16641}
16642#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016643
16644/*==========================================================================
16645 FUNCTION WDA_TransportChannelDebug
16646
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070016647 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016648 Display Transport Channel debugging information
16649 User may request to display DXE channel snapshot
16650 Or if host driver detects any abnormal stcuk may display
16651
16652 PARAMETERS
schang6295e542013-03-12 15:31:23 -070016653 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080016654 displaySnapshot : Display DXE snapshot option
Mihir Shete40a55652014-03-02 14:14:47 +053016655 debugFlags : Enable stall detect features
16656 defined by WPAL_DeviceDebugFlags
16657 These features may effect
16658 data performance.
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016659
16660 RETURN VALUE
16661 NONE
16662
16663===========================================================================*/
16664void WDA_TransportChannelDebug
16665(
schang6295e542013-03-12 15:31:23 -070016666 tpAniSirGlobal pMac,
16667 v_BOOL_t displaySnapshot,
Mihir Shete40a55652014-03-02 14:14:47 +053016668 v_U8_t debugFlags
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016669)
16670{
Mihir Shete40a55652014-03-02 14:14:47 +053016671 WDI_TransportChannelDebug(displaySnapshot, debugFlags);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016672 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070016673}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070016674
16675/*==========================================================================
16676 FUNCTION WDA_SetEnableSSR
16677
16678 DESCRIPTION
16679 API to enable/disable SSR on WDI timeout
16680
16681 PARAMETERS
16682 enableSSR : enable/disable SSR
16683
16684 RETURN VALUE
16685 NONE
16686
16687===========================================================================*/
16688void WDA_SetEnableSSR(v_BOOL_t enableSSR)
16689{
16690 WDI_SetEnableSSR(enableSSR);
16691}
Leo Chang9056f462013-08-01 19:21:11 -070016692
16693#ifdef FEATURE_WLAN_LPHB
16694/*
16695 * FUNCTION: WDA_LPHBconfRspCallback
16696 *
16697 */
16698void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
16699{
16700 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16701
16702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16703 "<------ %s " ,__func__);
16704 if (NULL == pWdaParams)
16705 {
16706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16707 "%s: pWdaParams received NULL", __func__);
16708 VOS_ASSERT(0) ;
16709 return ;
16710 }
16711
16712 /* Do not need to send notification to upper layer
16713 * Just free allocated resources */
16714 if (pWdaParams != NULL)
16715 {
16716 if (pWdaParams->wdaWdiApiMsgParam != NULL)
16717 {
16718 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16719 }
16720 vos_mem_free(pWdaParams->wdaMsgParam) ;
16721 vos_mem_free(pWdaParams) ;
16722 }
16723
16724 return;
16725}
16726
16727/*
16728 * FUNCTION: WDA_ProcessLPHBConfReq
16729 *
16730 */
16731VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
16732 tSirLPHBReq *pData)
16733{
16734 WDI_Status wdiStatus;
16735 tWDA_ReqParams *pWdaParams ;
16736
16737 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16738 "------> %s " , __func__);
16739
16740 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16741 if (NULL == pWdaParams)
16742 {
16743 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16744 "%s: VOS MEM Alloc Failure", __func__);
16745 VOS_ASSERT(0);
16746 vos_mem_free(pData);
16747 return VOS_STATUS_E_NOMEM;
16748 }
16749
16750 pWdaParams->pWdaContext = pWDA;
16751 pWdaParams->wdaMsgParam = (void *)pData;
16752 pWdaParams->wdaWdiApiMsgParam = NULL;
16753
16754 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
16755 if (WDI_STATUS_PENDING == wdiStatus)
16756 {
16757 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16758 "Pending received for %s:%d ", __func__, __LINE__);
16759 }
16760 else if (WDI_STATUS_SUCCESS != wdiStatus)
16761 {
16762 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16763 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
16764 vos_mem_free(pWdaParams->wdaMsgParam);
16765 vos_mem_free(pWdaParams);
16766 }
16767
16768 return CONVERT_WDI2VOS_STATUS(wdiStatus);
16769}
16770#endif /* FEATURE_WLAN_LPHB */
16771
c_hpothu92367912014-05-01 15:18:17 +053016772void WDA_GetBcnMissRateCallback(tANI_U8 status, tANI_U32 bcnMissRate,
16773 void* pUserData)
16774{
16775 tSirBcnMissRateInfo *pBcnMissRateInfo = (tSirBcnMissRateInfo *)pUserData;
16776
16777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16778 "<------ %s " ,__func__);
16779 if (NULL == pBcnMissRateInfo)
16780 {
16781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16782 "%s: pWdaParams received NULL", __func__);
16783 VOS_ASSERT(0) ;
16784 return ;
16785 }
16786 if (pBcnMissRateInfo->callback)
16787 {
16788 pBcnMissRateInfo->callback(status, bcnMissRate,
16789 pBcnMissRateInfo->data);
16790 }
16791 vos_mem_free(pUserData);
16792
16793 return;
16794}
16795
16796v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
16797 tSirBcnMissRateReq *pData)
16798{
16799 WDI_Status wdiStatus;
16800 tSirBcnMissRateInfo *pBcnMissRateInfo;
16801
16802 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16803 "------> %s " , __func__);
16804
16805 pBcnMissRateInfo =
16806 (tSirBcnMissRateInfo *)vos_mem_malloc(sizeof(tSirBcnMissRateInfo));
16807 if (NULL == pBcnMissRateInfo)
16808 {
16809 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16810 "%s: VOS MEM Alloc Failure", __func__);
16811 VOS_ASSERT(0);
16812 vos_mem_free(pData);
16813 return;
16814 }
16815
16816 pBcnMissRateInfo->callback = (pGetBcnMissRateCB)(pData->callback);
16817 pBcnMissRateInfo->data = pData->data;
16818
16819 wdiStatus = WDI_GetBcnMissRate(pBcnMissRateInfo,
16820 WDA_GetBcnMissRateCallback,
16821 pData->bssid);
16822 if (WDI_STATUS_PENDING == wdiStatus)
16823 {
16824 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16825 "Pending received for %s:%d ", __func__, __LINE__);
16826 }
16827 else if (WDI_STATUS_SUCCESS != wdiStatus)
16828 {
16829 if (pBcnMissRateInfo->callback)
16830 {
16831 pBcnMissRateInfo->callback(VOS_STATUS_E_FAILURE,
16832 -1, pBcnMissRateInfo->data);
16833 }
16834 }
16835 vos_mem_free(pData);
16836}
Dino Mycle41bdc942014-06-10 11:30:24 +053016837
16838#ifdef WLAN_FEATURE_EXTSCAN
16839
16840/*==========================================================================
16841 FUNCTION WDA_EXTScanStartRspCallback
16842
16843 DESCRIPTION
16844 API to send EXTScan Start Response to HDD
16845
16846 PARAMETERS
16847 pEventData: Response from FW
16848 pUserData:
16849===========================================================================*/
16850void WDA_EXTScanStartRspCallback(void *pEventData, void* pUserData)
16851{
16852 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16853 tWDA_CbContext *pWDA = NULL;
16854 void *pCallbackContext;
16855 tpAniSirGlobal pMac;
16856
16857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16858 "%s:", __func__);
16859 if (NULL == pWdaParams)
16860 {
16861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16862 "%s: pWdaParams received NULL", __func__);
16863 VOS_ASSERT(0);
16864 return;
16865 }
16866
16867 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
16868
16869 if (NULL == pWDA)
16870 {
16871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16872 "%s: pWDA received NULL", __func__);
16873 VOS_ASSERT(0);
16874 goto error;
16875 }
16876
16877 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16878 if (NULL == pMac)
16879 {
16880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16881 "%s:pMac is NULL", __func__);
16882 VOS_ASSERT(0);
16883 goto error;
16884 }
16885
16886 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
16887
16888 if (pMac->sme.pEXTScanIndCb)
16889 {
16890 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_START_RSP,
16891 pEventData);
16892 }
16893 else
16894 {
16895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16896 "%s:HDD callback is null", __func__);
16897 VOS_ASSERT(0);
16898 }
16899
16900error:
16901
16902 if (pWdaParams->wdaWdiApiMsgParam != NULL)
16903 {
16904 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16905 }
16906 if (pWdaParams->wdaMsgParam != NULL)
16907 {
16908 vos_mem_free(pWdaParams->wdaMsgParam);
16909 }
16910 vos_mem_free(pWdaParams) ;
16911
16912 return;
16913}
16914
16915/*==========================================================================
16916 FUNCTION WDA_EXTScanStopRspCallback
16917
16918 DESCRIPTION
16919 API to send EXTScan Stop Response to HDD
16920
16921 PARAMETERS
16922 pEventData: Response from FW
16923 pUserData:
16924===========================================================================*/
16925void WDA_EXTScanStopRspCallback(void *pEventData, void* pUserData)
16926{
16927 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16928 tWDA_CbContext *pWDA = NULL;
16929 void *pCallbackContext;
16930 tpAniSirGlobal pMac;
16931
16932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16933 "%s:", __func__);
16934 if (NULL == pWdaParams)
16935 {
16936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16937 "%s: pWdaParams received NULL", __func__);
16938 VOS_ASSERT(0);
16939 return;
16940 }
16941
16942 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
16943
16944 if (NULL == pWDA)
16945 {
16946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16947 "%s: pWDA received NULL", __func__);
16948 VOS_ASSERT(0);
16949 goto error;
16950 }
16951
16952 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16953 if (NULL == pMac)
16954 {
16955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16956 "%s:pMac is NULL", __func__);
16957 VOS_ASSERT(0);
16958 goto error;
16959 }
16960 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
16961
16962 if (pMac->sme.pEXTScanIndCb)
16963 {
16964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16965 "%s:HDD call back function called", __func__);
16966 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_STOP_RSP,
16967 pEventData);
16968 }
16969 else
16970 {
16971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16972 "%s:HDD callback is null", __func__);
16973 VOS_ASSERT(0);
16974 }
16975
16976error:
16977
16978 if (pWdaParams->wdaWdiApiMsgParam != NULL)
16979 {
16980 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16981 }
16982 if (pWdaParams->wdaMsgParam != NULL)
16983 {
16984 vos_mem_free(pWdaParams->wdaMsgParam);
16985 }
16986 vos_mem_free(pWdaParams) ;
16987
16988
16989 return;
16990}
16991
16992/*==========================================================================
16993 FUNCTION WDA_EXTScanGetCachedResultsRspCallback
16994
16995 DESCRIPTION
16996 API to send EXTScan Get Cached Results Response to HDD
16997
16998 PARAMETERS
16999 pEventData: Response from FW
17000 pUserData:
17001===========================================================================*/
17002void WDA_EXTScanGetCachedResultsRspCallback(void *pEventData, void* pUserData)
17003{
17004 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17005 tWDA_CbContext *pWDA = NULL;
17006 void *pCallbackContext;
17007 tpAniSirGlobal pMac;
17008
17009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17010 "%s: ", __func__);
17011 if (NULL == pWdaParams)
17012 {
17013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17014 "%s: pWdaParams received NULL", __func__);
17015 VOS_ASSERT(0);
17016 return;
17017 }
17018
17019 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17020
17021 if (NULL == pWDA)
17022 {
17023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17024 "%s: pWDA received NULL", __func__);
17025 VOS_ASSERT(0);
17026 goto error;
17027 }
17028
17029 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17030 if (NULL == pMac)
17031 {
17032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17033 "%s:pMac is NULL", __func__);
17034 VOS_ASSERT(0);
17035 goto error;
17036 }
17037
17038 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17039
17040 if (pMac->sme.pEXTScanIndCb)
17041 {
17042 pMac->sme.pEXTScanIndCb(pCallbackContext,
17043 WDA_EXTSCAN_GET_CACHED_RESULTS_RSP,
17044 pEventData);
17045 }
17046 else
17047 {
17048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17049 "%s:HDD callback is null", __func__);
17050 VOS_ASSERT(0);
17051 }
17052
17053
17054error:
17055
17056 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17057 {
17058 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17059 }
17060 if (pWdaParams->wdaMsgParam != NULL)
17061 {
17062 vos_mem_free(pWdaParams->wdaMsgParam);
17063 }
17064 vos_mem_free(pWdaParams) ;
17065
17066 return;
17067}
17068
17069/*==========================================================================
17070 FUNCTION WDA_EXTScanGetCapabilitiesRspCallback
17071
17072 DESCRIPTION
17073 API to send EXTScan Get Capabilities Response to HDD
17074
17075 PARAMETERS
17076 pEventData: Response from FW
17077 pUserData:
17078===========================================================================*/
17079void WDA_EXTScanGetCapabilitiesRspCallback(void *pEventData, void* pUserData)
17080{
17081 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17082 tWDA_CbContext *pWDA = NULL;
17083 void *pCallbackContext;
17084 tpAniSirGlobal pMac;
17085
17086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17087 "%s:", __func__);
17088 if (NULL == pWdaParams)
17089 {
17090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17091 "%s: pWdaParams received NULL", __func__);
17092 VOS_ASSERT(0);
17093 return;
17094 }
17095
17096 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17097
17098 if (NULL == pWDA)
17099 {
17100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17101 "%s: pWDA received NULL", __func__);
17102 VOS_ASSERT(0);
17103 goto error;
17104 }
17105
17106 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17107 if (NULL == pMac)
17108 {
17109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17110 "%s:pMac is NULL", __func__);
17111 VOS_ASSERT(0);
17112 goto error;
17113 }
17114
17115 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17116
17117 if (pMac->sme.pEXTScanIndCb)
17118 {
17119 pMac->sme.pEXTScanIndCb(pCallbackContext,
17120 WDA_EXTSCAN_GET_CAPABILITIES_RSP,
17121 pEventData);
17122 }
17123 else
17124 {
17125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17126 "%s:HDD callback is null", __func__);
17127 VOS_ASSERT(0);
17128 }
17129
17130
17131error:
17132
17133 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17134 {
17135 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17136 }
17137 if (pWdaParams->wdaMsgParam != NULL)
17138 {
17139 vos_mem_free(pWdaParams->wdaMsgParam);
17140 }
17141 vos_mem_free(pWdaParams) ;
17142
17143 return;
17144}
17145
17146/*==========================================================================
17147 FUNCTION WDA_EXTScanSetBSSIDHotlistRspCallback
17148
17149 DESCRIPTION
17150 API to send EXTScan Set BSSID Hotlist Response to HDD
17151
17152 PARAMETERS
17153 pEventData: Response from FW
17154 pUserData:
17155===========================================================================*/
17156void WDA_EXTScanSetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
17157{
17158 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17159 tWDA_CbContext *pWDA = NULL;
17160 void *pCallbackContext;
17161 tpAniSirGlobal pMac;
17162
17163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17164 "%s: ", __func__);
17165 if (NULL == pWdaParams)
17166 {
17167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17168 "%s: pWdaParams received NULL", __func__);
17169 VOS_ASSERT(0) ;
17170 return;
17171 }
17172
17173 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17174
17175 if (NULL == pWDA)
17176 {
17177 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17178 "%s: pWDA received NULL", __func__);
17179 VOS_ASSERT(0);
17180 goto error;
17181 }
17182
17183 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17184 if (NULL == pMac)
17185 {
17186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17187 "%s:pMac is NULL", __func__);
17188 VOS_ASSERT(0);
17189 goto error;
17190 }
17191
17192 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17193
17194 if (pMac->sme.pEXTScanIndCb)
17195 {
17196 pMac->sme.pEXTScanIndCb(pCallbackContext,
17197 WDA_EXTSCAN_SET_BSSID_HOTLIST_RSP,
17198 pEventData);
17199 }
17200 else
17201 {
17202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17203 "%s:HDD callback is null", __func__);
17204 VOS_ASSERT(0);
17205 }
17206
17207
17208error:
17209
17210 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17211 {
17212 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17213 }
17214 if (pWdaParams->wdaMsgParam != NULL)
17215 {
17216 vos_mem_free(pWdaParams->wdaMsgParam);
17217 }
17218 vos_mem_free(pWdaParams) ;
17219
17220 return;
17221}
17222
17223/*==========================================================================
17224 FUNCTION WDA_EXTScanResetBSSIDHotlistRspCallback
17225
17226 DESCRIPTION
17227 API to send EXTScan ReSet BSSID Hotlist Response to HDD
17228
17229 PARAMETERS
17230 pEventData: Response from FW
17231 pUserData:
17232===========================================================================*/
17233void WDA_EXTScanResetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
17234{
17235 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17236 tWDA_CbContext *pWDA = NULL;
17237 void *pCallbackContext;
17238 tpAniSirGlobal pMac;
17239
17240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17241 "%s:", __func__);
17242 if (NULL == pWdaParams)
17243 {
17244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17245 "%s: pWdaParams received NULL", __func__);
17246 VOS_ASSERT(0) ;
17247 return;
17248 }
17249
17250 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17251
17252 if (NULL == pWDA)
17253 {
17254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17255 "%s: pWDA received NULL", __func__);
17256 VOS_ASSERT(0);
17257 goto error;
17258 }
17259
17260 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17261 if (NULL == pMac)
17262 {
17263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17264 "%s:pMac is NULL", __func__);
17265 VOS_ASSERT(0);
17266 goto error;
17267 }
17268
17269 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17270
17271 if (pMac->sme.pEXTScanIndCb)
17272 {
17273 pMac->sme.pEXTScanIndCb(pCallbackContext,
17274 WDA_EXTSCAN_RESET_BSSID_HOTLIST_RSP,
17275 pEventData);
17276 }
17277 else
17278 {
17279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17280 "%s:HDD callback is null", __func__);
17281 VOS_ASSERT(0);
17282 }
17283
17284
17285error:
17286
17287 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17288 {
17289 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17290 }
17291 if (pWdaParams->wdaMsgParam != NULL)
17292 {
17293 vos_mem_free(pWdaParams->wdaMsgParam);
17294 }
17295 vos_mem_free(pWdaParams) ;
17296
17297 return;
17298}
17299
17300/*==========================================================================
17301 FUNCTION WDA_EXTScanSetSignfRSSIChangeRspCallback
17302
17303 DESCRIPTION
17304 API to send EXTScan Set Significant RSSI Change RSP to HDD
17305
17306 PARAMETERS
17307 pEventData: Response from FW
17308 pUserData:
17309===========================================================================*/
17310void WDA_EXTScanSetSignfRSSIChangeRspCallback(void *pEventData, void* pUserData)
17311{
17312 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17313 tWDA_CbContext *pWDA = NULL;
17314 void *pCallbackContext;
17315 tpAniSirGlobal pMac;
17316
17317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17318 "%s:", __func__);
17319 if (NULL == pWdaParams)
17320 {
17321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17322 "%s: pWdaParams received NULL", __func__);
17323 VOS_ASSERT(0) ;
17324 return;
17325 }
17326
17327 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17328
17329 if (NULL == pWDA)
17330 {
17331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17332 "%s: pWDA received NULL", __func__);
17333 VOS_ASSERT(0);
17334 goto error;
17335 }
17336
17337 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17338 if (NULL == pMac)
17339 {
17340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17341 "%s:pMac is NULL", __func__);
17342 VOS_ASSERT(0);
17343 goto error;
17344 }
17345
17346 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17347
17348 if (pMac->sme.pEXTScanIndCb)
17349 {
17350 pMac->sme.pEXTScanIndCb(pCallbackContext,
17351 WDA_EXTSCAN_SET_SIGNF_RSSI_CHANGE_RSP,
17352 pEventData);
17353 }
17354 else
17355 {
17356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17357 "%s:HDD callback is null", __func__);
17358 VOS_ASSERT(0);
17359 }
17360
17361
17362error:
17363
17364 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17365 {
17366 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17367 }
17368 if (pWdaParams->wdaMsgParam != NULL)
17369 {
17370 vos_mem_free(pWdaParams->wdaMsgParam);
17371 }
17372 vos_mem_free(pWdaParams) ;
17373
17374 return;
17375}
17376
17377/*==========================================================================
17378 FUNCTION WDA_EXTScanResetSignfRSSIChangeRspCallback
17379
17380 DESCRIPTION
17381 API to send EXTScan Set Significant RSSI Change RSP to HDD
17382
17383 PARAMETERS
17384 pEventData: Response from FW
17385 pUserData:
17386===========================================================================*/
17387void WDA_EXTScanResetSignfRSSIChangeRspCallback(void *pEventData,
17388 void* pUserData)
17389{
17390 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17391 tWDA_CbContext *pWDA = NULL;
17392 void *pCallbackContext;
17393 tpAniSirGlobal pMac;
17394
17395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17396 "%s:", __func__);
17397 if (NULL == pWdaParams)
17398 {
17399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17400 "%s: pWdaParams received NULL", __func__);
17401 VOS_ASSERT(0) ;
17402 return;
17403 }
17404
17405 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17406
17407 if (NULL == pWDA)
17408 {
17409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17410 "%s: pWDA received NULL", __func__);
17411 VOS_ASSERT(0);
17412 goto error;
17413 }
17414
17415 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17416 if (NULL == pMac)
17417 {
17418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17419 "%s:pMac is NULL", __func__);
17420 VOS_ASSERT(0);
17421 goto error;
17422 }
17423
17424 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17425
17426 if (pMac->sme.pEXTScanIndCb)
17427 {
17428 pMac->sme.pEXTScanIndCb(pCallbackContext,
17429 WDA_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_RSP,
17430 pEventData);
17431 }
17432 else
17433 {
17434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17435 "%s:HDD callback is null", __func__);
17436 VOS_ASSERT(0);
17437 }
17438
17439
17440error:
17441
17442 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17443 {
17444 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17445 }
17446 if (pWdaParams->wdaMsgParam != NULL)
17447 {
17448 vos_mem_free(pWdaParams->wdaMsgParam);
17449 }
17450 vos_mem_free(pWdaParams) ;
17451
17452 return;
17453}
17454
17455/*==========================================================================
17456 FUNCTION WDA_ProcessEXTScanStartReq
17457
17458 DESCRIPTION
17459 API to send EXTScan Start Request to WDI
17460
17461 PARAMETERS
17462 pWDA: Pointer to WDA context
17463 wdaRequest: Pointer to EXTScan req parameters
17464===========================================================================*/
17465VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
17466 tSirEXTScanStartReqParams *wdaRequest)
17467{
17468 WDI_Status status = WDI_STATUS_SUCCESS;
17469 tWDA_ReqParams *pWdaParams;
17470
17471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17472 "%s: ", __func__);
17473 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17474 if (NULL == pWdaParams)
17475 {
17476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17477 "%s: VOS MEM Alloc Failure", __func__);
17478 VOS_ASSERT(0);
17479 return VOS_STATUS_E_NOMEM;
17480 }
17481 pWdaParams->pWdaContext = pWDA;
17482 pWdaParams->wdaMsgParam = wdaRequest;
17483 pWdaParams->wdaWdiApiMsgParam = NULL;
17484
17485 status = WDI_EXTScanStartReq((void *)wdaRequest,
17486 (WDI_EXTScanStartRspCb)WDA_EXTScanStartRspCallback,
17487 (void *)pWdaParams);
17488 if (IS_WDI_STATUS_FAILURE(status))
17489 {
17490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17491 "Failure to request. Free all the memory " );
17492 vos_mem_free(pWdaParams->wdaMsgParam);
17493 vos_mem_free(pWdaParams);
17494 }
17495 return CONVERT_WDI2VOS_STATUS(status);
17496}
17497
17498/*==========================================================================
17499 FUNCTION WDA_ProcessEXTScanStopReq
17500
17501 DESCRIPTION
17502 API to send EXTScan Start Request to WDI
17503
17504 PARAMETERS
17505 pWDA: Pointer to WDA context
17506 wdaRequest: Pointer to EXTScan req parameters
17507===========================================================================*/
17508VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
17509 tSirEXTScanStopReqParams *wdaRequest)
17510{
17511 WDI_Status status = WDI_STATUS_SUCCESS;
17512 tWDA_ReqParams *pWdaParams;
17513
17514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17515 "%s:", __func__);
17516 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17517 if (NULL == pWdaParams)
17518 {
17519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17520 "%s: VOS MEM Alloc Failure", __func__);
17521 VOS_ASSERT(0);
17522 return VOS_STATUS_E_NOMEM;
17523 }
17524 pWdaParams->pWdaContext = pWDA;
17525 pWdaParams->wdaMsgParam = wdaRequest;
17526 pWdaParams->wdaWdiApiMsgParam = NULL;
17527
17528 status = WDI_EXTScanStopReq((void *)wdaRequest,
17529 (WDI_EXTScanStopRspCb)WDA_EXTScanStopRspCallback,
17530 (void *)pWdaParams);
17531 if (IS_WDI_STATUS_FAILURE(status))
17532 {
17533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17534 "Failure to request. Free all the memory " );
17535 vos_mem_free(pWdaParams->wdaMsgParam);
17536 vos_mem_free(pWdaParams);
17537 }
17538 return CONVERT_WDI2VOS_STATUS(status);
17539}
17540
17541/*==========================================================================
17542 FUNCTION WDA_ProcessEXTScanGetCachedResultsReq
17543
17544 DESCRIPTION
17545 API to send EXTScan Get Cached Results Request to WDI
17546
17547 PARAMETERS
17548 pWDA: Pointer to WDA context
17549 wdaRequest: Pointer to EXTScan req parameters
17550===========================================================================*/
17551VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
17552 tSirEXTScanGetCachedResultsReqParams *wdaRequest)
17553{
17554 WDI_Status status = WDI_STATUS_SUCCESS;
17555 tWDA_ReqParams *pWdaParams;
17556
17557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17558 "%s: ", __func__);
17559 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17560 if (NULL == pWdaParams)
17561 {
17562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17563 "%s: VOS MEM Alloc Failure", __func__);
17564 VOS_ASSERT(0);
17565 return VOS_STATUS_E_NOMEM;
17566 }
17567 pWdaParams->pWdaContext = pWDA;
17568 pWdaParams->wdaMsgParam = wdaRequest;
17569 pWdaParams->wdaWdiApiMsgParam = NULL;
17570
17571 status = WDI_EXTScanGetCachedResultsReq((void *)wdaRequest,
17572 (WDI_EXTScanGetCachedResultsRspCb)WDA_EXTScanGetCachedResultsRspCallback,
17573 (void *)pWdaParams);
17574 if (IS_WDI_STATUS_FAILURE(status))
17575 {
17576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17577 "Failure to request. Free all the memory " );
17578 vos_mem_free(pWdaParams->wdaMsgParam);
17579 vos_mem_free(pWdaParams);
17580 }
17581 return CONVERT_WDI2VOS_STATUS(status);
17582}
17583
17584/*==========================================================================
17585 FUNCTION WDA_ProcessEXTScanGetCapabilitiesReq
17586
17587 DESCRIPTION
17588 API to send EXTScan Get Capabilities Request to WDI
17589
17590 PARAMETERS
17591 pWDA: Pointer to WDA context
17592 wdaRequest: Pointer to EXTScan req parameters
17593===========================================================================*/
17594VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
17595 tSirGetEXTScanCapabilitiesReqParams *wdaRequest)
17596{
17597 WDI_Status status = WDI_STATUS_SUCCESS;
17598 tWDA_ReqParams *pWdaParams;
17599
17600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17601 "%s:", __func__);
17602 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17603 if (NULL == pWdaParams)
17604 {
17605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17606 "%s: VOS MEM Alloc Failure", __func__);
17607 VOS_ASSERT(0);
17608 return VOS_STATUS_E_NOMEM;
17609 }
17610 pWdaParams->pWdaContext = pWDA;
17611 pWdaParams->wdaMsgParam = wdaRequest;
17612 pWdaParams->wdaWdiApiMsgParam = NULL;
17613
17614 status = WDI_EXTScanGetCapabilitiesReq((void *)wdaRequest,
17615 (WDI_EXTScanGetCapabilitiesRspCb)WDA_EXTScanGetCapabilitiesRspCallback,
17616 (void *)pWdaParams);
17617 if (IS_WDI_STATUS_FAILURE(status))
17618 {
17619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17620 "Failure to request. Free all the memory " );
17621 vos_mem_free(pWdaParams->wdaMsgParam);
17622 vos_mem_free(pWdaParams);
17623 }
17624 return CONVERT_WDI2VOS_STATUS(status);
17625}
17626
17627/*==========================================================================
17628 FUNCTION WDA_ProcessEXTScanSetBSSIDHotlistReq
17629
17630 DESCRIPTION
17631 API to send Set BSSID Hotlist Request to WDI
17632
17633 PARAMETERS
17634 pWDA: Pointer to WDA context
17635 wdaRequest: Pointer to EXTScan req parameters
17636===========================================================================*/
17637VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
17638 tSirEXTScanSetBssidHotListReqParams *wdaRequest)
17639{
17640 WDI_Status status = WDI_STATUS_SUCCESS;
17641 tWDA_ReqParams *pWdaParams;
17642
17643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17644 "%s: ", __func__);
17645 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17646 if (NULL == pWdaParams)
17647 {
17648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17649 "%s: VOS MEM Alloc Failure", __func__);
17650 VOS_ASSERT(0);
17651 return VOS_STATUS_E_NOMEM;
17652 }
17653 pWdaParams->pWdaContext = pWDA;
17654 pWdaParams->wdaMsgParam = wdaRequest;
17655 pWdaParams->wdaWdiApiMsgParam = NULL;
17656
17657 status = WDI_EXTScanSetBSSIDHotlistReq((void *)wdaRequest,
17658 (WDI_EXTScanSetBSSIDHotlistRspCb)WDA_EXTScanSetBSSIDHotlistRspCallback,
17659 (void *)pWdaParams);
17660 if (IS_WDI_STATUS_FAILURE(status))
17661 {
17662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17663 "Failure to request. Free all the memory " );
17664 vos_mem_free(pWdaParams->wdaMsgParam);
17665 vos_mem_free(pWdaParams);
17666 }
17667 return CONVERT_WDI2VOS_STATUS(status);
17668}
17669
17670/*==========================================================================
17671 FUNCTION WDA_ProcessEXTScanReSetBSSIDHotlistReq
17672
17673 DESCRIPTION
17674 API to send Reset BSSID Hotlist Request to WDI
17675
17676 PARAMETERS
17677 pWDA: Pointer to WDA context
17678 wdaRequest: Pointer to EXTScan req parameters
17679===========================================================================*/
17680VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
17681 tSirEXTScanResetBssidHotlistReqParams *wdaRequest)
17682{
17683 WDI_Status status = WDI_STATUS_SUCCESS;
17684 tWDA_ReqParams *pWdaParams;
17685
17686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17687 "%s:", __func__);
17688 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17689 if (NULL == pWdaParams)
17690 {
17691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17692 "%s: VOS MEM Alloc Failure", __func__);
17693 VOS_ASSERT(0);
17694 return VOS_STATUS_E_NOMEM;
17695 }
17696 pWdaParams->pWdaContext = pWDA;
17697 pWdaParams->wdaMsgParam = wdaRequest;
17698 pWdaParams->wdaWdiApiMsgParam = NULL;
17699
17700 status = WDI_EXTScanResetBSSIDHotlistReq((void *)wdaRequest,
17701 (WDI_EXTScanResetBSSIDHotlistRspCb)WDA_EXTScanResetBSSIDHotlistRspCallback,
17702 (void *)pWdaParams);
17703 if (IS_WDI_STATUS_FAILURE(status))
17704 {
17705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17706 "Failure to request. Free all the memory " );
17707 vos_mem_free(pWdaParams->wdaMsgParam);
17708 vos_mem_free(pWdaParams);
17709 }
17710 return CONVERT_WDI2VOS_STATUS(status);
17711}
17712
17713/*==========================================================================
17714 FUNCTION WDA_ProcessEXTScanSetSignfRSSIChangeReq
17715
17716 DESCRIPTION
17717 API to send Set Significant RSSI Change Request to WDI
17718
17719 PARAMETERS
17720 pWDA: Pointer to WDA context
17721 wdaRequest: Pointer to EXTScan req parameters
17722===========================================================================*/
17723VOS_STATUS WDA_ProcessEXTScanSetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
17724 tSirEXTScanSetSignificantChangeReqParams *wdaRequest)
17725{
17726 WDI_Status status = WDI_STATUS_SUCCESS;
17727 tWDA_ReqParams *pWdaParams;
17728
17729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17730 "%s: ", __func__);
17731 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17732 if (NULL == pWdaParams)
17733 {
17734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17735 "%s: VOS MEM Alloc Failure", __func__);
17736 VOS_ASSERT(0);
17737 return VOS_STATUS_E_NOMEM;
17738 }
17739 pWdaParams->pWdaContext = pWDA;
17740 pWdaParams->wdaMsgParam = wdaRequest;
17741 pWdaParams->wdaWdiApiMsgParam = NULL;
17742
17743 status = WDI_EXTScanSetSignfRSSIChangeReq((void *)wdaRequest,
17744 (WDI_EXTScanSetSignfRSSIChangeRspCb)WDA_EXTScanSetSignfRSSIChangeRspCallback,
17745 (void *)pWdaParams);
17746 if (IS_WDI_STATUS_FAILURE(status))
17747 {
17748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17749 "Failure to request. Free all the memory " );
17750 vos_mem_free(pWdaParams->wdaMsgParam);
17751 vos_mem_free(pWdaParams);
17752 }
17753 return CONVERT_WDI2VOS_STATUS(status);
17754}
17755
17756/*==========================================================================
17757 FUNCTION WDA_ProcessEXTScanResetSignfRSSIChangeReq
17758
17759 DESCRIPTION
17760 API to send Reset Significant RSSI Change Request to WDI
17761
17762 PARAMETERS
17763 pWDA: Pointer to WDA context
17764 wdaRequest: Pointer to EXTScan req parameters
17765===========================================================================*/
17766VOS_STATUS WDA_ProcessEXTScanResetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
17767 tSirEXTScanResetSignificantChangeReqParams *wdaRequest)
17768{
17769 WDI_Status status = WDI_STATUS_SUCCESS;
17770 tWDA_ReqParams *pWdaParams;
17771
17772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17773 "%s:", __func__);
17774 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17775 if (NULL == pWdaParams)
17776 {
17777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17778 "%s: VOS MEM Alloc Failure", __func__);
17779 VOS_ASSERT(0);
17780 return VOS_STATUS_E_NOMEM;
17781 }
17782 pWdaParams->pWdaContext = pWDA;
17783 pWdaParams->wdaMsgParam = wdaRequest;
17784 pWdaParams->wdaWdiApiMsgParam = NULL;
17785
17786 status = WDI_EXTScanResetSignfRSSIChangeReq((void *)wdaRequest,
17787 (WDI_EXTScanResetSignfRSSIChangeRspCb)
17788 WDA_EXTScanResetSignfRSSIChangeRspCallback,
17789 (void *)pWdaParams);
17790 if (IS_WDI_STATUS_FAILURE(status))
17791 {
17792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17793 "Failure to request. Free all the memory " );
17794 vos_mem_free(pWdaParams->wdaMsgParam);
17795 vos_mem_free(pWdaParams);
17796 }
17797 return CONVERT_WDI2VOS_STATUS(status);
17798}
17799#endif /* WLAN_FEATURE_EXTSCAN */
17800
Sunil Duttbd736ed2014-05-26 21:19:41 +053017801#ifdef WLAN_FEATURE_LINK_LAYER_STATS
17802
17803/*==========================================================================
17804 FUNCTION WDA_LLStatsSetRspCallback
17805
17806 DESCRIPTION
17807 API to process set link layer statistics response from FW
17808
17809 PARAMETERS
17810 pRsp: Pointer to set link layer statistics response
17811 pUserData: Pointer to user data
17812
17813 RETURN VALUE
17814 NONE
17815
17816===========================================================================*/
17817void WDA_LLStatsSetRspCallback(void *pEventData, void* pUserData)
17818{
17819 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17820
17821
17822 if (NULL == pWdaParams)
17823 {
17824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17825 "%s: pWdaParams received NULL", __func__);
17826 VOS_ASSERT(0) ;
17827 return ;
17828 }
17829
17830 /* Do not need to send notification to upper layer
17831 * Just free allocated resources */
17832 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17833 {
17834 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17835 }
17836 if (pWdaParams->wdaMsgParam != NULL)
17837 {
17838 vos_mem_free(pWdaParams->wdaMsgParam);
17839 }
17840 vos_mem_free(pWdaParams) ;
17841
17842 return;
17843}
17844
17845/*==========================================================================
17846 FUNCTION WDA_ProcessLLStatsSetReq
17847
17848 DESCRIPTION
17849 API to send Set Link Layer Stats request to WDI
17850
17851 PARAMETERS
17852 pWDA: Pointer to WDA context
17853 wdaRequest: Pointer to set Link Layer Stats req parameters
17854===========================================================================*/
17855VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
17856 tSirLLStatsSetReq *wdaRequest)
17857{
17858 WDI_Status status = WDI_STATUS_SUCCESS;
17859 tWDA_ReqParams *pWdaParams;
17860
17861 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17862 if (NULL == pWdaParams)
17863 {
17864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17865 "%s: VOS MEM Alloc Failure", __func__);
17866 VOS_ASSERT(0);
17867 return VOS_STATUS_E_NOMEM;
17868 }
17869 pWdaParams->pWdaContext = pWDA;
17870 pWdaParams->wdaMsgParam = wdaRequest;
17871 pWdaParams->wdaWdiApiMsgParam = NULL;
17872
17873 status = WDI_LLStatsSetReq((void *)wdaRequest,
17874 (WDI_LLStatsSetRspCb)WDA_LLStatsSetRspCallback,
17875 (void *)pWdaParams);
17876 if (IS_WDI_STATUS_FAILURE(status))
17877 {
17878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17879 "Failure to request. Free all the memory " );
17880 vos_mem_free(pWdaParams->wdaMsgParam);
17881 vos_mem_free(pWdaParams);
17882 }
17883 return CONVERT_WDI2VOS_STATUS(status);
17884}
17885
17886/*==========================================================================
17887 FUNCTION WDA_LLStatsGetRspCallback
17888
17889 DESCRIPTION
17890 API to process get link layer statistics response from FW
17891
17892 PARAMETERS
17893 pRsp: Pointer to get link layer statistics response
17894 pUserData: Pointer to user data
17895
17896 RETURN VALUE
17897 NONE
17898
17899===========================================================================*/
17900void WDA_LLStatsGetRspCallback(void *pEventData, void* pUserData)
17901{
17902 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17903
17904 if (NULL == pWdaParams)
17905 {
17906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17907 "%s: pWdaParams received NULL", __func__);
17908 VOS_ASSERT(0) ;
17909 return ;
17910 }
17911
17912 /* Do not need to send notification to upper layer
17913 * Just free allocated resources */
17914 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17915 {
17916 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17917 }
17918 if (pWdaParams->wdaMsgParam != NULL)
17919 {
17920 vos_mem_free(pWdaParams->wdaMsgParam);
17921 }
17922 vos_mem_free(pWdaParams) ;
17923
17924 return;
17925}
17926
17927/*==========================================================================
17928 FUNCTION WDA_ProcessLLStatsGetReq
17929
17930 DESCRIPTION
17931 API to send Get Link Layer Stats request to WDI
17932
17933 PARAMETERS
17934 pWDA: Pointer to WDA context
17935 wdaRequest: Pointer to get Link Layer Stats req parameters
17936===========================================================================*/
17937VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
17938 tSirLLStatsGetReq *wdaRequest)
17939{
17940 WDI_Status status = WDI_STATUS_SUCCESS;
17941 tWDA_ReqParams *pWdaParams;
17942
17943 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17944 if (NULL == pWdaParams)
17945 {
17946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17947 "%s: VOS MEM Alloc Failure", __func__);
17948 VOS_ASSERT(0);
17949 return VOS_STATUS_E_NOMEM;
17950 }
17951 pWdaParams->pWdaContext = pWDA;
17952 pWdaParams->wdaMsgParam = wdaRequest;
17953 pWdaParams->wdaWdiApiMsgParam = NULL;
17954
17955 status = WDI_LLStatsGetReq((void *) wdaRequest,
17956 (WDI_LLStatsGetRspCb)WDA_LLStatsGetRspCallback,
17957 (void *)pWdaParams);
17958 if (IS_WDI_STATUS_FAILURE(status))
17959 {
17960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17961 "Failure to request. Free all the memory " );
17962 vos_mem_free(pWdaParams->wdaMsgParam);
17963 vos_mem_free(pWdaParams);
17964 }
17965 return CONVERT_WDI2VOS_STATUS(status);
17966}
17967
17968/*==========================================================================
17969 FUNCTION WDA_LLStatsClearRspCallback
17970
17971 DESCRIPTION
17972 API to process clear link layer statistics response from FW
17973
17974 PARAMETERS
17975 pRsp: Pointer to clear link layer statistics response
17976 pUserData: Pointer to user data
17977
17978 RETURN VALUE
17979 NONE
17980
17981===========================================================================*/
17982void WDA_LLStatsClearRspCallback(void *pEventData, void* pUserData)
17983{
17984 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17985
17986
17987 if (NULL == pWdaParams)
17988 {
17989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17990 "%s: pWdaParams received NULL", __func__);
17991 VOS_ASSERT(0) ;
17992 return ;
17993 }
17994 /* Do not need to send notification to upper layer
17995 * Just free allocated resources */
17996 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17997 {
17998 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17999 }
18000 if (pWdaParams->wdaMsgParam != NULL)
18001 {
18002 vos_mem_free(pWdaParams->wdaMsgParam);
18003 }
18004 vos_mem_free(pWdaParams) ;
18005 return;
18006}
18007
18008/*==========================================================================
18009 FUNCTION WDA_ProcessLLStatsClearReq
18010
18011 DESCRIPTION
18012 API to send Clear Link Layer Stats request to WDI
18013
18014 PARAMETERS
18015 pWDA: Pointer to WDA context
18016 wdaRequest: Pointer to earLink Layer Stats req
18017===========================================================================*/
18018VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
18019 tSirLLStatsClearReq *wdaRequest)
18020{
18021 WDI_Status status = WDI_STATUS_SUCCESS;
18022 tWDA_ReqParams *pWdaParams;
18023
18024 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18025 if (NULL == pWdaParams)
18026 {
18027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18028 "%s: VOS MEM Alloc Failure", __func__);
18029 VOS_ASSERT(0);
18030 return VOS_STATUS_E_NOMEM;
18031 }
18032 pWdaParams->pWdaContext = pWDA;
18033 pWdaParams->wdaMsgParam = wdaRequest;
18034 pWdaParams->wdaWdiApiMsgParam = NULL;
18035
18036 status = WDI_LLStatsClearReq((void *) wdaRequest,
18037 (WDI_LLStatsClearRspCb)WDA_LLStatsClearRspCallback,
18038 (void *)pWdaParams);
18039 if (IS_WDI_STATUS_FAILURE(status))
18040 {
18041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18042 "Failure to request. Free all the memory " );
18043 vos_mem_free(pWdaParams->wdaMsgParam);
18044 vos_mem_free(pWdaParams);
18045 }
18046 return CONVERT_WDI2VOS_STATUS(status);
18047}
18048
18049#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +053018050
Abhishek Singh85b74712014-10-08 11:38:19 +053018051void WDA_FWStatsGetRspCallback(WDI_Status status,void *fwStatsResp,void *pUserData)
18052{
18053 tSirFWStatsInfo *fwStatsinfo = (tSirFWStatsInfo *)pUserData;
18054
18055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18056 "<------ %s " ,__func__);
18057 if (NULL == fwStatsinfo)
18058 {
18059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18060 "%s: pWdaParams received NULL", __func__);
18061 VOS_ASSERT(0);
18062 return;
18063 }
18064
18065 if(fwStatsinfo->callback)
18066 fwStatsinfo->callback(status, fwStatsResp, fwStatsinfo->data);
18067
18068 vos_mem_free(pUserData);
18069 return;
18070}
18071
18072
18073v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
18074 tSirFWStatsGetReq *pData)
18075{
18076
18077 WDI_Status wdiStatus;
18078 tSirFWStatsInfo *fwStatsinfo;
18079
18080 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18081 "------> %s" , __func__);
18082
18083 fwStatsinfo =
18084 (tSirFWStatsInfo *)vos_mem_malloc(sizeof(tSirFWStatsInfo));
18085 if (NULL == fwStatsinfo)
18086 {
18087 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18088 "%s: VOS MEM Alloc Failure", __func__);
18089 VOS_ASSERT(0);
18090 vos_mem_free(pData);
18091 return;
18092 }
18093
18094 fwStatsinfo->callback = (tSirFWStatsCallback)(pData->callback);
18095 fwStatsinfo->data = pData->data;
18096
18097 wdiStatus = WDI_FWStatsGetReq(fwStatsinfo,
18098 WDA_FWStatsGetRspCallback,
18099 pData->stats);
18100 if (WDI_STATUS_PENDING == wdiStatus)
18101 {
18102 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18103 "Pending received for %s:%d ", __func__, __LINE__);
18104 }
18105 else if (WDI_STATUS_SUCCESS != wdiStatus)
18106 {
18107 if (fwStatsinfo->callback)
18108 {
18109 fwStatsinfo->callback(WDI_STATUS_E_FAILURE, NULL ,fwStatsinfo->data);
18110 }
18111 vos_mem_free(fwStatsinfo);
18112 }
18113 vos_mem_free(pData);
18114}
18115
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053018116/*==========================================================================
18117 FUNCTION WDA_EncryptMsgRspCallback
18118
18119 DESCRIPTION
18120 API to send Encrypt message response to HDD
18121
18122 PARAMETERS
18123 pEventData: Response from FW
18124 pUserData: Data sent to firmware as part of request
18125===========================================================================*/
18126void WDA_EncryptMsgRspCallback(WDI_Status status, void *pEventData,
18127 void* pUserData)
18128{
18129 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18130 tWDA_CbContext *pWDA = NULL;
18131 tpAniSirGlobal pMac;
18132 vos_msg_t vosMsg;
18133 tpSirEncryptedDataRspParams pEncRspParams;
18134 tpSetEncryptedDataRspParams pEncryptedDataRsp;
18135
18136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18137 FL("%s:"), __func__);
18138 if (NULL == pWdaParams)
18139 {
18140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18141 FL("%s: pWdaParams received NULL"), __func__);
18142 VOS_ASSERT(0);
18143 return;
18144 }
18145
18146 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
18147
18148 if (NULL == pWDA)
18149 {
18150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18151 FL("%s: pWDA received NULL"), __func__);
18152 VOS_ASSERT(0);
18153 goto error;
18154 }
18155
18156 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18157 if (NULL == pMac)
18158 {
18159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18160 FL("%s:pMac is NULL"), __func__);
18161 VOS_ASSERT(0);
18162 goto error;
18163 }
18164
18165 pEncryptedDataRsp = (tpSetEncryptedDataRspParams) pEventData;
18166
18167 pEncRspParams = vos_mem_malloc(sizeof(tSirEncryptedDataRspParams));
18168 if (NULL == pEncRspParams)
18169 {
18170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18171 FL("%s: VOS MEM Alloc Failure"), __func__);
18172 VOS_ASSERT(0);
18173 goto error;
18174 }
18175
18176 /* Message Header */
18177 pEncRspParams->mesgType = eWNI_SME_ENCRYPT_MSG_RSP;
18178 pEncRspParams->mesgLen = sizeof(tSirEncryptedDataRspParams);
18179 pEncRspParams->encryptedDataRsp.encryptedPayload.length =
18180 pEncryptedDataRsp->encryptedPayload.length;
18181 vos_mem_copy(pEncRspParams->encryptedDataRsp.encryptedPayload.data,
18182 pEncryptedDataRsp->encryptedPayload.data,
18183 pEncryptedDataRsp->encryptedPayload.length);
18184
18185 /* VOS message wrapper */
18186 vosMsg.type = eWNI_SME_ENCRYPT_MSG_RSP;
18187 vosMsg.bodyptr = (void *)pEncRspParams;
18188 vosMsg.bodyval = 0;
18189
18190 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
18191 {
18192 /* free the mem */
18193 vos_mem_free((v_VOID_t *) pEncRspParams);
18194 }
18195
18196error:
18197
18198 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18199 {
18200 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18201 }
18202 if (pWdaParams->wdaMsgParam != NULL)
18203 {
18204 vos_mem_free(pWdaParams->wdaMsgParam);
18205 }
18206 vos_mem_free(pWdaParams) ;
18207
18208 return;
18209}
18210/*==========================================================================
18211 FUNCTION WDA_ProcessEncryptMsgReq
18212
18213 DESCRIPTION
18214 API to send Encrypt message Request to WDI
18215
18216 PARAMETERS
18217 pWDA: Pointer to WDA context
18218 wdaRequest: Pointer to Encrypt_msg req parameters
18219===========================================================================*/
18220VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
18221 u8 *wdaRequest)
18222{
18223 WDI_Status status = WDI_STATUS_SUCCESS;
18224 tWDA_ReqParams *pWdaParams;
18225
18226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18227 FL("%s: "), __func__);
18228 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18229 if (NULL == pWdaParams)
18230 {
18231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18232 FL("%s: VOS MEM Alloc Failure"), __func__);
18233 VOS_ASSERT(0);
18234 return VOS_STATUS_E_NOMEM;
18235 }
18236 pWdaParams->pWdaContext = pWDA;
18237 pWdaParams->wdaMsgParam = wdaRequest;
18238 pWdaParams->wdaWdiApiMsgParam = NULL;
18239
18240 status = WDI_EncryptMsgReq((void *)wdaRequest,
18241 (WDI_EncryptMsgRspCb)WDA_EncryptMsgRspCallback,
18242 (void *)pWdaParams);
18243 if (IS_WDI_STATUS_FAILURE(status))
18244 {
18245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18246 FL("Failure to request. Free all the memory " ));
18247 vos_mem_free(pWdaParams->wdaMsgParam);
18248 vos_mem_free(pWdaParams);
18249 }
18250 return CONVERT_WDI2VOS_STATUS(status);
18251}