blob: 752fd85450c0fe79be9228efb34c857260668e0a [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 */
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +0530273 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
Jeff Johnson295189b2012-06-20 16:38:30 -0700274 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
275 if(!VOS_IS_STATUS_SUCCESS(status))
276 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +0530277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "%s: Failed to "
278 "allocate context for WDA - status = %d",__func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700279 return VOS_STATUS_E_NOMEM;
280 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700281 /*__asm int 3;*/
282 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
283
284 /* Initialize data structures */
285 wdaContext->pVosContext = pVosContext;
286 wdaContext->wdaState = WDA_INIT_STATE;
287 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
288
289 /* Initialize WDA-WDI synchronization event */
290 status = vos_event_init(&wdaContext->wdaWdiEvent);
291 if(!VOS_IS_STATUS_SUCCESS(status))
292 {
293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800294 "WDI Sync Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800295 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700296 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700297 /* Init Frame transfer event */
298 status = vos_event_init(&wdaContext->txFrameEvent);
299 if(!VOS_IS_STATUS_SUCCESS(status))
300 {
301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800302 "VOS Mgmt Frame Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800303 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700304 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700305 status = vos_event_init(&wdaContext->suspendDataTxEvent);
306 if(!VOS_IS_STATUS_SUCCESS(status))
307 {
308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800309 "VOS suspend data tx Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800310 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700311 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700312 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
313 if(!VOS_IS_STATUS_SUCCESS(status))
314 {
315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800316 "VOS wait On Wdi Ind Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800317 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700318 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700319 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700320 wdaContext->driverMode = pMacParams->driverType;
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530321 if(WDI_STATUS_SUCCESS != WDI_Init(devHandle, &wdaContext->pWdiContext,
Jeff Johnson295189b2012-06-20 16:38:30 -0700322 &wdiDevCapability, pMacParams->driverType))
323 {
324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
325 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800326 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700327 }
328 else
329 {
330 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
331 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
332 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700333 /* update max STA in WDA used for BA */
334 wdaContext->wdaMaxSta = pMacParams->maxStation;
335 /* store the frameTransRequired flag in wdaContext, to send this to HAL
336 * in WDA_Start
337 */
338 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
339 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700340 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800341
342error:
343 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
344 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700345}
346
Jeff Johnson295189b2012-06-20 16:38:30 -0700347/*
348 * FUNCTION: WDA_preStart
349 * Trigger DAL-AL to start CFG download
350 */
351VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
352{
353 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
354 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700355 /*
356 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
357 */
358 wdaMsg.type = WNI_CFG_DNLD_REQ ;
359 wdaMsg.bodyptr = NULL;
360 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700361 /* post the message.. */
362 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
363 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
364 {
365 vosStatus = VOS_STATUS_E_BADMSG;
366 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700367 return( vosStatus );
368}
Jeff Johnson295189b2012-06-20 16:38:30 -0700369/*
370 * FUNCTION: WDA_wdiStartCallback
371 * Once WDI_Start is finished, WDI start callback will be called by WDI
372 * to indicate completion of WDI_Start.
373 */
374void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
375 void *pVosContext)
376{
377 tWDA_CbContext *wdaContext;
378 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700379 if (NULL == pVosContext)
380 {
381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700382 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700383 return;
384 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700385 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
386 if (NULL == wdaContext)
387 {
388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700389 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700390 return;
391 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700392 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
393 {
394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700395 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700396 }
397 else
398 {
399 wdaContext->wdaState = WDA_START_STATE;
400 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700401 /* extract and save version information from the Start Response */
402 wdaContext->wcnssWlanCompiledVersion.major =
403 wdiRspParams->wlanCompiledVersion.major;
404 wdaContext->wcnssWlanCompiledVersion.minor =
405 wdiRspParams->wlanCompiledVersion.minor;
406 wdaContext->wcnssWlanCompiledVersion.version =
407 wdiRspParams->wlanCompiledVersion.version;
408 wdaContext->wcnssWlanCompiledVersion.revision =
409 wdiRspParams->wlanCompiledVersion.revision;
410 wdaContext->wcnssWlanReportedVersion.major =
411 wdiRspParams->wlanReportedVersion.major;
412 wdaContext->wcnssWlanReportedVersion.minor =
413 wdiRspParams->wlanReportedVersion.minor;
414 wdaContext->wcnssWlanReportedVersion.version =
415 wdiRspParams->wlanReportedVersion.version;
416 wdaContext->wcnssWlanReportedVersion.revision =
417 wdiRspParams->wlanReportedVersion.revision;
418 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
419 wdiRspParams->wcnssSoftwareVersion,
420 sizeof(wdaContext->wcnssSoftwareVersionString));
421 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
422 wdiRspParams->wcnssHardwareVersion,
423 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700424 /* Notify WDA_start that WDI_Start has completed */
425 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700426 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700427 {
428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700429 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700430 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700431 return;
432}
433
Jeff Johnson295189b2012-06-20 16:38:30 -0700434/*
435 * FUNCTION: WDA_start
436 * Prepare TLV configuration and call WDI_Start.
437 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700438VOS_STATUS WDA_start(v_PVOID_t pVosContext)
439{
440 tWDA_CbContext *wdaContext;
441 VOS_STATUS status;
442 WDI_Status wdiStatus;
443 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700444 if (NULL == pVosContext)
445 {
446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700447 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700448 return VOS_STATUS_E_FAILURE;
449 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700450 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
451 if (NULL == wdaContext)
452 {
453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700454 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700455 return VOS_STATUS_E_FAILURE;
456 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700457 /* Non-FTM mode, WDA status for START must be INIT
458 * FTM mode, WDA Status for START can be INIT or STOP */
459 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
460 (WDA_STOP_STATE != wdaContext->wdaState) )
461 {
462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
463 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700464 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700465 return VOS_STATUS_E_FAILURE;
466 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700467 /* initialize the wdiStartParam. Note that we can create this on
468 the stack since we won't exit until WDI_Start() completes or
469 times out */
470 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700471 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700472 /* prepare the config TLV for the WDI */
473 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
474 if ( !VOS_IS_STATUS_SUCCESS(status) )
475 {
476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700477 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700478 return VOS_STATUS_E_FAILURE;
479 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700480 /* note from here onwards if an error occurs we must
481 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700482 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
483 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
484 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700485 /* initialize the WDA-WDI synchronization event */
486 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700487 /* call WDI start */
488 wdiStatus = WDI_Start(&wdiStartParam,
489 (WDI_StartRspCb)WDA_wdiStartCallback,
490 (v_VOID_t *)pVosContext);
491 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
492 {
493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700494 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700495 vos_mem_free(wdiStartParam.pConfigBuffer);
496 return VOS_STATUS_E_FAILURE;
497 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700498 /* wait for WDI start to invoke our callback */
499 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
500 WDA_WDI_START_TIMEOUT );
501 if ( !VOS_IS_STATUS_SUCCESS(status) )
502 {
503 if ( VOS_STATUS_E_TIMEOUT == status )
504 {
505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700506 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700507 }
508 else
509 {
510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
511 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700512 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700513 }
514 vos_mem_free(wdiStartParam.pConfigBuffer);
Siddharth Bhalbea38ad2014-10-12 14:10:52 +0530515 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700516 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700517 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700518 /* we no longer need the config TLV */
519 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700520 /* if we are not in the START state then WDI_Start() failed */
521 if (WDA_START_STATE != wdaContext->wdaState)
522 {
523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700524 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700525 return VOS_STATUS_E_FAILURE;
526 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700527 /* FTM mode does not need to monitor BA activity */
528 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
529 {
530 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800531 if(VOS_STATUS_SUCCESS == status)
532 {
533 wdaContext->wdaTimersCreated = VOS_TRUE;
534 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700535 }
Leo Chang9d76f622013-08-23 16:34:52 -0700536 else
537 {
538 vos_event_init(&wdaContext->ftmStopDoneEvent);
539 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700540 return status;
541}
542
Jeff Johnson295189b2012-06-20 16:38:30 -0700543/*
544 * FUNCTION: WDA_prepareConfigTLV
545 * Function to prepare CFG for DAL(WDA)
546 */
547VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
548 WDI_StartReqParamsType *wdiStartParams )
549{
550 /* get pMac to acess CFG data base */
551 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
552 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
553 tHalCfg *tlvStruct = NULL ;
554 tANI_U8 *tlvStructStart = NULL ;
555 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
556 v_PVOID_t *configParam;
557 tANI_U32 configParamSize;
558 tANI_U32 *configDataValue;
559 WDI_WlanVersionType wcnssCompiledApiVersion;
Wilson Tsaof8b37942013-09-06 10:49:00 -0700560 tANI_U8 i;
561
Jeff Johnson295189b2012-06-20 16:38:30 -0700562 if ((NULL == pMac)||(NULL == wdaContext))
563 {
564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700565 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700566 VOS_ASSERT(0);
567 return VOS_STATUS_E_FAILURE;
568 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700569 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
570 WNI_CFG_STA_ID_LEN +
571 WNI_CFG_EDCA_WME_ACBK_LEN +
572 WNI_CFG_EDCA_WME_ACBE_LEN +
573 WNI_CFG_EDCA_WME_ACVI_LEN +
574 WNI_CFG_EDCA_WME_ACVO_LEN +
575 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700576 /* malloc memory for all configs in one shot */
577 configParam = vos_mem_malloc(configParamSize);
578
579 if(NULL == configParam )
580 {
581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700582 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700583 VOS_ASSERT(0) ;
584 return VOS_STATUS_E_NOMEM;
585 }
586 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700587 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700588 tlvStruct = (tHalCfg *)configParam;
589 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700590 /* TODO: Remove Later */
591 /* QWLAN_HAL_CFG_STA_ID */
592 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
593 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
594 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
595 eSIR_SUCCESS)
596 {
597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
598 "Failed to get value for WNI_CFG_STA_ID");
599 goto handle_failure;
600 }
601 tlvStruct->length = strLength ;
602 /* calculate the pad bytes to have the CFG in aligned format */
603 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
604 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700605 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
606 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700607 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
608 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
609 tlvStruct->length = sizeof(tANI_U32);
610 configDataValue = (tANI_U32 *)(tlvStruct + 1);
611 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
612 != eSIR_SUCCESS)
613 {
614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
615 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
616 goto handle_failure;
617 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700618 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
619 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700620 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
621 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
622 tlvStruct->length = sizeof(tANI_U32);
623 configDataValue = (tANI_U32 *)(tlvStruct + 1);
624 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
625 eSIR_SUCCESS)
626 {
627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
628 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
629 goto handle_failure;
630 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700631 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
632 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700633 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
634 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
635 tlvStruct->length = sizeof(tANI_U32);
636 configDataValue = (tANI_U32 *)(tlvStruct + 1);
637 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
638 != eSIR_SUCCESS)
639 {
640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
641 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
642 goto handle_failure;
643 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700644 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
645 + sizeof(tHalCfg) + tlvStruct->length)) ;
646
647 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
648 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
649 tlvStruct->length = sizeof(tANI_U32);
650 configDataValue = (tANI_U32 *)(tlvStruct + 1);
651 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
652 configDataValue ) != eSIR_SUCCESS)
653 {
654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
655 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
656 goto handle_failure;
657 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700658 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
659 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700660 /* QWLAN_HAL_CFG_CAL_PERIOD */
661 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
662 tlvStruct->length = sizeof(tANI_U32);
663 configDataValue = (tANI_U32 *)(tlvStruct + 1);
664 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
665 != eSIR_SUCCESS)
666 {
667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
668 "Failed to get value for WNI_CFG_CAL_PERIOD");
669 goto handle_failure;
670 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700671 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
672 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700673 /* QWLAN_HAL_CFG_CAL_CONTROL */
674 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
675 tlvStruct->length = sizeof(tANI_U32);
676 configDataValue = (tANI_U32 *)(tlvStruct + 1);
677 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
678 != eSIR_SUCCESS)
679 {
680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
681 "Failed to get value for WNI_CFG_CAL_CONTROL");
682 goto handle_failure;
683 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700684 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
685 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700686 /* QWLAN_HAL_CFG_PROXIMITY */
687 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
688 tlvStruct->length = sizeof(tANI_U32);
689 configDataValue = (tANI_U32 *)(tlvStruct + 1);
690 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
691 != eSIR_SUCCESS)
692 {
693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
694 "Failed to get value for WNI_CFG_PROXIMITY");
695 goto handle_failure;
696 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700697 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
698 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700699 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
700 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
701 tlvStruct->length = sizeof(tANI_U32);
702 configDataValue = (tANI_U32 *)(tlvStruct + 1);
703 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
704 != eSIR_SUCCESS)
705 {
706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
707 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
708 goto handle_failure;
709 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700710 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
711 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700712 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
713 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
714 tlvStruct->length = sizeof(tANI_U32);
715 configDataValue = (tANI_U32 *)(tlvStruct + 1);
716 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
717 eSIR_SUCCESS)
718 {
719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
720 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
721 goto handle_failure;
722 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700723 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
724 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700725 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
726 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
727 tlvStruct->length = sizeof(tANI_U32);
728 configDataValue = (tANI_U32 *)(tlvStruct + 1);
729 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
730 configDataValue ) != eSIR_SUCCESS)
731 {
732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
733 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
734 goto handle_failure;
735 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700736 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
737 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700738 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
739 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
740 tlvStruct->length = sizeof(tANI_U32);
741 configDataValue = (tANI_U32 *)(tlvStruct + 1);
742 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
743 eSIR_SUCCESS)
744 {
745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
746 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
747 goto handle_failure;
748 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700749 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
750 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700751 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
752 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
753 tlvStruct->length = sizeof(tANI_U32);
754 configDataValue = (tANI_U32 *)(tlvStruct + 1);
755 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
756 eSIR_SUCCESS)
757 {
758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
759 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
760 goto handle_failure;
761 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700762 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
763 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700764 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
765 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
766 tlvStruct->length = sizeof(tANI_U32);
767 configDataValue = (tANI_U32 *)(tlvStruct + 1);
768 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
769 eSIR_SUCCESS)
770 {
771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
772 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
773 goto handle_failure;
774 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700775 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
776 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700777 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
778 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
779 tlvStruct->length = sizeof(tANI_U32);
780 configDataValue = (tANI_U32 *)(tlvStruct + 1);
781 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
782 configDataValue ) != eSIR_SUCCESS)
783 {
784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
785 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
786 goto handle_failure;
787 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700788 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
789 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700790 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
791 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
792 tlvStruct->length = sizeof(tANI_U32);
793 configDataValue = (tANI_U32 *)(tlvStruct + 1);
794 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
795 configDataValue ) != eSIR_SUCCESS)
796 {
797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
798 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
799 goto handle_failure;
800 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700801 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
802 + sizeof(tHalCfg) + tlvStruct->length));
803
804 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
805 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
806 tlvStruct->length = sizeof(tANI_U32);
807 configDataValue = (tANI_U32 *)(tlvStruct + 1);
808 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
809 configDataValue ) != eSIR_SUCCESS)
810 {
811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
812 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
813 goto handle_failure;
814 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700815 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
816 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700817 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
818 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
819 tlvStruct->length = sizeof(tANI_U32);
820 configDataValue = (tANI_U32 *)(tlvStruct + 1);
821 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
822 configDataValue ) != eSIR_SUCCESS)
823 {
824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
825 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
826 goto handle_failure;
827 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700828 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
829 + sizeof(tHalCfg) + tlvStruct->length));
830
831 /* QWLAN_HAL_CFG_FIXED_RATE */
832 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
833 tlvStruct->length = sizeof(tANI_U32);
834 configDataValue = (tANI_U32 *)(tlvStruct + 1);
835 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
836 != eSIR_SUCCESS)
837 {
838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
839 "Failed to get value for WNI_CFG_FIXED_RATE");
840 goto handle_failure;
841 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700842 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
843 + sizeof(tHalCfg) + tlvStruct->length));
844
845 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
846 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
847 tlvStruct->length = sizeof(tANI_U32);
848 configDataValue = (tANI_U32 *)(tlvStruct + 1);
849 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
850 != eSIR_SUCCESS)
851 {
852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
853 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
854 goto handle_failure;
855 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700856 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
857 + sizeof(tHalCfg) + tlvStruct->length));
858
859 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
860 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
861 tlvStruct->length = sizeof(tANI_U32);
862 configDataValue = (tANI_U32 *)(tlvStruct + 1);
863 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
864 configDataValue ) != eSIR_SUCCESS)
865 {
866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
867 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
868 goto handle_failure;
869 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700870 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
871 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700872 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
873 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
874 tlvStruct->length = sizeof(tANI_U32);
875 configDataValue = (tANI_U32 *)(tlvStruct + 1);
876 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
877 configDataValue ) != eSIR_SUCCESS)
878 {
879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
880 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
881 goto handle_failure;
882 }
883 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
884 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700885 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
886 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
887 tlvStruct->length = sizeof(tANI_U32);
888 configDataValue = (tANI_U32 *)(tlvStruct + 1);
889 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
890 configDataValue ) != eSIR_SUCCESS)
891 {
892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
893 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
894 goto handle_failure;
895 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700896 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
897 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700898 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
899 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
900 tlvStruct->length = sizeof(tANI_U32);
901 configDataValue = (tANI_U32 *)(tlvStruct + 1);
902 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
903 configDataValue ) != eSIR_SUCCESS)
904 {
905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
906 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
907 goto handle_failure;
908 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700909 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
910 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700911 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
912 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
913 tlvStruct->length = sizeof(tANI_U32);
914 configDataValue = (tANI_U32 *)(tlvStruct + 1);
915 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
916 configDataValue ) != eSIR_SUCCESS)
917 {
918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
919 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
920 goto handle_failure;
921 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700922 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
923 + sizeof(tHalCfg) + tlvStruct->length);
924
Jeff Johnson295189b2012-06-20 16:38:30 -0700925 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
926 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
927 tlvStruct->length = sizeof(tANI_U32);
928 configDataValue = (tANI_U32 *)(tlvStruct + 1);
929 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
930 configDataValue ) != eSIR_SUCCESS)
931 {
932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
933 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
934 goto handle_failure;
935 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700936 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
937 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700938 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
939 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
940 tlvStruct->length = sizeof(tANI_U32);
941 configDataValue = (tANI_U32 *)(tlvStruct + 1);
942 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
943 configDataValue ) != eSIR_SUCCESS)
944 {
945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
946 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
947 goto handle_failure;
948 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700949 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
950 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700951 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
952 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
953 tlvStruct->length = sizeof(tANI_U32);
954 configDataValue = (tANI_U32 *)(tlvStruct + 1);
955 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
956 eSIR_SUCCESS)
957 {
958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
959 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
960 goto handle_failure;
961 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700962 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
963 + sizeof(tHalCfg) + tlvStruct->length);
964
965 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
966 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
967 tlvStruct->length = sizeof(tANI_U32);
968 configDataValue = (tANI_U32 *)(tlvStruct + 1);
969 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
970 configDataValue ) != eSIR_SUCCESS)
971 {
972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
973 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
974 goto handle_failure;
975 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700976 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
977 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700978 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
979 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
980 tlvStruct->length = sizeof(tANI_U32);
981 configDataValue = (tANI_U32 *)(tlvStruct + 1);
982 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
983 configDataValue ) != eSIR_SUCCESS)
984 {
985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
986 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
987 goto handle_failure;
988 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700989 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
990 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700991 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
992 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
993 tlvStruct->length = sizeof(tANI_U32);
994 configDataValue = (tANI_U32 *)(tlvStruct + 1);
995 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
996 configDataValue ) != eSIR_SUCCESS)
997 {
998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
999 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
1000 goto handle_failure;
1001 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001002 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1003 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001004 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
1005 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
1006 tlvStruct->length = sizeof(tANI_U32);
1007 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1008 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
1009 configDataValue ) != eSIR_SUCCESS)
1010 {
1011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1012 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
1013 goto handle_failure;
1014 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001015 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1016 + sizeof(tHalCfg) + tlvStruct->length);
1017
1018 /* QWLAN_HAL_CFG_STATS_PERIOD */
1019 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
1020 tlvStruct->length = sizeof(tANI_U32);
1021 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1022 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
1023 eSIR_SUCCESS)
1024 {
1025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1026 "Failed to get value for WNI_CFG_STATS_PERIOD");
1027 goto handle_failure;
1028 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001029 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1030 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001031 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
1032 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
1033 tlvStruct->length = sizeof(tANI_U32);
1034 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1035 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
1036 eSIR_SUCCESS)
1037 {
1038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1039 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
1040 goto handle_failure;
1041 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001042 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1043 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001044 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1045 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1046 tlvStruct->length = sizeof(tANI_U32);
1047 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1048 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1049 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001050 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1051 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001052 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1053 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1054 tlvStruct->length = sizeof(tANI_U32);
1055 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1056 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1057 != eSIR_SUCCESS)
1058 {
1059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1060 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1061 goto handle_failure;
1062 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001063 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1064 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001065 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1066 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1067 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1068 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1069 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1070 &strLength) != eSIR_SUCCESS)
1071 {
1072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1073 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1074 goto handle_failure;
1075 }
1076 tlvStruct->length = strLength;
1077 /* calculate the pad bytes to have the CFG in aligned format */
1078 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1079 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001080 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1081 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001082 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1083 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1084 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1085 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1086 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1087 &strLength) != eSIR_SUCCESS)
1088 {
1089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1090 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1091 goto handle_failure;
1092 }
1093 tlvStruct->length = strLength;
1094 /* calculate the pad bytes to have the CFG in aligned format */
1095 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1096 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001097 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1098 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001099 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1100 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1101 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1102 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1103 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1104 &strLength) != eSIR_SUCCESS)
1105 {
1106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1107 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1108 goto handle_failure;
1109 }
1110 tlvStruct->length = strLength;
1111 /* calculate the pad bytes to have the CFG in aligned format */
1112 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1113 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001114 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1115 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001116 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1117 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1118 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1119 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1120 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1121 &strLength) != eSIR_SUCCESS)
1122 {
1123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1124 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1125 goto handle_failure;
1126 }
1127 tlvStruct->length = strLength;
1128 /* calculate the pad bytes to have the CFG in aligned format */
1129 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1130 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001131 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1132 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001133 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1134 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1135 tlvStruct->length = sizeof(tANI_U32);
1136 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1137 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1138 != eSIR_SUCCESS)
1139 {
1140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1141 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1142 goto handle_failure;
1143 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001144 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1145 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001146 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1147 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1148 tlvStruct->length = sizeof(tANI_U32);
1149 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1150 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1151 != eSIR_SUCCESS)
1152 {
1153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1154 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1155 goto handle_failure;
1156 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001157 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1158 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001159 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1160 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1161 tlvStruct->length = sizeof(tANI_U32);
1162 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1163 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1164 != eSIR_SUCCESS)
1165 {
1166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1167 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1168 goto handle_failure;
1169 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001170 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1171 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001172 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1173 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1174 tlvStruct->length = sizeof(tANI_U32);
1175 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1176 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1177 != eSIR_SUCCESS)
1178 {
1179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1180 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1181 goto handle_failure;
1182 }
1183 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1184 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001185 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1186 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1187 tlvStruct->length = sizeof(tANI_U32);
1188 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1189 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1190 != eSIR_SUCCESS)
1191 {
1192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1193 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1194 goto handle_failure;
1195 }
1196 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1197 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001198 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1199 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1200 tlvStruct->length = sizeof(tANI_U32);
1201 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1202 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1203 != eSIR_SUCCESS)
1204 {
1205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1206 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1207 goto handle_failure;
1208 }
1209 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1210 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001211 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1212 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1213 tlvStruct->length = sizeof(tANI_U32);
1214 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1215 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1216 != eSIR_SUCCESS)
1217 {
1218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1219 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1220 goto handle_failure;
1221 }
1222 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1223 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001224 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1225 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1226 tlvStruct->length = sizeof(tANI_U32);
1227 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1228 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1229 != eSIR_SUCCESS)
1230 {
1231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1232 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1233 goto handle_failure;
1234 }
1235 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1236 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001237 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1238 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1239 tlvStruct->length = sizeof(tANI_U32);
1240 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1241 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1242 != eSIR_SUCCESS)
1243 {
1244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1245 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1246 goto handle_failure;
1247 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001248 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1249 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001250 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1251 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1252 tlvStruct->length = sizeof(tANI_U32);
1253 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1254 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1255 != eSIR_SUCCESS)
1256 {
1257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1258 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1259 goto handle_failure;
1260 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001261 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1262 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001263 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1264 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1265 tlvStruct->length = sizeof(tANI_U32);
1266 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1267 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1268 != eSIR_SUCCESS)
1269 {
1270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1271 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1272 goto handle_failure;
1273 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001274 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1275 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001276 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1277 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1278 * into FW, so the parameters are added here.
1279 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001280 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1281 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1282 tlvStruct->length = sizeof(tANI_U32);
1283 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1284 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1285 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1286 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001287 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1288 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1289 tlvStruct->length = sizeof(tANI_U32);
1290 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1291 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1292 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1293 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001294 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1295 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1296 tlvStruct->length = sizeof(tANI_U32);
1297 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1298 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1299 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1300 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001301 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1302 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1303 tlvStruct->length = sizeof(tANI_U32);
1304 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1305 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1306 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1307 + sizeof(tHalCfg) + tlvStruct->length) ;
1308
1309 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1310 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1311 tlvStruct->length = sizeof(tANI_U32);
1312 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1313 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1314 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1315 + sizeof(tHalCfg) + tlvStruct->length) ;
1316
1317 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1318 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1319 tlvStruct->length = sizeof(tANI_U32);
1320 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1321 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1322 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1323 + sizeof(tHalCfg) + tlvStruct->length) ;
1324
1325 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1326 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1327 tlvStruct->length = sizeof(tANI_U32);
1328 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1329 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1330 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1331 + sizeof(tHalCfg) + tlvStruct->length) ;
1332
1333 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1334 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1335 tlvStruct->length = sizeof(tANI_U32);
1336 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1337 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1338 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1339 + sizeof(tHalCfg) + tlvStruct->length) ;
1340
1341 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1342 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1343 tlvStruct->length = sizeof(tANI_U32);
1344 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1345 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1346 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1347 + sizeof(tHalCfg) + tlvStruct->length) ;
1348
1349 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1350 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1351 tlvStruct->length = sizeof(tANI_U32);
1352 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1353 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1354 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1355 + sizeof(tHalCfg) + tlvStruct->length) ;
1356
1357 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1358 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1359 tlvStruct->length = sizeof(tANI_U32);
1360 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1361 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1362 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1363 + sizeof(tHalCfg) + tlvStruct->length) ;
1364
1365 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1366 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1367 tlvStruct->length = sizeof(tANI_U32);
1368 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1369 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1370 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1371 + sizeof(tHalCfg) + tlvStruct->length) ;
1372
1373 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1374 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1375 tlvStruct->length = sizeof(tANI_U32);
1376 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1377 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1378 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1379 + sizeof(tHalCfg) + tlvStruct->length) ;
1380
1381 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1382 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1383 tlvStruct->length = sizeof(tANI_U32);
1384 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1385 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1386 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1387 + sizeof(tHalCfg) + tlvStruct->length) ;
1388
1389 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1390 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1391 tlvStruct->length = sizeof(tANI_U32);
1392 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1393 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1394 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1395 + sizeof(tHalCfg) + tlvStruct->length) ;
1396
1397 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1398 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1399 tlvStruct->length = sizeof(tANI_U32);
1400 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1401 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1402 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1403 + sizeof(tHalCfg) + tlvStruct->length) ;
1404
Wilson Tsaof8b37942013-09-06 10:49:00 -07001405 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM; i++)
1406 {
1407 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WAN_FREQ */
1408 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ + i*4;
1409 tlvStruct->length = sizeof(tANI_U32);
1410 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1411 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWANFreq[i];
1412 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1413 + sizeof(tHalCfg) + tlvStruct->length) ;
1414
1415 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WLAN_FREQ */
1416 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ + i*4;
1417 tlvStruct->length = sizeof(tANI_U32);
1418 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1419 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWLANFreq[i];
1420 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1421 + sizeof(tHalCfg) + tlvStruct->length) ;
1422
1423 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG */
1424 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG + i*4;
1425 tlvStruct->length = sizeof(tANI_U32);
1426 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1427 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig[i];
1428 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1429 + sizeof(tHalCfg) + tlvStruct->length) ;
1430
1431 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG2 */
1432 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 + i*4;
1433 tlvStruct->length = sizeof(tANI_U32);
1434 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1435 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig2[i];
1436 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1437 + sizeof(tHalCfg) + tlvStruct->length) ;
1438 }
1439
1440 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF */
1441 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF ;
1442 tlvStruct->length = sizeof(tANI_U32);
1443 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1444 *configDataValue = pMac->btc.btcConfig.mwsCoexModemBackoff;
1445 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1446 + sizeof(tHalCfg) + tlvStruct->length) ;
1447
1448 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG; i++)
1449 {
1450 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_CONFIGX */
1451 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_CONFIG1 + i;
1452 tlvStruct->length = sizeof(tANI_U32);
1453 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1454 *configDataValue = pMac->btc.btcConfig.mwsCoexConfig[i];
1455 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1456 + sizeof(tHalCfg) + tlvStruct->length) ;
1457 }
1458
1459 /* [COEX] QWLAN_HAL_CFG_SAR_POWER_BACKOFF */
1460 tlvStruct->type = QWLAN_HAL_CFG_SAR_POWER_BACKOFF ;
1461 tlvStruct->length = sizeof(tANI_U32);
1462 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1463 *configDataValue = pMac->btc.btcConfig.SARPowerBackoff;
1464 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1465 + sizeof(tHalCfg) + tlvStruct->length) ;
1466
Jeff Johnson32d95a32012-09-10 13:15:23 -07001467 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001468 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1469 tlvStruct->length = sizeof(tANI_U32);
1470 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1471 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1472 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1473 wcnssCompiledApiVersion.minor,
1474 wcnssCompiledApiVersion.version,
1475 wcnssCompiledApiVersion.revision);
1476 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1477 + sizeof(tHalCfg) + tlvStruct->length) ;
1478
Jeff Johnsond13512a2012-07-17 11:42:19 -07001479 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1480 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1481 tlvStruct->length = sizeof(tANI_U32);
1482 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1483 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1484 configDataValue ) != eSIR_SUCCESS)
1485 {
1486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1487 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1488 goto handle_failure;
1489 }
1490
1491 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1492 + sizeof(tHalCfg) + tlvStruct->length) ;
1493 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1494 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1495 tlvStruct->length = sizeof(tANI_U32);
1496 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1497 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1498 configDataValue ) != eSIR_SUCCESS)
1499 {
1500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1501 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1502 goto handle_failure;
1503 }
1504
1505 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1506 + sizeof(tHalCfg) + tlvStruct->length) ;
1507
1508 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1509 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1510 tlvStruct->length = sizeof(tANI_U32);
1511 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1512 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1513 != eSIR_SUCCESS)
1514 {
1515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1516 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1517 goto handle_failure;
1518 }
1519
1520 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1521 + sizeof(tHalCfg) + tlvStruct->length) ;
1522
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001523 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1524 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1525 tlvStruct->length = sizeof(tANI_U32);
1526 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1527 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1528 != eSIR_SUCCESS)
1529 {
1530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1531 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1532 goto handle_failure;
1533 }
1534
1535 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1536 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001537#ifdef WLAN_SOFTAP_VSTA_FEATURE
1538 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1539 tlvStruct->length = sizeof(tANI_U32);
1540 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1541 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1542 != eSIR_SUCCESS)
1543 {
1544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1545 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1546 goto handle_failure;
1547 }
1548
1549 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1550 + sizeof(tHalCfg) + tlvStruct->length) ;
1551#endif
1552
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001553 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1554 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1555 tlvStruct->length = sizeof(tANI_U32);
1556 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1557
1558 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1559 != eSIR_SUCCESS)
1560 {
1561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1562 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1563 goto handle_failure;
1564 }
1565
1566 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1567 + sizeof(tHalCfg) + tlvStruct->length) ;
1568
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301569/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1570 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1571 tlvStruct->length = sizeof(tANI_U32);
1572 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1573 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1574 configDataValue ) != eSIR_SUCCESS)
1575 {
1576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1577 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1578 goto handle_failure;
1579 }
1580
1581 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1582 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301583#ifdef FEATURE_WLAN_TDLS
1584 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1585 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1586 tlvStruct->length = sizeof(tANI_U32);
1587 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1588 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1589 configDataValue ) != eSIR_SUCCESS)
1590 {
1591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1592 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1593 goto handle_failure;
1594 }
1595 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1596 + sizeof(tHalCfg) + tlvStruct->length) ;
1597
1598 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1599 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1600 tlvStruct->length = sizeof(tANI_U32);
1601 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1602 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1603 configDataValue ) != eSIR_SUCCESS)
1604 {
1605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1606 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1607 goto handle_failure;
1608 }
1609 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1610 + sizeof(tHalCfg) + tlvStruct->length) ;
1611 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1612 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1613 tlvStruct->length = sizeof(tANI_U32);
1614 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1615 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1616 configDataValue ) != eSIR_SUCCESS)
1617 {
1618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1619 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1620 goto handle_failure;
1621 }
1622 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1623 + sizeof(tHalCfg) + tlvStruct->length) ;
1624 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1625 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1626 tlvStruct->length = sizeof(tANI_U32);
1627 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1628 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1629 configDataValue ) != eSIR_SUCCESS)
1630 {
1631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1632 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1633 goto handle_failure;
1634 }
1635 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1636 + sizeof(tHalCfg) + tlvStruct->length) ;
Naresh Jayaramf73f3762014-02-04 16:13:20 +05301637 /* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */
1638 tlvStruct->type = QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE;
1639 tlvStruct->length = sizeof(tANI_U32);
1640 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1641 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_OFF_CHANNEL_ENABLED,
1642 configDataValue ) != eSIR_SUCCESS)
1643 {
1644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1645 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1646 goto handle_failure;
1647 }
1648 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1649 + sizeof(tHalCfg) + tlvStruct->length) ;
1650
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301651#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301652
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001653 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1654 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1655 tlvStruct->length = sizeof(tANI_U32);
1656 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1657 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1658 configDataValue ) != eSIR_SUCCESS)
1659 {
1660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1661 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1662 goto handle_failure;
1663 }
1664
1665 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1666 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001667
1668 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1669 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1670 tlvStruct->length = sizeof(tANI_U32);
1671 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1672 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1673 != eSIR_SUCCESS)
1674 {
1675 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1676 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1677 goto handle_failure;
1678 }
1679 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1680 + sizeof(tHalCfg) + tlvStruct->length));
1681
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301682 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1683 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1684 tlvStruct->length = sizeof(tANI_U32);
1685 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1686 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1687 configDataValue ) != eSIR_SUCCESS)
1688 {
1689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1690 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1691 goto handle_failure;
1692 }
1693
1694 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1695 + sizeof(tHalCfg) + tlvStruct->length) ;
1696
Madan Mohan Koyyalamudi2558bc92013-08-24 16:54:31 +05301697 /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
1698 tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
1699 tlvStruct->length = sizeof(tANI_U32);
1700 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1701 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
1702 configDataValue ) != eSIR_SUCCESS)
1703 {
1704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1705 "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
1706 goto handle_failure;
1707 }
1708 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1709 + sizeof(tHalCfg) + tlvStruct->length) ;
1710
Kiet Lam4bbd3cb2013-11-07 20:03:49 +05301711 /* QWLAN_HAL_CFG_ATH_DISABLE */
1712 tlvStruct->type = QWLAN_HAL_CFG_ATH_DISABLE ;
1713 tlvStruct->length = sizeof(tANI_U32);
1714 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1715 if(wlan_cfgGetInt(pMac, WNI_CFG_ATH_DISABLE,
1716 configDataValue ) != eSIR_SUCCESS)
1717 {
1718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1719 "Failed to get value for WNI_CFG_ATH_DISABLE");
1720 goto handle_failure;
1721 }
1722 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1723 + sizeof(tHalCfg) + tlvStruct->length) ;
1724
c_hpothu6d7dc922013-12-02 12:36:41 +05301725 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_WLAN_LEN */
1726 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1727 tlvStruct->length = sizeof(tANI_U32);
1728 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1729 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_WLAN_LEN,
1730 configDataValue ) != eSIR_SUCCESS)
1731 {
1732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1733 "Failed to get value for WNI_CFG_BTC_ACTIVE_WLAN_LEN");
1734 goto handle_failure;
1735 }
1736 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1737 + sizeof(tHalCfg) + tlvStruct->length) ;
1738
1739 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1740 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1741 tlvStruct->length = sizeof(tANI_U32);
1742 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1743 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_BT_LEN,
1744 configDataValue ) != eSIR_SUCCESS)
1745 {
1746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1747 "Failed to get value for WNI_CFG_BTC_ACTIVE_BT_LEN");
1748 goto handle_failure;
1749 }
1750 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1751 + sizeof(tHalCfg) + tlvStruct->length) ;
1752
1753 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN */
1754 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1755 tlvStruct->length = sizeof(tANI_U32);
1756 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1757 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN,
1758 configDataValue ) != eSIR_SUCCESS)
1759 {
1760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1761 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN");
1762 goto handle_failure;
1763 }
1764 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1765 + sizeof(tHalCfg) + tlvStruct->length) ;
1766
1767 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1768 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1769 tlvStruct->length = sizeof(tANI_U32);
1770 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1771 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_BT_LEN,
1772 configDataValue ) != eSIR_SUCCESS)
1773 {
1774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1775 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_BT_LEN");
1776 goto handle_failure;
1777 }
1778 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1779 + sizeof(tHalCfg) + tlvStruct->length) ;
1780
AnjaneeDevi Kapparapu50239e32014-01-07 18:09:33 +05301781 /* QWLAN_HAL_CFG_ASD_PROBE_INTERVAL */
1782 tlvStruct->type = QWLAN_HAL_CFG_ASD_PROBE_INTERVAL ;
1783 tlvStruct->length = sizeof(tANI_U32);
1784 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1785 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_PROBE_INTERVAL,
1786 configDataValue ) != eSIR_SUCCESS)
1787 {
1788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1789 "Failed to get value for WNI_CFG_ASD_PROBE_INTERVAL");
1790 goto handle_failure;
1791 }
1792 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1793 + sizeof(tHalCfg) + tlvStruct->length) ;
1794
1795 /* QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD */
1796 tlvStruct->type = QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD ;
1797 tlvStruct->length = sizeof(tANI_U32);
1798 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1799 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_TRIGGER_THRESHOLD,
1800 configDataValue ) != eSIR_SUCCESS)
1801 {
1802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1803 "Failed to get value for WNI_CFG_ASD_TRIGGER_THRESHOLD");
1804 goto handle_failure;
1805 }
1806 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1807 + sizeof(tHalCfg) + tlvStruct->length) ;
1808
1809 /* QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD */
1810 tlvStruct->type = QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD ;
1811 tlvStruct->length = sizeof(tANI_U32);
1812 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1813 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD,
1814 configDataValue ) != eSIR_SUCCESS)
1815 {
1816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1817 "Failed to get value for WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD");
1818 goto handle_failure;
1819 }
1820 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1821 + sizeof(tHalCfg) + tlvStruct->length) ;
1822
Leela Venkata Kiran Kumar Reddy Chirala22c159b2013-12-23 18:19:13 -08001823 /* QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO */
1824 tlvStruct->type = QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO ;
1825 tlvStruct->length = sizeof(tANI_U32);
1826 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1827 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CTS2S_DURING_SCO,
1828 configDataValue ) != eSIR_SUCCESS)
1829 {
1830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1831 "Failed to get value for WNI_CFG_BTC_CTS2S_DURING_SCO");
1832 goto handle_failure;
1833 }
1834 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1835 + sizeof(tHalCfg) + tlvStruct->length) ;
1836
c_hpothu5bd1ae42014-03-07 20:28:22 +05301837 /* QWLAN_HAL_CFG_RA_FILTER_ENABLE */
1838 tlvStruct->type = QWLAN_HAL_CFG_RA_FILTER_ENABLE ;
1839 tlvStruct->length = sizeof(tANI_U32);
1840 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1841
1842 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_FILTER_ENABLE,
1843 configDataValue ) != eSIR_SUCCESS)
1844 {
1845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1846 "Failed to get value for WNI_CFG_RA_FILTER_ENABLE");
1847 goto handle_failure;
1848 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05301849 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1850 + sizeof(tHalCfg) + tlvStruct->length) ;
1851
1852 /* QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL */
1853 tlvStruct->type = QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL ;
1854 tlvStruct->length = sizeof(tANI_U32);
1855 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1856
1857 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_RATE_LIMIT_INTERVAL,
1858 configDataValue ) != eSIR_SUCCESS)
1859 {
1860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1861 "Failed to get value for WNI_CFG_RA_RATE_LIMIT_INTERVAL");
1862 goto handle_failure;
1863 }
c_hpothu2d0f1c42014-04-01 18:38:51 +05301864 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1865 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu5bd1ae42014-03-07 20:28:22 +05301866
c_hpothu2d0f1c42014-04-01 18:38:51 +05301867 /* QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE */
1868 tlvStruct->type = QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE ;
1869 tlvStruct->length = sizeof(tANI_U32);
1870 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1871
1872 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE,
1873 configDataValue ) != eSIR_SUCCESS)
1874 {
1875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1876 "Failed to get value for WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE");
1877 goto handle_failure;
1878 }
1879 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1880 + sizeof(tHalCfg) + tlvStruct->length) ;
1881
1882 /* QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE */
1883 tlvStruct->type = QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE ;
1884 tlvStruct->length = sizeof(tANI_U32);
1885 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1886
1887 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE,
1888 configDataValue ) != eSIR_SUCCESS)
1889 {
1890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1891 "Failed to get value for WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE");
1892 goto handle_failure;
1893 }
1894 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1895 + sizeof(tHalCfg) + tlvStruct->length) ;
1896
1897 /* QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD */
1898 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD ;
1899 tlvStruct->length = sizeof(tANI_U32);
1900 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1901
1902 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD,
1903 configDataValue ) != eSIR_SUCCESS)
1904 {
1905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1906 "Failed to get value for WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD");
1907 goto handle_failure;
1908 }
1909 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1910 + sizeof(tHalCfg) + tlvStruct->length) ;
1911
1912 /* QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD */
1913 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD ;
1914 tlvStruct->length = sizeof(tANI_U32);
1915 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1916
1917 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD,
1918 configDataValue ) != eSIR_SUCCESS)
1919 {
1920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1921 "Failed to get value for WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD");
1922 goto handle_failure;
1923 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05301924 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1925 + sizeof(tHalCfg) + tlvStruct->length) ;
1926
Mihir Shetec34258c2014-07-30 17:50:27 +05301927 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP */
1928 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP ;
1929 tlvStruct->length = sizeof(tANI_U32);
1930 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1931
1932 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_SP,
1933 configDataValue ) != eSIR_SUCCESS)
1934 {
1935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1936 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_SP");
1937 goto handle_failure;
1938 }
1939 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1940 + sizeof(tHalCfg) + tlvStruct->length) ;
1941
1942 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT */
1943 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT ;
1944 tlvStruct->length = sizeof(tANI_U32);
1945 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1946
1947 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT,
1948 configDataValue ) != eSIR_SUCCESS)
1949 {
1950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1951 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT");
1952 goto handle_failure;
1953 }
1954 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1955 + sizeof(tHalCfg) + tlvStruct->length) ;
1956
1957 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT */
1958 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT ;
1959 tlvStruct->length = sizeof(tANI_U32);
1960 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1961
1962 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT,
1963 configDataValue ) != eSIR_SUCCESS)
1964 {
1965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1966 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT");
1967 goto handle_failure;
1968 }
1969 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1970 + sizeof(tHalCfg) + tlvStruct->length) ;
1971
1972 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW */
1973 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW ;
1974 tlvStruct->length = sizeof(tANI_U32);
1975 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1976
1977 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW,
1978 configDataValue ) != eSIR_SUCCESS)
1979 {
1980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1981 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW");
1982 goto handle_failure;
1983 }
1984 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1985 + sizeof(tHalCfg) + tlvStruct->length) ;
1986
1987 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW */
1988 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW ;
1989 tlvStruct->length = sizeof(tANI_U32);
1990 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1991
1992 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW,
1993 configDataValue ) != eSIR_SUCCESS)
1994 {
1995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1996 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW");
1997 goto handle_failure;
1998 }
1999 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2000 + sizeof(tHalCfg) + tlvStruct->length) ;
2001
2002 /* QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE */
2003 tlvStruct->type = QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE ;
2004 tlvStruct->length = sizeof(tANI_U32);
2005 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2006
2007 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE,
2008 configDataValue ) != eSIR_SUCCESS)
2009 {
2010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2011 "Failed to get value for WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE");
2012 goto handle_failure;
2013 }
2014 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2015 + sizeof(tHalCfg) + tlvStruct->length) ;
2016
2017 /* QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS */
2018 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS ;
2019 tlvStruct->length = sizeof(tANI_U32);
2020 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2021
2022 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS,
2023 configDataValue ) != eSIR_SUCCESS)
2024 {
2025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2026 "Failed to get value for WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS");
2027 goto handle_failure;
2028 }
2029 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2030 + sizeof(tHalCfg) + tlvStruct->length) ;
2031
2032 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS */
2033 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS ;
2034 tlvStruct->length = sizeof(tANI_U32);
2035 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2036
2037 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_WMMPS,
2038 configDataValue ) != eSIR_SUCCESS)
2039 {
2040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2041 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_WMMPS");
2042 goto handle_failure;
2043 }
2044 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2045 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu03d961b2014-09-19 16:45:00 +05302046
2047 /* QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE */
2048 tlvStruct->type = QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE ;
2049 tlvStruct->length = sizeof(tANI_U32);
2050 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2051
2052 if (wlan_cfgGetInt(pMac, WNI_CFG_BURST_MODE_BE_TXOP_VALUE,
2053 configDataValue ) != eSIR_SUCCESS)
2054 {
2055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2056 "Failed to get value for WNI_CFG_BURST_MODE_BE_TXOP_VALUE");
2057 goto handle_failure;
2058 }
2059 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2060 + sizeof(tHalCfg) + tlvStruct->length) ;
2061
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302062 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE */
2063 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE ;
2064 tlvStruct->length = sizeof(tANI_U32);
2065 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2066
2067 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE,
2068 configDataValue ) != eSIR_SUCCESS)
2069 {
2070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2071 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE");
2072 goto handle_failure;
2073 }
2074 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2075 + sizeof(tHalCfg) + tlvStruct->length) ;
2076
2077
Jeff Johnson295189b2012-06-20 16:38:30 -07002078 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002079#ifdef WLAN_DEBUG
2080 {
2081 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07002082 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2083 "****** Dumping CFG TLV ***** ");
2084 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
2085 {
2086 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2087 "%02x %02x %02x %02x %02x %02x %02x %02x",
2088 tlvStructStart[i],
2089 tlvStructStart[i+1],
2090 tlvStructStart[i+2],
2091 tlvStructStart[i+3],
2092 tlvStructStart[i+4],
2093 tlvStructStart[i+5],
2094 tlvStructStart[i+6],
2095 tlvStructStart[i+7]);
2096 }
2097 /* Dump the bytes in the last line*/
2098 for (; i < wdiStartParams->usConfigBufferLen; i++)
2099 {
2100 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2101 "%02x ",tlvStructStart[i]);
2102 }
2103 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2104 "**************************** ");
2105 }
2106#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002107 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002108handle_failure:
2109 vos_mem_free(configParam);
2110 return VOS_STATUS_E_FAILURE;
2111}
Jeff Johnson295189b2012-06-20 16:38:30 -07002112/*
2113 * FUNCTION: WDA_wdiCompleteCB
2114 * call the voss call back function
2115 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002116void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07002117{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002118 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2119 tWDA_CbContext *wdaContext;
2120
2121 if(NULL == pWdaParams)
2122 {
2123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002124 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002125 VOS_ASSERT(0) ;
2126 return ;
2127 }
2128
2129 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
2130
Jeff Johnson295189b2012-06-20 16:38:30 -07002131 if (NULL == wdaContext)
2132 {
2133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002134 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002135 return ;
2136 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002137
Jeff Johnson295189b2012-06-20 16:38:30 -07002138 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002139 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07002140 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002141 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002142 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002143 vos_mem_free(pWdaParams);
2144
Jeff Johnson295189b2012-06-20 16:38:30 -07002145 if(WDI_STATUS_SUCCESS != status)
2146 {
2147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2148 "WDI stop callback returned failure" );
2149 VOS_ASSERT(0) ;
2150 }
2151 else
2152 {
2153 wdaContext->wdaState = WDA_STOP_STATE;
2154 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002155
Leo Chang9d76f622013-08-23 16:34:52 -07002156 /* FTM Driver stop procedure should be synced.
2157 * Stop and Close will happen on same context */
2158 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
2159 {
2160 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
2161 {
2162 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2163 "%s: FTM Stop Event Set Fail", __func__);
2164 VOS_ASSERT(0);
2165 }
2166 }
2167
Jeff Johnson295189b2012-06-20 16:38:30 -07002168 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002169 vos_WDAComplete_cback(wdaContext->pVosContext);
2170
Jeff Johnson295189b2012-06-20 16:38:30 -07002171 return ;
2172}
Jeff Johnson295189b2012-06-20 16:38:30 -07002173/*
2174 * FUNCTION: WDA_stop
2175 * call WDI_stop
2176 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002177VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
2178{
2179 WDI_Status wdiStatus;
2180 VOS_STATUS status = VOS_STATUS_SUCCESS;
2181 WDI_StopReqParamsType *wdiStopReq;
2182 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002183 tWDA_ReqParams *pWdaParams ;
2184
Jeff Johnson295189b2012-06-20 16:38:30 -07002185 if (NULL == pWDA)
2186 {
2187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002188 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002189 VOS_ASSERT(0);
2190 return VOS_STATUS_E_FAILURE;
2191 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002192 if (pWDA->wdiFailed == true)
2193 {
2194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002195 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002196 return VOS_STATUS_E_ALREADY;
2197 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002198
Jeff Johnson295189b2012-06-20 16:38:30 -07002199 /* FTM mode stay START_STATE */
2200 if( (WDA_READY_STATE != pWDA->wdaState) &&
2201 (WDA_INIT_STATE != pWDA->wdaState) &&
2202 (WDA_START_STATE != pWDA->wdaState) )
2203 {
2204 VOS_ASSERT(0);
2205 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002206 wdiStopReq = (WDI_StopReqParamsType *)
2207 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
2208 if(NULL == wdiStopReq)
2209 {
2210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002211 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002212 VOS_ASSERT(0);
2213 return VOS_STATUS_E_NOMEM;
2214 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002215
Jeff Johnson295189b2012-06-20 16:38:30 -07002216 wdiStopReq->wdiStopReason = reason;
2217 wdiStopReq->wdiReqStatusCB = NULL;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302218
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002219 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2220 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07002221 {
2222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002223 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002224 VOS_ASSERT(0);
2225 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002226 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07002227 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002228
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002229 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
2230 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07002231 {
2232 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002233 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002234 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002235
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002236 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
2237 pWdaParams->wdaMsgParam = NULL;
2238 pWdaParams->pWdaContext = pWDA;
2239
Jeff Johnson295189b2012-06-20 16:38:30 -07002240 /* call WDI stop */
2241 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002242 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
2243
Jeff Johnson295189b2012-06-20 16:38:30 -07002244 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
2245 {
2246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2247 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002248 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2249 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002250 status = VOS_STATUS_E_FAILURE;
2251 }
Leo Chang9d76f622013-08-23 16:34:52 -07002252
2253 /* FTM Driver stop procedure should be synced.
2254 * Stop and Close will happen on same context */
2255 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
2256 {
2257 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
2258 WDI_RESPONSE_TIMEOUT);
2259 if (status != VOS_STATUS_SUCCESS)
2260 {
2261 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2262 "%s: FTM Stop Timepoout", __func__);
2263 VOS_ASSERT(0);
Leo Chang9d76f622013-08-23 16:34:52 -07002264 }
c_hpothu0d36bc42014-07-03 17:43:45 +05302265 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Leo Chang9d76f622013-08-23 16:34:52 -07002266 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002267 return status;
2268}
Jeff Johnson295189b2012-06-20 16:38:30 -07002269/*
2270 * FUNCTION: WDA_close
2271 * call WDI_close and free the WDA context
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302272 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002273VOS_STATUS WDA_close(v_PVOID_t pVosContext)
2274{
Jeff Johnson43971f52012-07-17 12:26:56 -07002275 VOS_STATUS status = VOS_STATUS_SUCCESS;
2276 WDI_Status wstatus;
2277 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002278 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002279 if (NULL == wdaContext)
2280 {
2281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002282 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002283 return VOS_STATUS_E_FAILURE;
2284 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002285 if((WDA_INIT_STATE != wdaContext->wdaState) &&
2286 (WDA_STOP_STATE != wdaContext->wdaState))
2287 {
2288 VOS_ASSERT(0);
2289 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002290 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07002291 wstatus = WDI_Close();
2292 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07002293 {
2294 status = VOS_STATUS_E_FAILURE;
2295 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002296 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002297 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07002298 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
2299 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002300 {
2301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002302 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002303 status = VOS_STATUS_E_FAILURE;
2304 }
2305
Jeff Johnson43971f52012-07-17 12:26:56 -07002306 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002307 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002308 {
2309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002310 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002311 status = VOS_STATUS_E_FAILURE;
2312 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002313 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002314 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002315 {
2316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002317 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002318 status = VOS_STATUS_E_FAILURE;
2319 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002320 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07002321 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002322 {
2323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002324 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002325 status = VOS_STATUS_E_FAILURE;
2326 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002327 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07002328 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07002329 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07002330 {
2331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2332 "error in WDA close " );
2333 status = VOS_STATUS_E_FAILURE;
2334 }
2335 return status;
2336}
Jeff Johnson295189b2012-06-20 16:38:30 -07002337/*
2338 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
2339 * returns 1 if the compiled version is greater than or equal to the input version
2340 */
2341
2342uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2343{
2344 VOS_STATUS status = VOS_STATUS_SUCCESS;
2345 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2346 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002347 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002348 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
2349 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
2350 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
2351 (compiledVersion.revision >= revision)))
2352 return 1;
2353 else
2354 return 0;
2355}
Jeff Johnson295189b2012-06-20 16:38:30 -07002356/*
2357 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
2358 * returns 1 if the compiled version is greater than or equal to the input version
2359 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002360uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2361{
2362 VOS_STATUS status = VOS_STATUS_SUCCESS;
2363 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2364 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002365 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002366 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
2367 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
2368 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
2369 (reportedVersion.revision >= revision)))
2370 return 1;
2371 else
2372 return 0;
2373}
Jeff Johnson295189b2012-06-20 16:38:30 -07002374/*
2375 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
2376 * Returns the version of the WCNSS WLAN API with which the HOST
2377 * device driver was compiled
2378 */
2379VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
2380 tSirVersionType *pVersion)
2381{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302382 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002383 if ((NULL == pvosGCtx) || (NULL == pVersion))
2384 {
2385 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002386 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002387 VOS_ASSERT(0);
2388 return VOS_STATUS_E_FAILURE;
2389 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002390 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2391 if (NULL == pWDA )
2392 {
2393 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002394 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002395 VOS_ASSERT(0);
2396 return VOS_STATUS_E_FAILURE;
2397 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002398 *pVersion = pWDA->wcnssWlanCompiledVersion;
2399 return VOS_STATUS_SUCCESS;
2400}
Jeff Johnson295189b2012-06-20 16:38:30 -07002401/*
2402 * FUNCTION: WDA_GetWcnssWlanReportedVersion
2403 * Returns the version of the WCNSS WLAN API with which the WCNSS
2404 * device driver was compiled
2405 */
2406VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
2407 tSirVersionType *pVersion)
2408{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302409 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002410 if ((NULL == pvosGCtx) || (NULL == pVersion))
2411 {
2412 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002413 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002414 VOS_ASSERT(0);
2415 return VOS_STATUS_E_FAILURE;
2416 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002417 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2418 if (NULL == pWDA )
2419 {
2420 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002421 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002422 VOS_ASSERT(0);
2423 return VOS_STATUS_E_FAILURE;
2424 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002425 *pVersion = pWDA->wcnssWlanReportedVersion;
2426 return VOS_STATUS_SUCCESS;
2427}
Jeff Johnson295189b2012-06-20 16:38:30 -07002428/*
2429 * FUNCTION: WDA_GetWcnssSoftwareVersion
2430 * Returns the WCNSS Software version string
2431 */
2432VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
2433 tANI_U8 *pVersion,
2434 tANI_U32 versionBufferSize)
2435{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302436 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002437 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002438 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002439 if ((NULL == pvosGCtx) || (NULL == pVersion))
2440 {
2441 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002442 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002443 VOS_ASSERT(0);
2444 return VOS_STATUS_E_FAILURE;
2445 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002446 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2447 if (NULL == pWDA )
2448 {
2449 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002450 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002451 VOS_ASSERT(0);
2452 return VOS_STATUS_E_FAILURE;
2453 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002454 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
2455 return VOS_STATUS_SUCCESS;
2456}
Jeff Johnson295189b2012-06-20 16:38:30 -07002457/*
2458 * FUNCTION: WDA_GetWcnssHardwareVersion
2459 * Returns the WCNSS Hardware version string
2460 */
2461VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
2462 tANI_U8 *pVersion,
2463 tANI_U32 versionBufferSize)
2464{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302465 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002466 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002467 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002468 if ((NULL == pvosGCtx) || (NULL == pVersion))
2469 {
2470 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002471 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002472 VOS_ASSERT(0);
2473 return VOS_STATUS_E_FAILURE;
2474 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002475 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2476 if (NULL == pWDA )
2477 {
2478 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002479 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002480 VOS_ASSERT(0);
2481 return VOS_STATUS_E_FAILURE;
2482 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002483 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
2484 return VOS_STATUS_SUCCESS;
2485}
Jeff Johnson295189b2012-06-20 16:38:30 -07002486/*
2487 * FUNCTION: WDA_WniCfgDnld
2488 * Trigger CFG Download
2489 */
2490VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
2491{
2492 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302493 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnsonab81a082013-04-03 16:00:31 -07002494
Jeff Johnson295189b2012-06-20 16:38:30 -07002495 if (NULL == pMac )
2496 {
2497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002498 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002499 VOS_ASSERT(0);
2500 return VOS_STATUS_E_FAILURE;
2501 }
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302502 processCfgDownloadReq(pMac);
Jeff Johnson295189b2012-06-20 16:38:30 -07002503 return vosStatus;
2504}
Jeff Johnson295189b2012-06-20 16:38:30 -07002505/* -----------------------------------------------------------------
2506 * WDI interface
2507 * -----------------------------------------------------------------
2508 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002509/*
2510 * FUNCTION: WDA_suspendDataTxCallback
2511 * call back function called from TL after suspend Transmission
2512 */
2513VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2514 v_U8_t* ucSTAId,
2515 VOS_STATUS vosStatus)
2516{
2517 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002519 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002520 if (NULL == pWDA )
2521 {
2522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002523 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002524 VOS_ASSERT(0);
2525 return VOS_STATUS_E_FAILURE;
2526 }
2527 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2528 {
2529 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2530 }
2531 else
2532 {
2533 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2534 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002535 /* Trigger the event to bring the WDA TL suspend function to come
2536 * out of wait*/
2537 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2538 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2539 {
2540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002541 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002542 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002543 /* If TL suspended had timedout before this callback was called, resume back
2544 * TL.*/
2545 if (pWDA->txSuspendTimedOut)
2546 {
2547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002548 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07002549 WDA_ResumeDataTx(pWDA);
2550 pWDA->txSuspendTimedOut = FALSE;
2551 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002552 return VOS_STATUS_SUCCESS;
2553}
Jeff Johnson295189b2012-06-20 16:38:30 -07002554/*
2555 * FUNCTION: WDA_suspendDataTx
2556 * Update TL to suspend the data Transmission
2557 */
2558VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2559{
2560 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2561 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002562
2563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002564 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002565 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002566 if (pWDA->txSuspendTimedOut)
2567 {
2568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002569 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07002570 return status;
2571 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002572 /* Reset the event to be not signalled */
2573 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2574 if(!VOS_IS_STATUS_SUCCESS(status))
2575 {
2576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002577 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002578 return VOS_STATUS_E_FAILURE;
2579 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002580 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002581 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002582 WDA_SuspendDataTxCallback);
2583 if(status != VOS_STATUS_SUCCESS)
2584 {
2585 return status;
2586 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002587 /* Wait for the event to be set by the TL, to get the response of
2588 * suspending the TX queues, this event should be set by the Callback
2589 * function called by TL*/
2590 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2591 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2592 if(!VOS_IS_STATUS_SUCCESS(status))
2593 {
2594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2595 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002596 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002597 /* Set this flag to true when TL suspend times out, so that when TL
2598 * suspend eventually happens and calls the callback, TL can be resumed
2599 * right away by looking at this flag when true.*/
2600 pWDA->txSuspendTimedOut = TRUE;
2601 }
2602 else
2603 {
2604 pWDA->txSuspendTimedOut = FALSE;
2605 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002606 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2607 {
2608 status = VOS_STATUS_SUCCESS;
2609 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002610 return status;
2611}
Jeff Johnson295189b2012-06-20 16:38:30 -07002612/*
2613 * FUNCTION: WDA_resumeDataTx
2614 * Update TL to resume the data Transmission
2615 */
2616VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2617{
2618 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002619
2620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002621 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002622
2623 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002624 return status;
2625}
Jeff Johnson295189b2012-06-20 16:38:30 -07002626/*
2627 * FUNCTION: WDA_InitScanReqCallback
2628 * Trigger Init SCAN callback
2629 */
2630void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2631{
2632 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2633 tWDA_CbContext *pWDA;
2634 tInitScanParams *pWDA_ScanParam ;
2635 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002637 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002638 if(NULL == pWdaParams)
2639 {
2640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002641 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002642 VOS_ASSERT(0) ;
2643 return ;
2644 }
2645 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2646 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002647 if(NULL == pWDA_ScanParam)
2648 {
2649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002650 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002651 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002652 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2653 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002654 return ;
2655 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002656 if(WDI_STATUS_SUCCESS != wdiStatus)
2657 {
2658 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002659 if(VOS_STATUS_SUCCESS != status)
2660 {
2661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002662 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002663 }
2664 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002665 /* free WDI command buffer */
2666 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002667 vos_mem_free(pWdaParams) ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302668
2669
Jeff Johnson295189b2012-06-20 16:38:30 -07002670 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002671 /* without converting the Status to Failure or Success Just
2672 pass the same status to lim */
2673 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002674 /* send SCAN RSP message back to PE */
2675 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002676 return ;
2677}
2678
2679/*
2680 * FUNCTION: WDA_ProcessInitScanReq
2681 * Trigger Init SCAN in DAL
2682 */
2683VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2684 tInitScanParams *initScanParams)
2685{
2686 WDI_Status status = WDI_STATUS_SUCCESS ;
2687 WDI_InitScanReqParamsType *wdiInitScanParam =
2688 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2689 sizeof(WDI_InitScanReqParamsType)) ;
2690 tWDA_ReqParams *pWdaParams;
2691 tANI_U8 i = 0;
2692
2693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002694 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002695 if(NULL == wdiInitScanParam)
2696 {
2697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002698 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002699 VOS_ASSERT(0);
2700 return VOS_STATUS_E_NOMEM;
2701 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002702 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2703 if(NULL == pWdaParams)
2704 {
2705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002706 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002707 VOS_ASSERT(0);
2708 vos_mem_free(wdiInitScanParam);
2709 return VOS_STATUS_E_NOMEM;
2710 }
2711
2712 /* Copy init Scan params to WDI structure */
2713 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2714 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2715 sizeof(tSirMacAddr)) ;
2716 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2717 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2718 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002719 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2720 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07002721 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2722 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002723 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2724 {
2725 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2726 initScanParams->scanEntry.bssIdx[i] ;
2727 }
2728
2729 /* if Frame length, copy macMgmtHdr or WDI structure */
2730 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2731 {
2732 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2733 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2734 }
2735 wdiInitScanParam->wdiReqStatusCB = NULL ;
2736
Jeff Johnson295189b2012-06-20 16:38:30 -07002737 /* Store Init Req pointer, as this will be used for response */
2738 pWdaParams->pWdaContext = pWDA;
2739 pWdaParams->wdaMsgParam = initScanParams;
2740 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002741 /* first try to suspend TX */
2742 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002743 if(WDI_STATUS_SUCCESS != status)
2744 {
2745 goto handleWdiFailure;
2746 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002747 /* call DAL API to pass init scan request to DAL */
2748 status = WDI_InitScanReq(wdiInitScanParam,
2749 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002750 if(IS_WDI_STATUS_FAILURE(status))
2751 {
2752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2753 "error in WDA Init Scan, Resume Tx " );
2754 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002755 VOS_ASSERT(0) ;
2756
2757 goto handleWdiFailure;
2758 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002759 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002760handleWdiFailure:
2761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2762 "Failure in WDI Api, free all the memory " );
2763 /* free WDI command buffer */
2764 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2765 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002766 /* send Failure to PE */
2767 initScanParams->status = eSIR_FAILURE ;
2768 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002769 return CONVERT_WDI2VOS_STATUS(status) ;
2770}
2771
Jeff Johnson295189b2012-06-20 16:38:30 -07002772/*
2773 * FUNCTION: WDA_StartScanReqCallback
2774 * send Start SCAN RSP back to PE
2775 */
2776void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2777 void* pUserData)
2778{
2779 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2780 tWDA_CbContext *pWDA;
2781 tStartScanParams *pWDA_ScanParam;
2782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002783 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002784 if(NULL == pWdaParams)
2785 {
2786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002787 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002788 VOS_ASSERT(0) ;
2789 return ;
2790 }
2791 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2792 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002793 if(NULL == pWDA_ScanParam)
2794 {
2795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002796 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002797 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002798 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002799 return ;
2800 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002801 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2802 {
2803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002804 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002805 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002806 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002807 return ;
2808 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002809 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2810 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002811
Jeff Johnson295189b2012-06-20 16:38:30 -07002812
2813 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002814 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002815 /* send SCAN RSP message back to PE */
2816 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002817 return ;
2818}
2819
Jeff Johnson295189b2012-06-20 16:38:30 -07002820/*
2821 * FUNCTION: WDA_ProcessStartScanReq
2822 * Trigger start SCAN in WDI
2823 */
2824VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2825 tStartScanParams *startScanParams)
2826{
2827 WDI_Status status = WDI_STATUS_SUCCESS;
2828 WDI_StartScanReqParamsType *wdiStartScanParams =
2829 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2830 sizeof(WDI_StartScanReqParamsType)) ;
2831 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002833 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002834 if(NULL == wdiStartScanParams)
2835 {
2836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002837 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002838 VOS_ASSERT(0);
2839 return VOS_STATUS_E_NOMEM;
2840 }
2841 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2842 if(NULL == pWdaParams)
2843 {
2844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002845 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002846 VOS_ASSERT(0);
2847 vos_mem_free(wdiStartScanParams);
2848 return VOS_STATUS_E_NOMEM;
2849 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002850 /* Copy init Scan params to WDI structure */
2851 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2852 wdiStartScanParams->wdiReqStatusCB = NULL ;
2853
Jeff Johnson295189b2012-06-20 16:38:30 -07002854 /* Store Init Req pointer, as this will be used for response */
2855 /* store Params pass it to WDI */
2856 pWdaParams->pWdaContext = pWDA;
2857 pWdaParams->wdaMsgParam = startScanParams;
2858 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002859 /* call DAL API to pass init scan request to DAL */
2860 status = WDI_StartScanReq(wdiStartScanParams,
2861 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002862 /* failure returned by WDI API */
2863 if(IS_WDI_STATUS_FAILURE(status))
2864 {
2865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2866 "Failure in Start Scan WDI API, free all the memory "
2867 "It should be due to previous abort scan." );
2868 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2869 vos_mem_free(pWdaParams) ;
2870 startScanParams->status = eSIR_FAILURE ;
2871 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2872 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002873 return CONVERT_WDI2VOS_STATUS(status) ;
2874}
Jeff Johnson295189b2012-06-20 16:38:30 -07002875/*
2876 * FUNCTION: WDA_EndScanReqCallback
2877 * END SCAN callback
2878 */
2879void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2880{
2881 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2882 tWDA_CbContext *pWDA;
2883 tEndScanParams *endScanParam;
2884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002885 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002886 if(NULL == pWdaParams)
2887 {
2888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002889 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002890 VOS_ASSERT(0) ;
2891 return ;
2892 }
2893 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2894 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002895 if(NULL == endScanParam)
2896 {
2897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002898 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002899 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002900 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2901 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002902 return ;
2903 }
2904
2905 /* Free WDI command buffer */
2906 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2907 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002908 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002909 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002910 /* send response back to PE */
2911 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2912 return ;
2913}
2914
Jeff Johnson295189b2012-06-20 16:38:30 -07002915/*
2916 * FUNCTION: WDA_ProcessEndScanReq
2917 * Trigger END SCAN in WDI
2918 */
2919VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2920 tEndScanParams *endScanParams)
2921{
2922 WDI_Status status = WDI_STATUS_SUCCESS;
2923 WDI_EndScanReqParamsType *wdiEndScanParams =
2924 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2925 sizeof(WDI_EndScanReqParamsType)) ;
2926 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002928 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002929 if(NULL == wdiEndScanParams)
2930 {
2931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002932 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002933 VOS_ASSERT(0);
2934 return VOS_STATUS_E_NOMEM;
2935 }
2936 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2937 if(NULL == pWdaParams)
2938 {
2939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002940 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002941 VOS_ASSERT(0);
2942 vos_mem_free(wdiEndScanParams);
2943 return VOS_STATUS_E_NOMEM;
2944 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002945 /* Copy init Scan params to WDI structure */
2946 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2947 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002948 /* Store Init Req pointer, as this will be used for response */
2949 /* store Params pass it to WDI */
2950 pWdaParams->pWdaContext = pWDA;
2951 pWdaParams->wdaMsgParam = endScanParams;
2952 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002953 /* call DAL API to pass init scan request to DAL */
2954 status = WDI_EndScanReq(wdiEndScanParams,
2955 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002956 if(IS_WDI_STATUS_FAILURE(status))
2957 {
2958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2959 "Failure in End Scan WDI API, free all the memory "
2960 "It should be due to previous abort scan." );
2961 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2962 vos_mem_free(pWdaParams) ;
2963 endScanParams->status = eSIR_FAILURE ;
2964 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2965 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002966 return CONVERT_WDI2VOS_STATUS(status) ;
2967}
Jeff Johnson295189b2012-06-20 16:38:30 -07002968/*
2969 * FUNCTION: WDA_FinishScanReqCallback
2970 * Trigger Finish SCAN callback
2971 */
2972void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2973{
2974 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2975 tWDA_CbContext *pWDA;
2976 tFinishScanParams *finishScanParam;
2977 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002979 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002980 if(NULL == pWdaParams)
2981 {
2982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002983 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002984 VOS_ASSERT(0) ;
2985 return ;
2986 }
2987
2988 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2989 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002990 if(NULL == finishScanParam)
2991 {
2992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002993 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002994 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002995 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2996 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002997 return ;
2998 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002999 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3000 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003001 /*
3002 * Now Resume TX, if we reached here means, TX is already suspended, we
3003 * have to resume it unconditionaly
3004 */
3005 status = WDA_ResumeDataTx(pWDA) ;
3006
3007 if(VOS_STATUS_SUCCESS != status)
3008 {
3009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003010 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003011 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003012 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003013 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
3014 return ;
3015}
Jeff Johnson295189b2012-06-20 16:38:30 -07003016/*
3017 * FUNCTION: WDA_ProcessFinshScanReq
3018 * Trigger Finish SCAN in WDI
3019 */
3020VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
3021 tFinishScanParams *finishScanParams)
3022{
3023 WDI_Status status = WDI_STATUS_SUCCESS;
3024 WDI_FinishScanReqParamsType *wdiFinishScanParams =
3025 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
3026 sizeof(WDI_FinishScanReqParamsType)) ;
3027 tWDA_ReqParams *pWdaParams ;
3028 tANI_U8 i = 0;
3029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003030 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003031 if(NULL == wdiFinishScanParams)
3032 {
3033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003034 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003035 VOS_ASSERT(0);
3036 return VOS_STATUS_E_NOMEM;
3037 }
3038 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3039 if(NULL == pWdaParams)
3040 {
3041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003042 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003043 VOS_ASSERT(0);
3044 vos_mem_free(wdiFinishScanParams);
3045 return VOS_STATUS_E_NOMEM;
3046 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003047 /* Copy init Scan params to WDI structure */
3048 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
3049 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
3050 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003051 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
3052 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
3053 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
3054 finishScanParams->frameLength ;
3055 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
3056 finishScanParams->currentOperChannel ;
3057 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
3058 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
3059 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003060 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
3061 {
3062 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3063 finishScanParams->scanEntry.bssIdx[i] ;
3064 }
3065
3066
Jeff Johnson295189b2012-06-20 16:38:30 -07003067 /* if Frame length, copy macMgmtHdr ro WDI structure */
3068 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
3069 {
3070 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
3071 &finishScanParams->macMgmtHdr,
3072 sizeof(WDI_MacMgmtHdr)) ;
3073 }
3074 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003075 /* Store Init Req pointer, as this will be used for response */
3076 /* store Params pass it to WDI */
3077 pWdaParams->pWdaContext = pWDA;
3078 pWdaParams->wdaMsgParam = finishScanParams;
3079 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003080 /* call DAL API to pass init scan request to DAL */
3081 status = WDI_FinishScanReq(wdiFinishScanParams,
3082 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003083
Jeff Johnson295189b2012-06-20 16:38:30 -07003084
3085 /*
3086 * WDI API returns failure..
3087 */
3088 if(IS_WDI_STATUS_FAILURE( status))
3089 {
3090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3091 "Failure in Finish Scan WDI API, free all the memory " );
3092 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3093 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003094 finishScanParams->status = eSIR_FAILURE ;
3095 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
3096 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003097 return CONVERT_WDI2VOS_STATUS(status) ;
3098}
Jeff Johnson295189b2012-06-20 16:38:30 -07003099/*---------------------------------------------------------------------
3100 * ASSOC API's
3101 *---------------------------------------------------------------------
3102 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003103/*
Sachin Ahuja935eda782014-07-30 14:57:41 +05303104 * FUNCTION: WDA_JoinRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003105 * Trigger Init SCAN callback
3106 */
Sachin Ahuja935eda782014-07-30 14:57:41 +05303107void WDA_JoinRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07003108{
3109 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3110 tWDA_CbContext *pWDA;
3111 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003113 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003114 if(NULL == pWdaParams)
3115 {
3116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003117 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003118 VOS_ASSERT(0) ;
3119 return ;
3120 }
3121 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3122 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003123 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3124 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003125 /* reset macBSSID */
3126 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07003127 /* reset macSTASelf */
3128 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003129 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003130 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003131 return ;
3132}
Sachin Ahuja935eda782014-07-30 14:57:41 +05303133
3134/*
3135 * FUNCTION: WDA_JoinReqCallback
3136 * Free memory and send SWITCH CHANNEL RSP back to PE.
3137 * Invoked when Enter JOIN REQ failed in WDI and no RSP callback is generated.
3138 */
3139void WDA_JoinReqCallback(WDI_Status wdiStatus, void* pUserData)
3140{
3141 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3142 tWDA_CbContext *pWDA;
3143 tSwitchChannelParams *joinReqParam;
3144
3145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3146 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
3147
3148 if(NULL == pWdaParams)
3149 {
3150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3151 "%s: pWdaParams received NULL", __func__);
3152 VOS_ASSERT(0);
3153 return;
3154 }
3155
3156 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3157 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3158 joinReqParam->status = wdiStatus;
3159
3160 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3161 {
3162 /* reset macBSSID */
3163 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
3164 /* reset macSTASelf */
3165 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
3166
3167 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3168 vos_mem_free(pWdaParams);
3169 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
3170 }
3171
3172 return;
3173}
3174
Jeff Johnson295189b2012-06-20 16:38:30 -07003175/*
3176 * FUNCTION: WDA_ProcessJoinReq
3177 * Trigger Join REQ in WDI
3178 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003179VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
3180 tSwitchChannelParams* joinReqParam)
3181{
3182 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003183 WDI_JoinReqParamsType *wdiJoinReqParam =
3184 (WDI_JoinReqParamsType *)vos_mem_malloc(
3185 sizeof(WDI_JoinReqParamsType)) ;
3186 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003188 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003189 if(NULL == wdiJoinReqParam)
3190 {
3191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003192 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003193 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003194 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003195 return VOS_STATUS_E_NOMEM;
3196 }
3197 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3198 if(NULL == pWdaParams)
3199 {
3200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003201 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003202 VOS_ASSERT(0);
3203 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003204 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003205 return VOS_STATUS_E_NOMEM;
3206 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003207
3208 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
3209 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
3210 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
3211 {
3212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3213 "%s: received join request when BSSID or self-STA is NULL "
3214 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003215 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003216 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
3217 VOS_ASSERT(0);
3218 vos_mem_free(wdiJoinReqParam);
3219 vos_mem_free(pWdaParams);
3220 joinReqParam->status = eSIR_FAILURE ;
3221 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3222 return VOS_STATUS_E_INVAL;
3223 }
3224
Jeff Johnson295189b2012-06-20 16:38:30 -07003225 /* copy the BSSID for pWDA */
3226 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
3227 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003228 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
3229 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003230 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
3231 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07003232#ifdef WLAN_FEATURE_VOWIFI
3233 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
3234 joinReqParam->maxTxPower ;
3235#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003236 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
3237 joinReqParam->localPowerConstraint ;
3238#endif
3239 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
3240 joinReqParam->secondaryChannelOffset ;
3241 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
3242
Sachin Ahuja935eda782014-07-30 14:57:41 +05303243 wdiJoinReqParam->wdiReqStatusCB = WDA_JoinReqCallback;
3244 wdiJoinReqParam->pUserData = pWdaParams;
3245
Jeff Johnson295189b2012-06-20 16:38:30 -07003246 /* Store Init Req pointer, as this will be used for response */
3247 /* store Params pass it to WDI */
3248 pWdaParams->pWdaContext = pWDA;
3249 pWdaParams->wdaMsgParam = joinReqParam;
3250 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003251 status = WDI_JoinReq(wdiJoinReqParam,
Sachin Ahuja935eda782014-07-30 14:57:41 +05303252 (WDI_JoinRspCb )WDA_JoinRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003253 if(IS_WDI_STATUS_FAILURE(status))
3254 {
3255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3256 "Failure in Join WDI API, free all the memory " );
3257 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3258 vos_mem_free(pWdaParams) ;
3259 joinReqParam->status = eSIR_FAILURE ;
3260 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3261 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003262 return CONVERT_WDI2VOS_STATUS(status) ;
3263}
Jeff Johnson295189b2012-06-20 16:38:30 -07003264/*
3265 * FUNCTION: WDA_SwitchChannelReqCallback
3266 * send Switch channel RSP back to PE
3267 */
3268void WDA_SwitchChannelReqCallback(
3269 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
3270{
3271 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3272 tWDA_CbContext *pWDA;
3273 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003275 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003276 if(NULL == pWdaParams)
3277 {
3278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003279 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003280 VOS_ASSERT(0) ;
3281 return ;
3282 }
3283 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3284 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3285
3286#ifdef WLAN_FEATURE_VOWIFI
3287 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
3288#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003289 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3290 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003291 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003292 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003293 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003294 return ;
3295}
Jeff Johnson295189b2012-06-20 16:38:30 -07003296/*
3297 * FUNCTION: WDA_ProcessChannelSwitchReq
3298 * Request to WDI to switch channel REQ params.
3299 */
3300VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
3301 tSwitchChannelParams *pSwitchChanParams)
3302{
3303 WDI_Status status = WDI_STATUS_SUCCESS ;
3304 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
3305 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
3306 sizeof(WDI_SwitchChReqParamsType)) ;
3307 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003309 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003310 if(NULL == wdiSwitchChanParam)
3311 {
3312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003313 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003314 VOS_ASSERT(0);
3315 return VOS_STATUS_E_NOMEM;
3316 }
3317 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3318 if(NULL == pWdaParams)
3319 {
3320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003321 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003322 VOS_ASSERT(0);
3323 vos_mem_free(wdiSwitchChanParam);
3324 return VOS_STATUS_E_NOMEM;
3325 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003326 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
3327#ifndef WLAN_FEATURE_VOWIFI
3328 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3329 pSwitchChanParams->localPowerConstraint;
3330#endif
3331 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3332 pSwitchChanParams->secondaryChannelOffset;
3333 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003334 /* Store req pointer, as this will be used for response */
3335 /* store Params pass it to WDI */
3336 pWdaParams->pWdaContext = pWDA;
3337 pWdaParams->wdaMsgParam = pSwitchChanParams;
3338 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003339#ifdef WLAN_FEATURE_VOWIFI
3340 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
3341 = pSwitchChanParams->maxTxPower;
3342 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3343 pSwitchChanParams ->selfStaMacAddr,
3344 sizeof(tSirMacAddr));
3345#endif
3346 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3347 pSwitchChanParams->bssId,
3348 sizeof(tSirMacAddr));
3349
3350 status = WDI_SwitchChReq(wdiSwitchChanParam,
3351 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003352 if(IS_WDI_STATUS_FAILURE(status))
3353 {
3354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3355 "Failure in process channel switch Req WDI API, free all the memory " );
3356 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3357 vos_mem_free(pWdaParams) ;
3358 pSwitchChanParams->status = eSIR_FAILURE ;
3359 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
3360 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003361 return CONVERT_WDI2VOS_STATUS(status) ;
3362}
Kalikinkar dhara1e83b772014-02-06 12:59:22 -08003363
3364/*
3365 * FUNCTION: WDA_SwitchChannelReqCallback_V1
3366 * send Switch channel RSP back to PE
3367 */
3368void WDA_SwitchChannelReqCallback_V1(
3369 WDI_SwitchChRspParamsType_V1 *wdiSwitchChanRsp,
3370 void* pUserData)
3371{
3372 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3373 tWDA_CbContext *pWDA;
3374 tSwitchChannelParams *pSwitchChanParams;
3375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3376 "<------ %s " ,__func__);
3377
3378 if (NULL == pWdaParams)
3379 {
3380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3381 "%s: pWdaParams received NULL", __func__);
3382 VOS_ASSERT(0);
3383 return ;
3384 }
3385 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3386 pSwitchChanParams =
3387 (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3388 pSwitchChanParams->channelSwitchSrc =
3389 wdiSwitchChanRsp->channelSwitchSrc;
3390#ifdef WLAN_FEATURE_VOWIFI
3391 pSwitchChanParams->txMgmtPower =
3392 wdiSwitchChanRsp->ucTxMgmtPower;
3393#endif
3394 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3395 vos_mem_free(pWdaParams);
3396 pSwitchChanParams->status =
3397 wdiSwitchChanRsp->wdiStatus ;
3398 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3399 (void *)pSwitchChanParams , 0);
3400 return;
3401}
3402
3403/*
3404 * FUNCTION: WDA_ProcessChannelSwitchReq_V1
3405 * Request to WDI to switch channel REQ params.
3406 */
3407VOS_STATUS WDA_ProcessChannelSwitchReq_V1(tWDA_CbContext *pWDA,
3408 tSwitchChannelParams *pSwitchChanParams)
3409{
3410 WDI_Status status = WDI_STATUS_SUCCESS ;
3411 WDI_SwitchChReqParamsType_V1 *wdiSwitchChanParam =
3412 (WDI_SwitchChReqParamsType_V1 *)vos_mem_malloc(
3413 sizeof(WDI_SwitchChReqParamsType_V1)) ;
3414 tWDA_ReqParams *pWdaParams ;
3415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3416 "------> %s " ,__func__);
3417 if (NULL == wdiSwitchChanParam)
3418 {
3419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3420 "%s: VOS MEM Alloc Failure", __func__);
3421 VOS_ASSERT(0);
3422 return VOS_STATUS_E_NOMEM;
3423 }
3424 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3425 if (NULL == pWdaParams)
3426 {
3427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3428 "%s: VOS MEM Alloc Failure", __func__);
3429 VOS_ASSERT(0);
3430 vos_mem_free(wdiSwitchChanParam);
3431 return VOS_STATUS_E_NOMEM;
3432 }
3433 wdiSwitchChanParam->wdiChInfo.channelSwitchSrc =
3434 pSwitchChanParams->channelSwitchSrc;
3435
3436 wdiSwitchChanParam->wdiChInfo.ucChannel =
3437 pSwitchChanParams->channelNumber;
3438#ifndef WLAN_FEATURE_VOWIFI
3439 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3440 pSwitchChanParams->localPowerConstraint;
3441#endif
3442 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3443 pSwitchChanParams->secondaryChannelOffset;
3444 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
3445 /* Store req pointer, as this will be used for response */
3446 /* store Params pass it to WDI */
3447 pWdaParams->pWdaContext = pWDA;
3448 pWdaParams->wdaMsgParam = pSwitchChanParams;
3449 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
3450#ifdef WLAN_FEATURE_VOWIFI
3451 wdiSwitchChanParam->wdiChInfo.cMaxTxPower =
3452 pSwitchChanParams->maxTxPower;
3453 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3454 pSwitchChanParams ->selfStaMacAddr,
3455 sizeof(tSirMacAddr));
3456#endif
3457 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3458 pSwitchChanParams->bssId,
3459 sizeof(tSirMacAddr));
3460
3461 status = WDI_SwitchChReq_V1(wdiSwitchChanParam,
3462 (WDI_SwitchChRspCb_V1)WDA_SwitchChannelReqCallback_V1,
3463 pWdaParams);
3464 if (IS_WDI_STATUS_FAILURE(status))
3465 {
3466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3467 "Failure in process channel switch Req WDI "
3468 "API, free all the memory " );
3469 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3470 vos_mem_free(pWdaParams) ;
3471 pSwitchChanParams->status = eSIR_FAILURE ;
3472 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3473 (void *)pSwitchChanParams, 0) ;
3474 }
3475 return CONVERT_WDI2VOS_STATUS(status) ;
3476}
3477
Jeff Johnson295189b2012-06-20 16:38:30 -07003478/*
3479 * FUNCTION: WDA_ConfigBssReqCallback
3480 * config BSS Req Callback, called by WDI
3481 */
3482void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
3483 ,void* pUserData)
3484{
3485 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3486 tWDA_CbContext *pWDA;
3487 tAddBssParams *configBssReqParam;
3488 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003489 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003490 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003491 if(NULL == pWdaParams)
3492 {
3493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003494 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003495 VOS_ASSERT(0) ;
3496 return ;
3497 }
3498 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3499 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
3500 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003501 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003502 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003503 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
3504 {
3505 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
3506 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003507 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
3508 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
3509 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
3510
3511 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
3512 {
3513 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
3514 {
3515 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
3516 staConfigBssParam->staType = STA_ENTRY_BSSID;
3517 }
3518 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
3519 (staConfigBssParam->staType == STA_ENTRY_SELF))
3520 {
3521 /* This is the 1st add BSS Req for the BTAMP STA */
3522 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3523 staConfigBssParam->staType = STA_ENTRY_BSSID;
3524 }
3525 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3526 (staConfigBssParam->staType == STA_ENTRY_PEER))
3527 {
3528 /* This is the 2nd ADD BSS Request that is sent
3529 * on the BTAMP STA side. The Sta type is
3530 * set to STA_ENTRY_PEER here.*/
3531 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3532 }
3533 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3534 (staConfigBssParam->staType == STA_ENTRY_SELF))
3535 {
3536 /* statype is already set by PE.
3537 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
3538 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
3539 staConfigBssParam->staType = STA_ENTRY_BSSID;
3540 }
3541 else
3542 {
3543 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
3544 staConfigBssParam->staType = STA_ENTRY_PEER;
3545 }
3546 }
3547 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
3548 {
3549 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
3550 staConfigBssParam->staType = STA_ENTRY_SELF;
3551 }
3552 else
3553 {
3554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3555 "Invalid operation mode specified");
3556 VOS_ASSERT(0);
3557 }
3558
3559 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003560 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003561 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003562 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003563 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
3564 sizeof(tSirMacAddr));
3565 staConfigBssParam->txChannelWidthSet =
3566 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07003567 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
3568 staConfigBssParam->htCapable)
3569 {
3570 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
3571 wdiConfigBssRsp->ucBSSIdx;
3572 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
3573 WDA_VALID_STA_INDEX ;
Abhishek Singh0644e482014-10-06 18:38:23 +05303574 pWDA->wdaStaInfo[staConfigBssParam->staIdx].currentOperChan =
3575 configBssReqParam->currentOperChannel;
Jeff Johnson295189b2012-06-20 16:38:30 -07003576 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003577 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
3578 wdiConfigBssRsp->ucBSSIdx,
3579 wdiConfigBssRsp->ucSTAIdx))
3580 {
3581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003582 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003583 VOS_ASSERT(0) ;
3584 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003585 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
3586 {
3587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003588 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003589 VOS_ASSERT(0) ;
3590 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003591#ifdef WLAN_FEATURE_VOWIFI
3592 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
3593#endif
3594 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05303595 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
3596 sizeof(WDI_ConfigBSSReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07003597 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3598 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003599 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003600 return ;
3601}
Jeff Johnson295189b2012-06-20 16:38:30 -07003602/*
3603 * FUNCTION: WDA_UpdateEdcaParamsForAC
3604 * Update WDI EDCA params with PE edca params
3605 */
3606void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
3607 WDI_EdcaParamRecord *wdiEdcaParam,
3608 tSirMacEdcaParamRecord *macEdcaParam)
3609{
3610 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
3611 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
3612 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
3613 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
3614 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
3615 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
3616}
Jeff Johnson295189b2012-06-20 16:38:30 -07003617/*
3618 * FUNCTION: WDA_ProcessConfigBssReq
3619 * Configure BSS before starting Assoc with AP
3620 */
3621VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
3622 tAddBssParams* configBssReqParam)
3623{
3624 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303625 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003626 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003628 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303629 if (NULL == configBssReqParam)
3630 {
3631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3632 "%s: configBssReqParam is NULL", __func__);
3633 return VOS_STATUS_E_INVAL;
3634 }
3635
3636 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
3637 sizeof(WDI_ConfigBSSReqParamsType)) ;
3638
Jeff Johnson295189b2012-06-20 16:38:30 -07003639 if(NULL == wdiConfigBssReqParam)
3640 {
3641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003642 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003643 VOS_ASSERT(0);
3644 return VOS_STATUS_E_NOMEM;
3645 }
3646 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3647 if(NULL == pWdaParams)
3648 {
3649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003650 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003651 VOS_ASSERT(0);
3652 vos_mem_free(wdiConfigBssReqParam);
3653 return VOS_STATUS_E_NOMEM;
3654 }
Kiran4a17ebe2013-01-31 10:43:43 -08003655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3656 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07003657 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003658 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
3659 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003660 /* Store Init Req pointer, as this will be used for response */
3661 /* store Params pass it to WDI */
3662 pWdaParams->pWdaContext = pWDA;
3663 pWdaParams->wdaMsgParam = configBssReqParam;
3664 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003665 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
3666 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003667 if(IS_WDI_STATUS_FAILURE(status))
3668 {
3669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3670 "Failure in Config BSS WDI API, free all the memory " );
3671 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3672 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003673 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003674 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
3675 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003676 return CONVERT_WDI2VOS_STATUS(status) ;
3677}
Jeff Johnson295189b2012-06-20 16:38:30 -07003678#ifdef ENABLE_HAL_COMBINED_MESSAGES
3679/*
3680 * FUNCTION: WDA_PostAssocReqCallback
3681 * Post ASSOC req callback, send RSP back to PE
3682 */
3683void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
3684 void* pUserData)
3685{
3686 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3687 tPostAssocParams *postAssocReqParam =
3688 (tPostAssocParams *)pWDA->wdaMsgParam ;
3689 /*STA context within the BSS Params*/
3690 tAddStaParams *staPostAssocParam =
3691 &postAssocReqParam->addBssParams.staContext ;
3692 /*STA Params for self STA*/
3693 tAddStaParams *selfStaPostAssocParam =
3694 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003696 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003697 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003698 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003699 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
3700 {
3701 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
3702 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
3703 sizeof(tSirMacAddr)) ;
3704 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
3705 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
3706 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003707 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
3708 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05303709 vos_mem_zero(pWDA->wdaWdiApiMsgParam, sizeof(WDI_PostAssocReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07003710 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3711 pWDA->wdaWdiApiMsgParam = NULL;
3712 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003713 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003714 return ;
3715}
Jeff Johnson295189b2012-06-20 16:38:30 -07003716/*
3717 * FUNCTION: WDA_ProcessPostAssocReq
3718 * Trigger POST ASSOC processing in WDI
3719 */
3720VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
3721 tPostAssocParams *postAssocReqParam)
3722{
Jeff Johnson295189b2012-06-20 16:38:30 -07003723 WDI_Status status = WDI_STATUS_SUCCESS ;
3724
3725 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
3726 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
3727 sizeof(WDI_PostAssocReqParamsType)) ;
3728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003729 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003730
Jeff Johnson295189b2012-06-20 16:38:30 -07003731 if(NULL == wdiPostAssocReqParam)
3732 {
3733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003734 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003735 VOS_ASSERT(0);
3736 return VOS_STATUS_E_NOMEM;
3737 }
3738
3739 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
3740 {
3741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003742 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003743 VOS_ASSERT(0);
3744 return VOS_STATUS_E_FAILURE;
3745 }
3746
Jeff Johnson295189b2012-06-20 16:38:30 -07003747 /* update BSS params into WDI structure */
3748 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3749 &postAssocReqParam->addBssParams) ;
3750 /* update STA params into WDI structure */
3751 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3752 &postAssocReqParam->addStaParams) ;
3753
3754 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3755 postAssocReqParam->addBssParams.highPerformance;
3756 WDA_UpdateEdcaParamsForAC(pWDA,
3757 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3758 &postAssocReqParam->addBssParams.acbe);
3759 WDA_UpdateEdcaParamsForAC(pWDA,
3760 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3761 &postAssocReqParam->addBssParams.acbk);
3762 WDA_UpdateEdcaParamsForAC(pWDA,
3763 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3764 &postAssocReqParam->addBssParams.acvi);
3765 WDA_UpdateEdcaParamsForAC(pWDA,
3766 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3767 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003768 /* Store Init Req pointer, as this will be used for response */
3769 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003770 /* store Params pass it to WDI */
3771 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003772 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3773 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003774 if(IS_WDI_STATUS_FAILURE(status))
3775 {
3776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3777 "Failure in Post Assoc WDI API, free all the memory " );
3778 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3779 pWDA->wdaWdiApiMsgParam = NULL;
3780 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003781 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003782 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3783 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003784 return CONVERT_WDI2VOS_STATUS(status) ;
3785}
3786#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003787/*
3788 * FUNCTION: WDA_AddStaReqCallback
3789 * ADD STA req callback, send RSP back to PE
3790 */
3791void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3792 void* pUserData)
3793{
3794 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3795 tWDA_CbContext *pWDA;
3796 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003798 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003799 if(NULL == pWdaParams)
3800 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003802 VOS_ASSERT(0) ;
3803 return ;
3804 }
3805 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3806 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003807 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003808 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003809 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3810 {
3811 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3812 /*TODO: UMAC structure doesn't have these fields*/
3813 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3814 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3815 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3816 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3817 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3818 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003819#ifdef FEATURE_WLAN_TDLS
3820 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3821 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3822#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003823 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003824#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003825 {
3826 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3827 wdiConfigStaRsp->ucBssIdx;
3828 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3829 WDA_VALID_STA_INDEX ;
Abhishek Singhf08a82b2014-10-07 11:00:42 +05303830 pWDA->wdaStaInfo[addStaReqParam->staIdx].currentOperChan =
3831 addStaReqParam->currentOperChan;
Jeff Johnson295189b2012-06-20 16:38:30 -07003832 }
3833 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3834 {
3835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003836 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003837 VOS_ASSERT(0) ;
3838 return ;
3839 }
3840 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003841 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3842 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003843 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003844 return ;
3845}
Jeff Johnson295189b2012-06-20 16:38:30 -07003846/*
3847 * FUNCTION: WDA_ConfigStaReq
3848 * Trigger Config STA processing in WDI
3849 */
3850VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3851 tAddStaParams *addStaReqParam)
3852{
Jeff Johnson295189b2012-06-20 16:38:30 -07003853 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003854 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3855 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3856 sizeof(WDI_ConfigSTAReqParamsType)) ;
3857 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003859 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003860 if(NULL == wdiConfigStaReqParam)
3861 {
3862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003863 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003864 VOS_ASSERT(0);
3865 return VOS_STATUS_E_NOMEM;
3866 }
3867 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3868 if(NULL == pWdaParams)
3869 {
3870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003871 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003872 VOS_ASSERT(0);
3873 vos_mem_free(wdiConfigStaReqParam);
3874 return VOS_STATUS_E_NOMEM;
3875 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003876 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003877 /* update STA params into WDI structure */
3878 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3879 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003880 /* Store Init Req pointer, as this will be used for response */
3881 /* store Params pass it to WDI */
3882 pWdaParams->pWdaContext = pWDA;
3883 pWdaParams->wdaMsgParam = addStaReqParam;
3884 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003885 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3886 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003887 if(IS_WDI_STATUS_FAILURE(status))
3888 {
3889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3890 "Failure in Config STA WDI API, free all the memory " );
3891 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3892 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003893 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003894 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3895 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003896 return CONVERT_WDI2VOS_STATUS(status) ;
3897}
Jeff Johnson295189b2012-06-20 16:38:30 -07003898/*
3899 * FUNCTION: WDA_DelBSSReqCallback
3900 * Dens DEL BSS RSP back to PE
3901 */
3902void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3903 void* pUserData)
3904{
3905 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3906 tWDA_CbContext *pWDA;
3907 tDeleteBssParams *delBssReqParam;
3908 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003910 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003911 if(NULL == pWdaParams)
3912 {
3913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003914 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003915 VOS_ASSERT(0) ;
3916 return ;
3917 }
3918 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3919 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003920 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003921 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3922 {
3923 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3924 sizeof(tSirMacAddr)) ;
3925 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003926 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3927 {
3928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003929 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003930 VOS_ASSERT(0) ;
3931 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003932 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3933 {
3934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003935 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003936 VOS_ASSERT(0) ;
3937 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003938 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3939 {
3940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003941 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003942 VOS_ASSERT(0) ;
3943 }
Mihir Shete2ab1d492014-06-04 14:21:05 +05303944
3945 WLANTL_StartForwarding(staIdx,0,0);
3946
Jeff Johnson295189b2012-06-20 16:38:30 -07003947 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3948 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003949 /* reset the the system role*/
3950 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3951
3952 /* Reset the BA related information */
3953 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3954 {
3955 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3956 {
3957 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3958 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05303959 pWDA->wdaStaInfo[staIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003960 /* Reset framesTxed counters here */
3961 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3962 {
3963 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3964 }
3965 }
3966 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003967 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003968 return ;
3969}
3970
Jeff Johnson295189b2012-06-20 16:38:30 -07003971/*
3972 * FUNCTION: WDA_ProcessDelBssReq
3973 * Init DEL BSS req with WDI
3974 */
3975VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3976 tDeleteBssParams *delBssParam)
3977{
3978 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003979 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3980 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3981 sizeof(WDI_DelBSSReqParamsType)) ;
3982 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003984 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003985 if(NULL == wdiDelBssReqParam)
3986 {
3987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003988 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003989 VOS_ASSERT(0);
3990 return VOS_STATUS_E_NOMEM;
3991 }
3992 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3993 if(NULL == pWdaParams)
3994 {
3995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003996 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003997 VOS_ASSERT(0);
3998 vos_mem_free(wdiDelBssReqParam);
3999 return VOS_STATUS_E_NOMEM;
4000 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004001 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
4002 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
4003
4004 /* Store Init Req pointer, as this will be used for response */
4005 /* store Params pass it to WDI */
4006 pWdaParams->pWdaContext = pWDA;
4007 pWdaParams->wdaMsgParam = delBssParam;
4008 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004009 status = WDI_DelBSSReq(wdiDelBssReqParam,
4010 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004011 if(IS_WDI_STATUS_FAILURE(status))
4012 {
4013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4014 "Failure in Del BSS WDI API, free all the memory " );
4015 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4016 vos_mem_free(pWdaParams) ;
4017 delBssParam->status = eSIR_FAILURE ;
4018 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
4019 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004020 return CONVERT_WDI2VOS_STATUS(status) ;
4021}
Jeff Johnson295189b2012-06-20 16:38:30 -07004022/*
4023 * FUNCTION: WDA_DelSTAReqCallback
4024 * Dens DEL STA RSP back to PE
4025 */
4026void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
4027 void* pUserData)
4028{
4029 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4030 tWDA_CbContext *pWDA;
4031 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004033 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004034 if(NULL == pWdaParams)
4035 {
4036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004037 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004038 VOS_ASSERT(0) ;
4039 return ;
4040 }
4041 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4042 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004043 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004044 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
4045 {
4046 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
4047 {
4048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004049 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004050 VOS_ASSERT(0) ;
4051 }
4052 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
Mihir Shete2ab1d492014-06-04 14:21:05 +05304053 WLANTL_StartForwarding(delStaReqParam->staIdx,0,0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004054 }
4055 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4056 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004057 /*Reset the BA information corresponding to this STAIdx */
4058 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
4059 WDA_INVALID_STA_INDEX;
4060 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304061 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004062 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004063 return ;
4064}
Jeff Johnson295189b2012-06-20 16:38:30 -07004065/*
4066 * FUNCTION: WDA_ProcessDelStaReq
4067 * Init DEL STA req with WDI
4068 */
4069VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
4070 tDeleteStaParams *delStaParam)
4071{
4072 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004073 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
4074 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
4075 sizeof(WDI_DelSTAReqParamsType)) ;
4076 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004078 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004079 if(NULL == wdiDelStaReqParam)
4080 {
4081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004082 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004083 VOS_ASSERT(0);
4084 return VOS_STATUS_E_NOMEM;
4085 }
4086 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4087 if(NULL == pWdaParams)
4088 {
4089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004090 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004091 VOS_ASSERT(0);
4092 vos_mem_free(wdiDelStaReqParam);
4093 return VOS_STATUS_E_NOMEM;
4094 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004095 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
4096 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004097 /* Store Init Req pointer, as this will be used for response */
4098 /* store Params pass it to WDI */
4099 pWdaParams->pWdaContext = pWDA;
4100 pWdaParams->wdaMsgParam = delStaParam;
4101 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004102 status = WDI_DelSTAReq(wdiDelStaReqParam,
4103 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004104 if(IS_WDI_STATUS_FAILURE(status))
4105 {
4106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4107 "Failure in Del STA WDI API, free all the memory status = %d",
4108 status );
4109 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4110 vos_mem_free(pWdaParams) ;
4111 delStaParam->status = eSIR_FAILURE ;
4112 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
4113 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004114 return CONVERT_WDI2VOS_STATUS(status) ;
4115}
Jeff Johnson295189b2012-06-20 16:38:30 -07004116void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
4117{
4118 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4119 tWDA_CbContext *pWDA;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304120 tAddStaSelfParams *pAddStaSelfRsp = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004122 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004123 if(NULL == pWdaParams)
4124 {
4125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004126 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004127 VOS_ASSERT(0) ;
4128 return ;
4129 }
4130 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4131 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004132 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4133 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004134 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
4135 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
4136 pwdiAddSTASelfRsp->macSelfSta,
4137 sizeof(pAddStaSelfRsp->selfMacAddr));
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304138 pWDA->wdaAddSelfStaParams.ucSTASelfIdx = pwdiAddSTASelfRsp->ucSTASelfIdx;
4139 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaRspCounter++;
4140 if (pAddStaSelfRsp->status == eSIR_FAILURE)
4141 {
4142 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_RSP_WDI_FAIL;
4143 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
4144 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004145 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004146 return ;
4147}
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304148
Jeff Johnson295189b2012-06-20 16:38:30 -07004149/*
4150 * FUNCTION: WDA_ProcessAddStaSelfReq
4151 *
4152 */
4153VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
4154{
4155 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004156 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004157 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
4158 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
4159 sizeof(WDI_AddSTASelfReqParamsType)) ;
4160 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004162 "------> %s " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304163 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaReqCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004164 if( NULL == wdiAddStaSelfReq )
4165 {
4166 VOS_ASSERT( 0 );
4167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004168 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304169 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4170 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004171 return( VOS_STATUS_E_NOMEM );
4172 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004173 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004174 if( NULL == pWdaParams )
4175 {
4176 VOS_ASSERT( 0 );
4177 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004178 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304179 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4180 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004181 vos_mem_free(wdiAddStaSelfReq) ;
4182 return( VOS_STATUS_E_NOMEM );
4183 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004184 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004185 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07004186 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004187 /* Store Init Req pointer, as this will be used for response */
4188 /* store Params pass it to WDI */
4189 pWdaParams->pWdaContext = pWDA;
4190 pWdaParams->wdaMsgParam = pAddStaSelfReq;
4191 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07004192 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004193
Jeff Johnson43971f52012-07-17 12:26:56 -07004194 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004195 {
4196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4197 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07004198 wstatus );
4199 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004200 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4201 vos_mem_free(pWdaParams) ;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304202 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_WDI_FAIL;
4203 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004204 pAddStaSelfReq->status = eSIR_FAILURE ;
4205 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
4206 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004207 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004208}
Jeff Johnson295189b2012-06-20 16:38:30 -07004209/*
4210 * FUNCTION: WDA_DelSTASelfRespCallback
4211 *
4212 */
4213void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
4214 wdiDelStaSelfRspParams , void* pUserData)
4215{
4216 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4217 tWDA_CbContext *pWDA;
4218 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004220 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004221 if (NULL == pWdaParams)
4222 {
4223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004224 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004225 VOS_ASSERT(0);
4226 return;
4227 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004228 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4229 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004230 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004231 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004232
4233 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4234 vos_mem_free(pWdaParams) ;
4235
4236 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004237 return ;
4238}
Jeff Johnson295189b2012-06-20 16:38:30 -07004239/*
4240 * FUNCTION: WDA_DelSTASelfReqCallback
4241 *
4242 */
4243void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
4244 void* pUserData)
4245{
4246 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4247 tWDA_CbContext *pWDA;
4248 tDelStaSelfParams *delStaSelfParams;
4249
4250 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05304251 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004252 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004253
4254 if (NULL == pWdaParams)
4255 {
4256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004257 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004258 VOS_ASSERT(0);
4259 return;
4260 }
4261
4262 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4263 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
4264
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004265 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004266
4267 if(IS_WDI_STATUS_FAILURE(wdiStatus))
4268 {
4269 VOS_ASSERT(0);
4270 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4271 vos_mem_free(pWdaParams) ;
4272 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
4273 }
4274
4275 return ;
4276}
4277
4278/*
4279 * FUNCTION: WDA_DelSTASelfReq
4280 * Trigger Config STA processing in WDI
4281 */
4282VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
4283 tDelStaSelfParams* pDelStaSelfReqParam)
4284{
4285 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004286 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004287 tWDA_ReqParams *pWdaParams = NULL;
4288 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
4289 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
4290 sizeof(WDI_DelSTASelfReqParamsType)) ;
4291
Jeff Johnson295189b2012-06-20 16:38:30 -07004292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004293 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004294 if( NULL == wdiDelStaSelfReq )
4295 {
4296 VOS_ASSERT( 0 );
4297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004298 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004299 return( VOS_STATUS_E_NOMEM );
4300 }
4301
4302 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4303 if( NULL == pWdaParams )
4304 {
4305 VOS_ASSERT( 0 );
4306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004307 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004308 vos_mem_free(wdiDelStaSelfReq) ;
4309 return( VOS_STATUS_E_NOMEM );
4310 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004311 pWdaParams->pWdaContext = pWDA;
4312 /* Store param pointer as passed in by caller */
4313 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
4314 /* store Params pass it to WDI */
4315 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07004316 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
4317 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
4318
4319 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
4320 wdiDelStaSelfReq->pUserData = pWdaParams;
4321
Jeff Johnson43971f52012-07-17 12:26:56 -07004322 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07004323 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
4324
Jeff Johnson43971f52012-07-17 12:26:56 -07004325 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004326 {
4327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
4328 "Failure in Del Sta Self REQ WDI API, free all the memory " );
4329 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07004330 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004331 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4332 vos_mem_free(pWdaParams) ;
4333 pDelStaSelfReqParam->status = eSIR_FAILURE ;
4334 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
4335 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004336 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004337}
4338
Jeff Johnson295189b2012-06-20 16:38:30 -07004339/*
4340 * FUNCTION: WDA_SendMsg
4341 * Send Message back to PE
4342 */
4343void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
4344 void *pBodyptr, tANI_U32 bodyVal)
4345{
4346 tSirMsgQ msg = {0} ;
4347 tANI_U32 status = VOS_STATUS_SUCCESS ;
4348 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07004349 msg.type = msgType;
4350 msg.bodyval = bodyVal;
4351 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07004352 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07004353 if (VOS_STATUS_SUCCESS != status)
4354 {
4355 if(NULL != pBodyptr)
4356 {
4357 vos_mem_free(pBodyptr);
4358 }
4359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004360 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004361 VOS_ASSERT(0) ;
4362 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004363 return ;
4364}
Jeff Johnson295189b2012-06-20 16:38:30 -07004365/*
4366 * FUNCTION: WDA_UpdateBSSParams
4367 * Translated WDA/PE BSS info into WDI BSS info..
4368 */
4369void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
4370 WDI_ConfigBSSReqInfoType *wdiBssParams,
4371 tAddBssParams *wdaBssParams)
4372{
4373 v_U8_t keyIndex = 0;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304374 v_U8_t i = 0;
4375
Jeff Johnson295189b2012-06-20 16:38:30 -07004376 /* copy bssReq Params to WDI structure */
4377 vos_mem_copy(wdiBssParams->macBSSID,
4378 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
4379 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
4380 sizeof(tSirMacAddr)) ;
4381 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
4382 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
4383 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004384 wdiBssParams->ucShortSlotTimeSupported =
4385 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004386 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
4387 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
4388 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
4389 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
4390 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
4391
4392 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
4393 wdiBssParams->ucTXOPProtectionFullSupport =
4394 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004395 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
4396 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004397 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004398 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
4399 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
4400 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
4401 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
4402
Chet Lanctot186b5732013-03-18 10:26:30 -07004403 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
4404
Jeff Johnson295189b2012-06-20 16:38:30 -07004405 /* copy SSID into WDI structure */
4406 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
4407 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
4408 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004409 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
4410 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004411 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07004412#ifdef WLAN_FEATURE_VOWIFI
4413 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
4414#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004415 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07004416 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07004417#ifdef WLAN_FEATURE_VOWIFI_11R
4418 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004419 if(wdiBssParams->bExtSetStaKeyParamValid)
4420 {
4421 /* copy set STA key params to WDI structure */
4422 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
4423 wdaBssParams->extSetStaKeyParam.staIdx;
4424 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
4425 wdaBssParams->extSetStaKeyParam.encType;
4426 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
4427 wdaBssParams->extSetStaKeyParam.wepType;
4428 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
4429 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004430 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
4431 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004432 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004433 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
4434 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4435 {
4436 WDA_GetWepKeysFromCfg( pWDA,
4437 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
4438 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
4439 wdiBssParams->wdiExtSetKeyParam.wdiKey );
4440 }
4441 else
4442 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004443 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4444 keyIndex++)
4445 {
4446 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
4447 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
4448 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
4449 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
4450 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
4451 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304452
4453 if(WDA_getHostWlanFeatCaps(DISA) && WDA_getFwWlanFeatCaps(DISA))
4454 {
4455 for (i = 0; i < WLAN_MAX_KEY_RSC_LEN; i ++)
4456 {
4457 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc[i] =
4458 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc[i]);
4459 }
4460
4461 for (i = 0; i < SIR_MAC_MAX_KEY_LENGTH; i++)
4462 {
4463 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key[i] =
4464 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].key[i]);
4465 }
4466 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4467 FL("%s: Negated Keys"), __func__);
4468 }
4469 else
4470 {
4471 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4472 FL("%s: No change in Keys "), __func__);
4473 vos_mem_copy(
4474 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
4475 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc,
4476 WLAN_MAX_KEY_RSC_LEN);
4477 vos_mem_copy(
4478 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
4479 wdaBssParams->extSetStaKeyParam.key[keyIndex].key,
4480 SIR_MAC_MAX_KEY_LENGTH);
4481 }
4482
Jeff Johnson295189b2012-06-20 16:38:30 -07004483 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
4484 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
4485 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
4486 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07004487 }
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304488 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
Jeff Johnson295189b2012-06-20 16:38:30 -07004489 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004490 }
4491 }
4492 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
4493 }
4494 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
4495 {
4496 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
4497 sizeof(wdaBssParams->extSetStaKeyParam) );
4498 }
4499#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07004500#ifdef WLAN_FEATURE_11AC
4501 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
4502 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
4503#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004504
4505 return ;
4506}
Jeff Johnson295189b2012-06-20 16:38:30 -07004507/*
4508 * FUNCTION: WDA_UpdateSTAParams
4509 * Translated WDA/PE BSS info into WDI BSS info..
4510 */
4511void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
4512 WDI_ConfigStaReqInfoType *wdiStaParams,
4513 tAddStaParams *wdaStaParams)
4514{
4515 tANI_U8 i = 0;
4516 /* Update STA params */
4517 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
4518 sizeof(tSirMacAddr)) ;
4519 wdiStaParams->usAssocId = wdaStaParams->assocId;
4520 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07004521 wdiStaParams->staIdx = wdaStaParams->staIdx;
4522
Jeff Johnson295189b2012-06-20 16:38:30 -07004523 wdiStaParams->ucShortPreambleSupported =
4524 wdaStaParams->shortPreambleSupported;
4525 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
4526 sizeof(tSirMacAddr)) ;
4527 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
4528
4529 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
4530
4531 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
4532 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
4533 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
4534 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
4535 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
4536 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
4537 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
4538
4539 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
4540 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07004541 wdiStaParams->wdiSupportedRates.opRateMode =
4542 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004543 for(i = 0;i < WDI_NUM_11B_RATES;i++)
4544 {
4545 wdiStaParams->wdiSupportedRates.llbRates[i] =
4546 wdaStaParams->supportedRates.llbRates[i];
4547 }
4548 for(i = 0;i < WDI_NUM_11A_RATES;i++)
4549 {
4550 wdiStaParams->wdiSupportedRates.llaRates[i] =
4551 wdaStaParams->supportedRates.llaRates[i];
4552 }
4553 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
4554 {
4555 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
4556 wdaStaParams->supportedRates.aniLegacyRates[i];
4557 }
4558 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
4559 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07004560#ifdef WLAN_FEATURE_11AC
4561 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
4562 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
4563 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
4564 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
4565#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004566 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
4567 {
4568 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
4569 wdaStaParams->supportedRates.supportedMCSSet[i];
4570 }
4571 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
4572 wdaStaParams->supportedRates.rxHighestDataRate;
4573
4574 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
4575
4576 wdiStaParams->wdiAction = wdaStaParams->updateSta;
4577
4578 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
4579 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
4580 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
4581
4582 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
4583 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
4584 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
4585 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07004586 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07004587#ifdef WLAN_FEATURE_11AC
4588 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
4589 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08004590 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Abhishek Singh6927fa02014-06-27 17:19:55 +05304591 wdiStaParams->vhtTxMUBformeeCapable = wdaStaParams->vhtTxMUBformeeCapable;
4592 /* When MU vhtTxMUBformeeCapable is set, SU ucVhtTxBFEnabled
4593 * must be set by default */
4594 if ( wdiStaParams->vhtTxMUBformeeCapable )
4595 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxMUBformeeCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07004596#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08004597 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
4598 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07004599 return ;
4600}
Jeff Johnson295189b2012-06-20 16:38:30 -07004601/*
4602 * -------------------------------------------------------------------------
4603 * CFG update to WDI
4604 * -------------------------------------------------------------------------
4605 */
4606
4607 /*
4608 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
4609 * Convert the WNI CFG ID to HAL CFG ID
4610 */
Jeff Johnsone7245742012-09-05 17:12:55 -07004611static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07004612{
4613 switch(wniCfgId)
4614 {
4615 case WNI_CFG_STA_ID:
4616 return QWLAN_HAL_CFG_STA_ID;
4617 case WNI_CFG_CURRENT_TX_ANTENNA:
4618 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
4619 case WNI_CFG_CURRENT_RX_ANTENNA:
4620 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
4621 case WNI_CFG_LOW_GAIN_OVERRIDE:
4622 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
4623 case WNI_CFG_POWER_STATE_PER_CHAIN:
4624 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
4625 case WNI_CFG_CAL_PERIOD:
4626 return QWLAN_HAL_CFG_CAL_PERIOD;
4627 case WNI_CFG_CAL_CONTROL:
4628 return QWLAN_HAL_CFG_CAL_CONTROL;
4629 case WNI_CFG_PROXIMITY:
4630 return QWLAN_HAL_CFG_PROXIMITY;
4631 case WNI_CFG_NETWORK_DENSITY:
4632 return QWLAN_HAL_CFG_NETWORK_DENSITY;
4633 case WNI_CFG_MAX_MEDIUM_TIME:
4634 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
4635 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
4636 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
4637 case WNI_CFG_RTS_THRESHOLD:
4638 return QWLAN_HAL_CFG_RTS_THRESHOLD;
4639 case WNI_CFG_SHORT_RETRY_LIMIT:
4640 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
4641 case WNI_CFG_LONG_RETRY_LIMIT:
4642 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
4643 case WNI_CFG_FRAGMENTATION_THRESHOLD:
4644 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
4645 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
4646 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
4647 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
4648 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
4649 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
4650 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
4651 case WNI_CFG_FIXED_RATE:
4652 return QWLAN_HAL_CFG_FIXED_RATE;
4653 case WNI_CFG_RETRYRATE_POLICY:
4654 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
4655 case WNI_CFG_RETRYRATE_SECONDARY:
4656 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
4657 case WNI_CFG_RETRYRATE_TERTIARY:
4658 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
4659 case WNI_CFG_FORCE_POLICY_PROTECTION:
4660 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
4661 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
4662 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
4663 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
4664 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
4665 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
4666 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
4667 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
4668 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
4669 case WNI_CFG_MAX_BA_SESSIONS:
4670 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
4671 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
4672 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
4673 case WNI_CFG_PS_ENABLE_BCN_FILTER:
4674 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
4675 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
4676 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
4677 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
4678 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
4679 case WNI_CFG_STATS_PERIOD:
4680 return QWLAN_HAL_CFG_STATS_PERIOD;
4681 case WNI_CFG_CFP_MAX_DURATION:
4682 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
4683#if 0 /*This is not part of CFG*/
4684 case WNI_CFG_FRAME_TRANS_ENABLED:
4685 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
4686#endif
4687 case WNI_CFG_DTIM_PERIOD:
4688 return QWLAN_HAL_CFG_DTIM_PERIOD;
4689 case WNI_CFG_EDCA_WME_ACBK:
4690 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
4691 case WNI_CFG_EDCA_WME_ACBE:
4692 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
4693 case WNI_CFG_EDCA_WME_ACVI:
4694 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
4695 case WNI_CFG_EDCA_WME_ACVO:
4696 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
4697#if 0
4698 case WNI_CFG_TELE_BCN_WAKEUP_EN:
4699 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
4700 case WNI_CFG_TELE_BCN_TRANS_LI:
4701 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
4702 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
4703 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
4704 case WNI_CFG_TELE_BCN_MAX_LI:
4705 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
4706 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
4707 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
4708#endif
4709 case WNI_CFG_ENABLE_CLOSE_LOOP:
4710 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08004711 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
4712 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
Jeff Johnson295189b2012-06-20 16:38:30 -07004713 default:
4714 {
4715 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004716 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07004717 wniCfgId);
4718 return VOS_STATUS_E_INVAL;
4719 }
4720 }
4721}
Jeff Johnson295189b2012-06-20 16:38:30 -07004722/*
4723 * FUNCTION: WDA_UpdateCfgCallback
4724 *
4725 */
4726void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
4727{
4728 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4729 WDI_UpdateCfgReqParamsType *wdiCfgParam =
4730 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004732 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004733 /*
4734 * currently there is no response message is expected between PE and
4735 * WDA, Failure return from WDI is a ASSERT condition
4736 */
4737 if(WDI_STATUS_SUCCESS != wdiStatus)
4738 {
4739 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004740 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07004741 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
4742 }
4743
4744 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
4745 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4746 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004747 return ;
4748}
Jeff Johnson295189b2012-06-20 16:38:30 -07004749/*
4750 * FUNCTION: WDA_UpdateCfg
4751 *
4752 */
4753VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
4754{
4755
4756 WDI_Status status = WDI_STATUS_SUCCESS ;
4757 tANI_U32 val =0;
4758 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
4759 tHalCfg *configData;
4760 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
4761 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07004762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004763 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004764 if (NULL == pMac )
4765 {
4766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004767 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004768 return VOS_STATUS_E_FAILURE;
4769 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004770 if(WDA_START_STATE != pWDA->wdaState)
4771 {
4772 return VOS_STATUS_E_FAILURE;
4773 }
4774
4775 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
4776 {
4777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004778 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004779 VOS_ASSERT(0);
4780 return VOS_STATUS_E_FAILURE;
4781 }
4782
4783 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
4784 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004785 if(NULL == wdiCfgReqParam)
4786 {
4787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004788 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004789 VOS_ASSERT(0);
4790 return VOS_STATUS_E_NOMEM;
4791 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004792 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
4793 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004794 if(NULL == wdiCfgReqParam->pConfigBuffer)
4795 {
4796 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004797 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004798 vos_mem_free(wdiCfgReqParam);
4799 VOS_ASSERT(0);
4800 return VOS_STATUS_E_NOMEM;
4801 }
4802
4803 /*convert the WNI CFG Id to HAL CFG Id*/
4804 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4805 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4806
4807 /*TODO: revisit this for handling string parameters */
4808 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4809 &val) != eSIR_SUCCESS)
4810 {
4811 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004812 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07004813 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4814 vos_mem_free(wdiCfgReqParam);
4815 return eSIR_FAILURE;
4816 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004817 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4818 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4819 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4820 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4821 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4822
4823 /* store Params pass it to WDI */
4824 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004825#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4826 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4827 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004828 if(IS_WDI_STATUS_FAILURE(status))
4829 {
4830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4831 "Failure in Update CFG WDI API, free all the memory " );
4832 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4833 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4834 pWDA->wdaWdiCfgApiMsgParam = NULL;
4835 /* Failure is not expected */
4836 VOS_ASSERT(0) ;
4837 }
4838#else
4839 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4840 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4841 pWDA->wdaWdiCfgApiMsgParam = NULL;
4842#endif
4843 return CONVERT_WDI2VOS_STATUS(status) ;
4844}
4845
Jeff Johnson295189b2012-06-20 16:38:30 -07004846VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4847 v_U8_t *pDefaultKeyId,
4848 v_U8_t *pNumKeys,
4849 WDI_KeysType *pWdiKeys )
4850{
4851 v_U32_t i, j, defKeyId = 0;
4852 v_U32_t val = SIR_MAC_KEY_LENGTH;
4853 VOS_STATUS status = WDI_STATUS_SUCCESS;
4854 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004855 if (NULL == pMac )
4856 {
4857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004858 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004859 return VOS_STATUS_E_FAILURE;
4860 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004861 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4862 &defKeyId ))
4863 {
4864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4865 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4866 }
4867
4868 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004869 /* Need to extract ALL of the configured WEP Keys */
4870 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4871 {
4872 val = SIR_MAC_KEY_LENGTH;
4873 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4874 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4875 pWdiKeys[j].key,
4876 &val ))
4877 {
4878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004879 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07004880 }
4881 else
4882 {
4883 pWdiKeys[j].keyId = (tANI_U8) i;
4884 /*
4885 * Actually, a DC (Don't Care) because
4886 * this is determined (and set) by PE/MLME
4887 */
4888 pWdiKeys[j].unicast = 0;
4889 /*
4890 * Another DC (Don't Care)
4891 */
4892 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4893 /* Another DC (Don't Care). Unused for WEP */
4894 pWdiKeys[j].paeRole = 0;
4895 /* Determined from wlan_cfgGetStr() above.*/
4896 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004897 j++;
4898 *pNumKeys = (tANI_U8) j;
4899 }
4900 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004901 return status;
4902}
Jeff Johnson295189b2012-06-20 16:38:30 -07004903/*
4904 * FUNCTION: WDA_SetBssKeyReqCallback
4905 * send SET BSS key RSP back to PE
4906 */
4907void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4908{
4909 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4910 tWDA_CbContext *pWDA;
4911 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004913 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004914 if(NULL == pWdaParams)
4915 {
4916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004917 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004918 VOS_ASSERT(0) ;
4919 return ;
4920 }
4921 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4922 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05304923 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
4924 sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004925 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4926 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004927 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004928 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004929 return ;
4930}
Jeff Johnson295189b2012-06-20 16:38:30 -07004931/*
4932 * FUNCTION: WDA_ProcessSetBssKeyReq
4933 * Request to WDI for programming the BSS key( key for
4934 * broadcast/multicast frames Encryption)
4935 */
4936VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4937 tSetBssKeyParams *setBssKeyParams )
4938{
4939 WDI_Status status = WDI_STATUS_SUCCESS ;
4940 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4941 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4942 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4943 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004944 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004946 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004947 if(NULL == wdiSetBssKeyParam)
4948 {
4949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004950 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004951 VOS_ASSERT(0);
4952 return VOS_STATUS_E_NOMEM;
4953 }
4954 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4955 if(NULL == pWdaParams)
4956 {
4957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004958 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004959 VOS_ASSERT(0);
4960 vos_mem_free(wdiSetBssKeyParam);
4961 return VOS_STATUS_E_NOMEM;
4962 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004963 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004964 /* copy set BSS params to WDI structure */
4965 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4966 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4967 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004968 if(setBssKeyParams->encType != eSIR_ED_NONE)
4969 {
4970 if( setBssKeyParams->numKeys == 0 &&
4971 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4972 setBssKeyParams->encType == eSIR_ED_WEP104))
4973 {
4974 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004975 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4976 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4977 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4978 }
4979 else
4980 {
4981 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4982 {
4983 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4984 setBssKeyParams->key[keyIndex].keyId;
4985 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
4986 setBssKeyParams->key[keyIndex].unicast;
4987 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
4988 setBssKeyParams->key[keyIndex].keyDirection;
4989 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
4990 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4991 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
4992 setBssKeyParams->key[keyIndex].paeRole;
4993 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
4994 setBssKeyParams->key[keyIndex].keyLength;
4995 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
4996 setBssKeyParams->key[keyIndex].key,
4997 SIR_MAC_MAX_KEY_LENGTH);
4998 }
4999 }
5000 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005001 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
5002 setBssKeyParams->singleTidRc;
5003 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005004 /* Store set key pointer, as this will be used for response */
5005 /* store Params pass it to WDI */
5006 pWdaParams->pWdaContext = pWDA;
5007 pWdaParams->wdaMsgParam = setBssKeyParams;
5008 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005009 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
5010 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
5011
5012 if(IS_WDI_STATUS_FAILURE(status))
5013 {
5014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5015 "Failure in Set BSS Key Req WDI API, free all the memory " );
5016 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5017 vos_mem_free(pWdaParams) ;
5018 setBssKeyParams->status = eSIR_FAILURE ;
5019 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
5020 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005021 return CONVERT_WDI2VOS_STATUS(status) ;
5022}
Jeff Johnson295189b2012-06-20 16:38:30 -07005023/*
5024 * FUNCTION: WDA_RemoveBssKeyReqCallback
5025 * send SET BSS key RSP back to PE
5026 */
5027void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
5028{
5029 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5030 tWDA_CbContext *pWDA;
5031 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005033 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005034 if(NULL == pWdaParams)
5035 {
5036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005037 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005038 VOS_ASSERT(0) ;
5039 return ;
5040 }
5041 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5042 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005043 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5044 vos_mem_free(pWdaParams) ;
5045
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005046 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005047 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005048 return ;
5049}
Siddharth Bhal171788a2014-09-29 21:02:40 +05305050
5051/*
5052 * FUNCTION: WDA_SpoofMacAddrRspCallback
5053 * recieves spoof mac addr response from FW
5054 */
5055void WDA_SpoofMacAddrRspCallback(WDI_SpoofMacAddrRspParamType* wdiRsp, void* pUserData)
5056{
5057 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5058 tWDA_CbContext *pWDA;
Siddharth Bhal029d6732014-10-09 21:31:23 +05305059
Siddharth Bhal171788a2014-09-29 21:02:40 +05305060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5061 "<------ %s " ,__func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305062
Siddharth Bhal171788a2014-09-29 21:02:40 +05305063 if(NULL == pWdaParams)
5064 {
5065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5066 "%s: pWdaParams received NULL", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305067 VOS_ASSERT(0);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305068 return ;
5069 }
Siddharth Bhal171788a2014-09-29 21:02:40 +05305070 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305071
Siddharth Bhal029d6732014-10-09 21:31:23 +05305072 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
Siddharth Bhal171788a2014-09-29 21:02:40 +05305073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhal029d6732014-10-09 21:31:23 +05305074 "%s:Spoofing with rsp status %d", __func__, wdiRsp->wdiStatus);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305075 }
Siddharth Bhal029d6732014-10-09 21:31:23 +05305076 WDA_SendMsg(pWDA, WDA_SPOOF_MAC_ADDR_RSP, NULL,
5077 CONVERT_WDI2SIR_STATUS(wdiRsp->wdiStatus));
Siddharth Bhal171788a2014-09-29 21:02:40 +05305078
Siddharth Bhal171788a2014-09-29 21:02:40 +05305079 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305080 vos_mem_free(pWdaParams->wdaMsgParam);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305081 vos_mem_free(pWdaParams);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305082
5083 return;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305084}
5085
Jeff Johnson295189b2012-06-20 16:38:30 -07005086/*
5087 * FUNCTION: WDA_ProcessRemoveBssKeyReq
5088 * Request to WDI to remove the BSS key( key for broadcast/multicast
5089 * frames Encryption)
5090 */
5091VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
5092 tRemoveBssKeyParams *removeBssKeyParams )
5093{
5094 WDI_Status status = WDI_STATUS_SUCCESS ;
5095 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
5096 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
5097 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
5098 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005100 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005101 if(NULL == wdiRemoveBssKeyParam)
5102 {
5103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005104 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005105 VOS_ASSERT(0);
5106 return VOS_STATUS_E_NOMEM;
5107 }
5108 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5109 if(NULL == pWdaParams)
5110 {
5111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005112 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005113 VOS_ASSERT(0);
5114 vos_mem_free(wdiRemoveBssKeyParam);
5115 return VOS_STATUS_E_NOMEM;
5116 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005117 /* copy Remove BSS key params to WDI structure*/
5118 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
5119 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
5120 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
5121 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
5122 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005123 /* Store remove key pointer, as this will be used for response */
5124 /* store Params pass it to WDI */
5125 pWdaParams->pWdaContext = pWDA;
5126 pWdaParams->wdaMsgParam = removeBssKeyParams;
5127 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005128 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
5129 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005130 if(IS_WDI_STATUS_FAILURE(status))
5131 {
5132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5133 "Failure in Remove BSS Key Req WDI API, free all the memory " );
5134 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5135 vos_mem_free(pWdaParams) ;
5136 removeBssKeyParams->status = eSIR_FAILURE ;
5137 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
5138 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005139 return CONVERT_WDI2VOS_STATUS(status) ;
5140}
Jeff Johnson295189b2012-06-20 16:38:30 -07005141/*
5142 * FUNCTION: WDA_SetBssKeyReqCallback
5143 * send SET BSS key RSP back to PE
5144 */
5145void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
5146{
5147 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5148 tWDA_CbContext *pWDA;
5149 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005151 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005152 if(NULL == pWdaParams)
5153 {
5154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005155 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005156 VOS_ASSERT(0) ;
5157 return ;
5158 }
5159 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5160 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05305161 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
5162 sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005163 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5164 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005165 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005166 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005167 return ;
5168}
Jeff Johnson295189b2012-06-20 16:38:30 -07005169/*
5170 * FUNCTION: WDA_ProcessSetStaKeyReq
5171 * Request to WDI for programming the STA key( key for Unicast frames
5172 * Encryption)
5173 */
5174VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
5175 tSetStaKeyParams *setStaKeyParams )
5176{
5177 WDI_Status status = WDI_STATUS_SUCCESS ;
5178 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5179 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5180 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5181 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005182 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005184 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005185 if(NULL == wdiSetStaKeyParam)
5186 {
5187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005188 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005189 VOS_ASSERT(0);
5190 return VOS_STATUS_E_NOMEM;
5191 }
5192 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5193 if(NULL == pWdaParams)
5194 {
5195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005196 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005197 VOS_ASSERT(0);
5198 vos_mem_free(wdiSetStaKeyParam);
5199 return VOS_STATUS_E_NOMEM;
5200 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005201 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005202 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005203 /* copy set STA key params to WDI structure */
5204 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
5205 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
5206 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
5207 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005208 if(setStaKeyParams->encType != eSIR_ED_NONE)
5209 {
Jeff Johnson43971f52012-07-17 12:26:56 -07005210 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005211 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
5212 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
5213 {
5214 WDA_GetWepKeysFromCfg( pWDA,
5215 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
5216 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
5217 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
5218 }
5219 else
5220 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005221 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5222 keyIndex++)
5223 {
5224 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
5225 setStaKeyParams->key[keyIndex].keyId;
5226 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
5227 setStaKeyParams->key[keyIndex].unicast;
5228 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
5229 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005230 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
5231 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5232 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
5233 setStaKeyParams->key[keyIndex].paeRole;
5234 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
5235 setStaKeyParams->key[keyIndex].keyLength;
5236 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
5237 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
5238 /* set default index to index which have key direction as WDI_TX_DEFAULT */
5239 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
5240 {
5241 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
5242 }
5243 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005244 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
5245 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005246 }
5247 }
5248 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
5249 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005250 /* Store set key pointer, as this will be used for response */
5251 /* store Params pass it to WDI */
5252 pWdaParams->pWdaContext = pWDA;
5253 pWdaParams->wdaMsgParam = setStaKeyParams;
5254 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005255 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
5256 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005257 if(IS_WDI_STATUS_FAILURE(status))
5258 {
5259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5260 "Failure in set STA Key Req WDI API, free all the memory " );
5261 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5262 vos_mem_free(pWdaParams) ;
5263 setStaKeyParams->status = eSIR_FAILURE ;
5264 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
5265 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005266 return CONVERT_WDI2VOS_STATUS(status) ;
5267}
Jeff Johnson295189b2012-06-20 16:38:30 -07005268/*
5269 * FUNCTION: WDA_SetBcastStaKeyReqCallback
5270 * send SET Bcast STA key RSP back to PE
5271 */
5272void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
5273{
5274 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5275 tWDA_CbContext *pWDA;
5276 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005278 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005279 if(NULL == pWdaParams)
5280 {
5281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005282 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005283 VOS_ASSERT(0) ;
5284 return ;
5285 }
5286 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5287 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005288 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5289 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005290 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005291 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005292 return ;
5293}
5294
Jeff Johnson295189b2012-06-20 16:38:30 -07005295/*
5296 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
5297 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
5298 * Encryption)
5299 */
5300VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
5301 tSetStaKeyParams *setStaKeyParams )
5302{
5303 WDI_Status status = WDI_STATUS_SUCCESS ;
5304 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5305 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5306 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5307 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005308 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005310 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005311 if(NULL == wdiSetStaKeyParam)
5312 {
5313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005314 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005315 VOS_ASSERT(0);
5316 return VOS_STATUS_E_NOMEM;
5317 }
5318 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5319 if(NULL == pWdaParams)
5320 {
5321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005322 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005323 VOS_ASSERT(0);
5324 vos_mem_free(wdiSetStaKeyParam);
5325 return VOS_STATUS_E_NOMEM;
5326 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005327 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005328 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005329 /* copy set STA key params to WDI structure */
5330 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
5331 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
5332 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
5333 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005334 if(setStaKeyParams->encType != eSIR_ED_NONE)
5335 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005336 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5337 keyIndex++)
5338 {
5339 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
5340 setStaKeyParams->key[keyIndex].keyId;
5341 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
5342 setStaKeyParams->key[keyIndex].unicast;
5343 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
5344 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005345 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
5346 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5347 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
5348 setStaKeyParams->key[keyIndex].paeRole;
5349 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
5350 setStaKeyParams->key[keyIndex].keyLength;
5351 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
5352 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
5353 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005354 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
5355 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005356 }
5357 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07005358 /* Store set key pointer, as this will be used for response */
5359 /* store Params pass it to WDI */
5360 pWdaParams->pWdaContext = pWDA;
5361 pWdaParams->wdaMsgParam = setStaKeyParams;
5362 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005363 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
5364 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005365 if(IS_WDI_STATUS_FAILURE(status))
5366 {
5367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5368 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
5369 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5370 vos_mem_free(pWdaParams) ;
5371 setStaKeyParams->status = eSIR_FAILURE ;
5372 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
5373 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005374 return CONVERT_WDI2VOS_STATUS(status) ;
5375}
Jeff Johnson295189b2012-06-20 16:38:30 -07005376/*
5377 * FUNCTION: WDA_RemoveStaKeyReqCallback
5378 * send SET BSS key RSP back to PE
5379 */
5380void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
5381{
5382 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5383 tWDA_CbContext *pWDA;
5384 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005386 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005387 if(NULL == pWdaParams)
5388 {
5389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005390 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005391 VOS_ASSERT(0) ;
5392 return ;
5393 }
5394 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5395 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005396 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5397 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005398 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005399 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005400 return ;
5401}
5402
Jeff Johnson295189b2012-06-20 16:38:30 -07005403/*
5404 * FUNCTION: WDA_ProcessRemoveStaKeyReq
5405 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
5406 */
5407VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
5408 tRemoveStaKeyParams *removeStaKeyParams )
5409{
5410 WDI_Status status = WDI_STATUS_SUCCESS ;
5411 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
5412 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
5413 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
5414 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005416 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005417 if(NULL == wdiRemoveStaKeyParam)
5418 {
5419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005420 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005421 VOS_ASSERT(0);
5422 return VOS_STATUS_E_NOMEM;
5423 }
5424 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5425 if(NULL == pWdaParams)
5426 {
5427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005428 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005429 VOS_ASSERT(0);
5430 vos_mem_free(wdiRemoveStaKeyParam);
5431 return VOS_STATUS_E_NOMEM;
5432 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005433 /* copy remove STA key params to WDI structure*/
5434 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
5435 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
5436 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
5437 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
5438 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005439 /* Store remove key pointer, as this will be used for response */
5440 /* store Params pass it to WDI */
5441 pWdaParams->pWdaContext = pWDA;
5442 pWdaParams->wdaMsgParam = removeStaKeyParams;
5443 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005444 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
5445 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005446 if(IS_WDI_STATUS_FAILURE(status))
5447 {
5448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5449 "Failure in remove STA Key Req WDI API, free all the memory " );
5450 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5451 vos_mem_free(pWdaParams) ;
5452 removeStaKeyParams->status = eSIR_FAILURE ;
5453 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
5454 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005455 return CONVERT_WDI2VOS_STATUS(status) ;
5456}
Jeff Johnson295189b2012-06-20 16:38:30 -07005457/*
5458 * FUNCTION: WDA_IsHandleSetLinkStateReq
5459 * Update the WDA state and return the status to handle this message or not
5460 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005461WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
5462 tWDA_CbContext *pWDA,
5463 tLinkStateParams *linkStateParams)
5464{
5465 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005466 switch(linkStateParams->state)
5467 {
5468 case eSIR_LINK_PREASSOC_STATE:
5469 case eSIR_LINK_BTAMP_PREASSOC_STATE:
5470 /*
5471 * set the WDA state to PRE ASSOC
5472 * copy the BSSID into pWDA to use it in join request and return,
5473 * No need to handle these messages.
5474 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005475 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
5476 {
5477 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07005478 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005479 }
5480 else
5481 {
5482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005483 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005484 VOS_ASSERT(0);
5485 }
5486
5487 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
5488 {
5489 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07005490 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005491 }
5492 else
5493 {
5494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005495 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005496 VOS_ASSERT(0);
5497 }
5498
Jeff Johnson295189b2012-06-20 16:38:30 -07005499 /* UMAC is issuing the setlink state with PREASSOC twice (before set
5500 *channel and after ) so reset the WDA state to ready when the second
5501 * time UMAC issue the link state with PREASSOC
5502 */
5503 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
5504 {
5505 /* RESET WDA state back to WDA_READY_STATE */
5506 pWDA->wdaState = WDA_READY_STATE;
5507 }
5508 else
5509 {
5510 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
5511 }
5512 //populate linkState info in WDACbCtxt
5513 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07005514 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07005515 default:
5516 if(pWDA->wdaState != WDA_READY_STATE)
5517 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005518 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
5519 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
5520 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
5521 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
5522 *the ASSERT in WDA_Stop during module unload.*/
5523 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
5524 {
5525 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005526 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005527 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005528 else
5529 {
5530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005531 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005532 status = WDA_IGNORE_SET_LINK_STATE;
5533 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005534 }
5535 break;
5536 }
5537
5538 return status;
5539}
Jeff Johnson295189b2012-06-20 16:38:30 -07005540/*
5541 * FUNCTION: WDA_SetLinkStateCallback
5542 * call back function for set link state from WDI
5543 */
5544void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
5545{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05305546 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005547 tLinkStateParams *linkStateParams;
5548 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005550 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05305551 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07005552 {
5553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005554 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005555 VOS_ASSERT(0) ;
5556 return ;
5557 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005558 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05305559 if (NULL == pWDA)
5560 {
5561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5562 "%s:pWDA is NULL", __func__);
5563 VOS_ASSERT(0);
5564 return ;
5565 }
5566
Jeff Johnson295189b2012-06-20 16:38:30 -07005567 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005568 /*
5569 * In STA mode start the BA activity check timer after association
5570 * and in AP mode start BA activity check timer after BSS start */
5571 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
5572 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07005573 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
5574 ((status == WDI_STATUS_SUCCESS) &&
5575 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07005576 {
5577 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5578 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005579 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005580 /*
5581 * No respone required for WDA_SET_LINK_STATE so free the request
5582 * param here
5583 */
5584 if( pWdaParams != NULL )
5585 {
5586 if( pWdaParams->wdaWdiApiMsgParam != NULL )
5587 {
5588 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5589 }
5590 vos_mem_free(pWdaParams);
5591 }
5592 return ;
5593}
Jeff Johnson295189b2012-06-20 16:38:30 -07005594/*
5595 * FUNCTION: WDA_ProcessSetLinkState
5596 * Request to WDI to set the link status.
5597 */
5598VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
5599 tLinkStateParams *linkStateParams)
5600{
5601 WDI_Status status = WDI_STATUS_SUCCESS ;
5602 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
5603 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
5604 sizeof(WDI_SetLinkReqParamsType)) ;
5605 tWDA_ReqParams *pWdaParams ;
5606 tpAniSirGlobal pMac;
5607 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
5608
5609 if(NULL == pMac)
5610 {
5611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005612 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005613 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005614 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005615 return VOS_STATUS_E_FAILURE;
5616 }
5617
5618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005619 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005620 if(NULL == wdiSetLinkStateParam)
5621 {
5622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005623 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005624 VOS_ASSERT(0);
5625 return VOS_STATUS_E_NOMEM;
5626 }
5627 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5628 if(NULL == pWdaParams)
5629 {
5630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005631 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005632 VOS_ASSERT(0);
5633 vos_mem_free(wdiSetLinkStateParam);
5634 return VOS_STATUS_E_NOMEM;
5635 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005636 if(WDA_IGNORE_SET_LINK_STATE ==
5637 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
5638 {
5639 status = WDI_STATUS_E_FAILURE;
5640 }
5641 else
5642 {
5643 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
5644 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005645 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
5646 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005647 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
5648 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005649 pWdaParams->pWdaContext = pWDA;
5650 /* Store remove key pointer, as this will be used for response */
5651 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005652 /* store Params pass it to WDI */
5653 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
5654 /* Stop Timer only other than GO role and concurrent session */
5655 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07005656 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005657 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
5658 {
5659 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5660 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005661 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
5662 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005663 if(IS_WDI_STATUS_FAILURE(status))
5664 {
5665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5666 "Failure in set link state Req WDI API, free all the memory " );
5667 }
5668 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005669 if(IS_WDI_STATUS_FAILURE(status))
5670 {
5671 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07005672 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005673 vos_mem_free(pWdaParams);
5674 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005675 return CONVERT_WDI2VOS_STATUS(status) ;
5676}
Jeff Johnson295189b2012-06-20 16:38:30 -07005677/*
5678 * FUNCTION: WDA_GetStatsReqParamsCallback
5679 * send the response to PE with Stats received from WDI
5680 */
5681void WDA_GetStatsReqParamsCallback(
5682 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
5683 void* pUserData)
5684{
5685 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5686 tAniGetPEStatsRsp *pGetPEStatsRspParams;
5687
5688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005689 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005690 pGetPEStatsRspParams =
5691 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
5692 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
5693
5694 if(NULL == pGetPEStatsRspParams)
5695 {
5696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005697 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005698 VOS_ASSERT(0);
5699 return;
5700 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005701 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
5702 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
5703 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
5704 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005705
5706 //Fill the Session Id Properly in PE
5707 pGetPEStatsRspParams->sessionId = 0;
5708 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005709 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005710 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
5711 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005712 vos_mem_copy( pGetPEStatsRspParams + 1,
5713 wdiGetStatsRsp + 1,
5714 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005715 /* send response to UMAC*/
5716 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
5717
5718 return;
5719}
5720
Jeff Johnson295189b2012-06-20 16:38:30 -07005721/*
5722 * FUNCTION: WDA_ProcessGetStatsReq
5723 * Request to WDI to get the statistics
5724 */
5725VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
5726 tAniGetPEStatsReq *pGetStatsParams)
5727{
5728 WDI_Status status = WDI_STATUS_SUCCESS ;
5729 WDI_GetStatsReqParamsType wdiGetStatsParam;
5730 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005732 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005733 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
5734 pGetStatsParams->staId;
5735 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
5736 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005737 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005738 status = WDI_GetStatsReq(&wdiGetStatsParam,
5739 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005740 if(IS_WDI_STATUS_FAILURE(status))
5741 {
5742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5743 "Failure in Get Stats Req WDI API, free all the memory " );
5744 pGetPEStatsRspParams =
5745 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
5746 if(NULL == pGetPEStatsRspParams)
5747 {
5748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005749 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005750 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005751 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005752 return VOS_STATUS_E_NOMEM;
5753 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005754 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
5755 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
5756 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
5757 pGetPEStatsRspParams->rc = eSIR_FAILURE;
5758 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
5759 (void *)pGetPEStatsRspParams, 0) ;
5760 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005761 /* Free the request message */
5762 vos_mem_free(pGetStatsParams);
5763 return CONVERT_WDI2VOS_STATUS(status);
5764}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005765
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08005766#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005767/*
5768 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
5769 * send the response to PE with roam Rssi received from WDI
5770 */
5771void WDA_GetRoamRssiReqParamsCallback(
5772 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
5773 void* pUserData)
5774{
5775 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5776 tWDA_CbContext *pWDA = NULL;
5777 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5778 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
5779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5780 "<------ %s " ,__func__);
5781 if(NULL == pWdaParams)
5782 {
5783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5784 "%s: pWdaParams received NULL", __func__);
5785 VOS_ASSERT(0) ;
5786 return ;
5787 }
5788 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5789 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
5790
5791 if(NULL == pGetRoamRssiReqParams)
5792 {
5793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5794 "%s: pGetRoamRssiReqParams received NULL", __func__);
5795 VOS_ASSERT(0);
5796 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5797 vos_mem_free(pWdaParams);
5798 return ;
5799 }
5800 pGetRoamRssiRspParams =
5801 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5802
5803 if(NULL == pGetRoamRssiRspParams)
5804 {
5805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5806 "%s: VOS MEM Alloc Failure", __func__);
5807 VOS_ASSERT(0);
5808 return;
5809 }
5810 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
5811 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005812 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005813 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
5814 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
5815
5816 /* Assign get roam rssi req (backup) in to the response */
5817 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
5818
5819 /* free WDI command buffer */
5820 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5821 vos_mem_free(pWdaParams) ;
5822
5823 /* send response to UMAC*/
5824 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
5825
5826 return;
5827}
5828
5829
5830
5831/*
5832 * FUNCTION: WDA_ProcessGetRoamRssiReq
5833 * Request to WDI to get the statistics
5834 */
5835VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
5836 tAniGetRssiReq *pGetRoamRssiParams)
5837{
5838 WDI_Status status = WDI_STATUS_SUCCESS ;
5839 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
5840 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5841 tWDA_ReqParams *pWdaParams = NULL;
5842
5843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5844 "------> %s " ,__func__);
5845 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
5846 pGetRoamRssiParams->staId;
5847 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
5848
5849 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5850 if(NULL == pWdaParams)
5851 {
5852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5853 "%s: VOS MEM Alloc Failure", __func__);
5854 VOS_ASSERT(0);
5855 return VOS_STATUS_E_NOMEM;
5856 }
5857
5858 /* Store Init Req pointer, as this will be used for response */
5859 pWdaParams->pWdaContext = pWDA;
5860
5861 /* Take Get roam Rssi req backup as it stores the callback to be called after
5862 receiving the response */
5863 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
5864 pWdaParams->wdaWdiApiMsgParam = NULL;
5865
5866 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
5867 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
5868 if(IS_WDI_STATUS_FAILURE(status))
5869 {
5870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5871 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
5872 pGetRoamRssiRspParams =
5873 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5874 if(NULL == pGetRoamRssiRspParams)
5875 {
5876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5877 "%s: VOS MEM Alloc Failure", __func__);
5878 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05305879 vos_mem_free(pGetRoamRssiParams);
5880 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005881 return VOS_STATUS_E_NOMEM;
5882 }
5883 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
5884 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
5885 pGetRoamRssiRspParams->rssi = 0;
5886 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
5887 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
5888 (void *)pGetRoamRssiRspParams, 0) ;
5889 }
5890 return CONVERT_WDI2VOS_STATUS(status);
5891}
5892#endif
5893
5894
Jeff Johnson295189b2012-06-20 16:38:30 -07005895/*
5896 * FUNCTION: WDA_UpdateEDCAParamCallback
5897 * call back function for Update EDCA params from WDI
5898 */
5899void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
5900{
5901 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5902 tEdcaParams *pEdcaParams;
5903
5904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005905 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005906 if(NULL == pWdaParams)
5907 {
5908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005909 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005910 VOS_ASSERT(0) ;
5911 return ;
5912 }
5913 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005914 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5915 vos_mem_free(pWdaParams);
5916 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005917 return ;
5918}
Jeff Johnson295189b2012-06-20 16:38:30 -07005919/*
5920 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
5921 * Request to WDI to Update the EDCA params.
5922 */
5923VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
5924 tEdcaParams *pEdcaParams)
5925{
5926 WDI_Status status = WDI_STATUS_SUCCESS ;
5927 WDI_UpdateEDCAParamsType *wdiEdcaParam =
5928 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
5929 sizeof(WDI_UpdateEDCAParamsType)) ;
5930 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005932 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005933 if(NULL == wdiEdcaParam)
5934 {
5935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005936 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005937 VOS_ASSERT(0);
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 }
5941 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5942 if(NULL == pWdaParams)
5943 {
5944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005945 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005946 VOS_ASSERT(0);
5947 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005948 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005949 return VOS_STATUS_E_NOMEM;
5950 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005951 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07005952 /*
5953 Since firmware is not using highperformance flag, we have removed
5954 this flag from wdiEDCAInfo structure to match sizeof the structure
5955 between host and firmware.In future if we are planning to use
5956 highperformance flag then Please define this flag in wdiEDCAInfo
5957 structure, update it here and send it to firmware. i.e.
5958 Following is the original line which we removed as part of the fix
5959 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
5960 pEdcaParams->highPerformance;
5961 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005962 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
5963 &pEdcaParams->acbe);
5964 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
5965 &pEdcaParams->acbk);
5966 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
5967 &pEdcaParams->acvi);
5968 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
5969 &pEdcaParams->acvo);
5970 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005971 pWdaParams->pWdaContext = pWDA;
5972 /* Store remove key pointer, as this will be used for response */
5973 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005974 /* store Params pass it to WDI */
5975 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005976 status = WDI_UpdateEDCAParams(wdiEdcaParam,
5977 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005978 if(IS_WDI_STATUS_FAILURE(status))
5979 {
5980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5981 "Failure in Update EDCA Params WDI API, free all the memory " );
5982 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5983 vos_mem_free(pWdaParams);
5984 vos_mem_free(pEdcaParams);
5985 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005986 return CONVERT_WDI2VOS_STATUS(status) ;
5987}
Jeff Johnson295189b2012-06-20 16:38:30 -07005988/*
5989 * FUNCTION: WDA_AddBAReqCallback
5990 * send ADD BA RSP back to PE
5991 */
5992void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
5993 void* pUserData)
5994{
5995 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5996 tWDA_CbContext *pWDA;
5997 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005999 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306000 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006001 {
6002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006003 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006004 VOS_ASSERT(0) ;
6005 return ;
6006 }
6007 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306008 if (NULL == pWDA)
6009 {
6010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6011 "%s:pWDA is NULL", __func__);
6012 VOS_ASSERT(0);
6013 return ;
6014 }
6015
Jeff Johnson295189b2012-06-20 16:38:30 -07006016 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006017 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6018 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006019 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006020 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006021 return ;
6022}
6023
Jeff Johnson295189b2012-06-20 16:38:30 -07006024/*
6025 * FUNCTION: WDA_ProcessAddBAReq
6026 * Request to WDI to Update the ADDBA REQ params.
6027 */
6028VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
6029 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
6030{
Jeff Johnson43971f52012-07-17 12:26:56 -07006031 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07006032 WDI_AddBAReqParamsType *wdiAddBAReqParam =
6033 (WDI_AddBAReqParamsType *)vos_mem_malloc(
6034 sizeof(WDI_AddBAReqParamsType)) ;
6035 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006037 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006038 if(NULL == wdiAddBAReqParam)
6039 {
6040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006041 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006042 VOS_ASSERT(0);
6043 return VOS_STATUS_E_NOMEM;
6044 }
6045 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6046 if(NULL == pWdaParams)
6047 {
6048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006049 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006050 VOS_ASSERT(0);
6051 vos_mem_free(wdiAddBAReqParam);
6052 return VOS_STATUS_E_NOMEM;
6053 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006054 do
6055 {
6056 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006057 wdiAddBaInfo->ucSTAIdx = staIdx ;
6058 wdiAddBaInfo->ucBaSessionID = baSessionID ;
6059 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006060 } while(0) ;
6061 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006062 pWdaParams->pWdaContext = pWDA;
6063 /* store Params pass it to WDI */
6064 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
6065 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07006066 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
6067 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006068
Jeff Johnson43971f52012-07-17 12:26:56 -07006069 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07006070 {
6071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07006072 "Failure in ADD BA REQ Params WDI API, free all the memory" );
6073 status = CONVERT_WDI2VOS_STATUS(wstatus);
6074 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006075 vos_mem_free(pWdaParams);
6076 pAddBAReqParams->status = eSIR_FAILURE;
6077 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6078 }
Jeff Johnson43971f52012-07-17 12:26:56 -07006079 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07006080}
Jeff Johnson295189b2012-06-20 16:38:30 -07006081/*
6082 * FUNCTION: WDA_AddBASessionReqCallback
6083 * send ADD BA SESSION RSP back to PE/(or TL)
6084 */
6085void WDA_AddBASessionReqCallback(
6086 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
6087{
6088 VOS_STATUS status = VOS_STATUS_SUCCESS ;
6089 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306090 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006091 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006093 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006094 if(NULL == pWdaParams)
6095 {
6096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006097 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006098 VOS_ASSERT(0) ;
6099 return ;
6100 }
6101 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306102 if (NULL == pWDA)
6103 {
6104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6105 "%s:pWDA is NULL", __func__);
6106 VOS_ASSERT(0);
6107 return ;
6108 }
6109
Jeff Johnson295189b2012-06-20 16:38:30 -07006110 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006111 if( NULL == pAddBAReqParams )
6112 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006114 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006115 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006116 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6117 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006118 return ;
6119 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006120 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6121 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006122 /*
6123 * if WDA in update TL state, update TL with BA session parama and send
6124 * another request to HAL(/WDI) (ADD_BA_REQ)
6125 */
6126
6127 if((VOS_STATUS_SUCCESS ==
6128 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
6129 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
6130 {
6131 /* Update TL with BA info received from HAL/WDI */
6132 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
6133 wdiAddBaSession->usBaSessionID,
6134 wdiAddBaSession->ucSTAIdx,
6135 wdiAddBaSession->ucBaTID,
6136 wdiAddBaSession->ucBaBufferSize,
6137 wdiAddBaSession->ucWinSize,
6138 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07006139 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
6140 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
6141 }
6142 else
6143 {
6144 pAddBAReqParams->status =
6145 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
6146
6147 /* Setting Flag to indicate that Set BA is success */
6148 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
6149 {
6150 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
6151 tANI_U8 tid = wdiAddBaSession->ucBaTID;
6152 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
6153 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006154 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6155 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006156 /*Reset the WDA state to READY */
6157 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006158 return ;
6159}
6160
Jeff Johnson295189b2012-06-20 16:38:30 -07006161/*
6162 * FUNCTION: WDA_ProcessAddBASessionReq
6163 * Request to WDI to Update the ADDBA REQ params.
6164 */
6165VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
6166 tAddBAParams *pAddBAReqParams)
6167{
6168 WDI_Status status = WDI_STATUS_SUCCESS ;
6169 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
6170 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
6171 sizeof(WDI_AddBASessionReqParamsType)) ;
6172 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006173 WLANTL_STAStateType tlSTAState = 0;
6174
Jeff Johnson295189b2012-06-20 16:38:30 -07006175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006176 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006177 if(NULL == wdiAddBASessionReqParam)
6178 {
6179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006180 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006181 VOS_ASSERT(0);
6182 return VOS_STATUS_E_NOMEM;
6183 }
6184 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6185 if(NULL == pWdaParams)
6186 {
6187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006188 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006189 VOS_ASSERT(0);
6190 vos_mem_free(wdiAddBASessionReqParam);
6191 return VOS_STATUS_E_NOMEM;
6192 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006193 /*
6194 * Populate ADD BA parameters and pass these paarmeters to WDI.
6195 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
6196 * the state to track if these is BA recipient case or BA initiator
6197 * case.
6198 */
6199 do
6200 {
6201 WDI_AddBASessionReqinfoType *wdiBAInfoType =
6202 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
6203 /* vos_mem_copy(wdiBAInfoType->macBSSID,
6204 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
6205 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
6206 vos_mem_copy(wdiBAInfoType->macPeerAddr,
6207 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006208 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07006209 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
6210 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
6211 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
6212 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
6213 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07006214 /* check the BA direction and update state accordingly */
6215 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
6216 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
6217 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
6218
6219 }while(0) ;
6220 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006221 pWdaParams->pWdaContext = pWDA;
6222 /* Store ADD BA pointer, as this will be used for response */
6223 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
6224 /* store Params pass it to WDI */
6225 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006226
6227 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
6228 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
6229 */
6230 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
6231 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
6232 {
6233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006234 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07006235 status = WDI_STATUS_E_NOT_ALLOWED;
6236 pAddBAReqParams->status =
6237 CONVERT_WDI2SIR_STATUS(status) ;
6238 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6239 /*Reset the WDA state to READY */
6240 pWDA->wdaState = WDA_READY_STATE;
6241 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6242 vos_mem_free(pWdaParams);
6243
6244 return CONVERT_WDI2VOS_STATUS(status) ;
6245 }
6246
Jeff Johnson295189b2012-06-20 16:38:30 -07006247 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
6248 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006249 if(IS_WDI_STATUS_FAILURE(status))
6250 {
6251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006252 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07006253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006254 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07006255 pAddBAReqParams->status =
6256 CONVERT_WDI2SIR_STATUS(status) ;
6257 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006258 /*Reset the WDA state to READY */
6259 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006260 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006261 vos_mem_free(pWdaParams);
6262 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006263 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006264}
Jeff Johnson295189b2012-06-20 16:38:30 -07006265/*
6266 * FUNCTION: WDA_DelBANotifyTL
6267 * send DEL BA IND to TL
6268 */
6269void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
6270 tDelBAParams *pDelBAReqParams)
6271{
6272 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
6273 //tSirMsgQ msg;
6274 vos_msg_t vosMsg;
6275 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006276 if(NULL == pDelBAInd)
6277 {
6278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006279 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006280 VOS_ASSERT(0) ;
6281 return;
6282 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006283 pDelBAInd->mesgType = WDA_DELETEBA_IND;
6284 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
6285 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
6286 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07006287
Jeff Johnson295189b2012-06-20 16:38:30 -07006288
6289 vosMsg.type = WDA_DELETEBA_IND;
6290 vosMsg.bodyptr = pDelBAInd;
6291 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
6292 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
6293 {
6294 vosStatus = VOS_STATUS_E_BADMSG;
6295 }
6296}
Jeff Johnson295189b2012-06-20 16:38:30 -07006297/*
6298 * FUNCTION: WDA_DelBAReqCallback
6299 * send DEL BA RSP back to PE
6300 */
6301void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
6302{
6303 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6304 tWDA_CbContext *pWDA;
6305 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006307 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006308 if(NULL == pWdaParams)
6309 {
6310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006311 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006312 VOS_ASSERT(0) ;
6313 return ;
6314 }
6315 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306316
Jeff Johnson295189b2012-06-20 16:38:30 -07006317 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006318 /* Notify TL about DEL BA in case of recipinet */
6319 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
6320 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
6321 {
6322 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
6323 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006324 /*
6325 * No respone required for WDA_DELBA_IND so just free the request
6326 * param here
6327 */
6328 vos_mem_free(pDelBAReqParams);
6329 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6330 vos_mem_free(pWdaParams);
6331 return ;
6332}
6333
Jeff Johnson295189b2012-06-20 16:38:30 -07006334/*
6335 * FUNCTION: WDA_ProcessDelBAReq
6336 * Request to WDI to Update the DELBA REQ params.
6337 */
6338VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
6339 tDelBAParams *pDelBAReqParams)
6340{
6341 WDI_Status status = WDI_STATUS_SUCCESS ;
6342 WDI_DelBAReqParamsType *wdiDelBAReqParam =
6343 (WDI_DelBAReqParamsType *)vos_mem_malloc(
6344 sizeof(WDI_DelBAReqParamsType)) ;
6345 tWDA_ReqParams *pWdaParams ;
6346 tANI_U16 staIdx = 0;
6347 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07006348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006349 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006350 if(NULL == wdiDelBAReqParam)
6351 {
6352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006353 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006354 VOS_ASSERT(0);
6355 return VOS_STATUS_E_NOMEM;
6356 }
6357 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6358 if(NULL == pWdaParams)
6359 {
6360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006361 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006362 VOS_ASSERT(0);
6363 vos_mem_free(wdiDelBAReqParam);
6364 return VOS_STATUS_E_NOMEM;
6365 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006366 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
6367 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
6368 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
6369 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006370 pWdaParams->pWdaContext = pWDA;
6371 /* Store DEL BA pointer, as this will be used for response */
6372 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006373 /* store Params pass it to WDI */
6374 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006375 /* if BA exchange over the air is failed, clear this tid in BaBitmap
6376 * maintained in WDA, so that WDA can retry for another BA session
6377 */
6378 staIdx = pDelBAReqParams->staIdx;
6379 tid = pDelBAReqParams->baTID;
6380 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07006381 status = WDI_DelBAReq(wdiDelBAReqParam,
6382 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006383 if(IS_WDI_STATUS_FAILURE(status))
6384 {
6385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6386 "Failure in DEL BA REQ Params WDI API, free all the memory " );
6387 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6388 vos_mem_free(pWdaParams->wdaMsgParam);
6389 vos_mem_free(pWdaParams);
6390 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006391 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006392}
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006393
6394/*
6395 * FUNCTION: WDA_UpdateChReqCallback
6396 *
6397 */
6398void WDA_UpdateChReqCallback(WDI_Status status, void* pUserData)
6399{
Siddharth Bhala006c122014-05-03 12:13:27 +05306400 tWDA_ReqParams *pWdaParams;
6401 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
6402 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
6403 WDI_UpdateChannelReqinfoType *pChanInfoType;
6404 tSirUpdateChanList *pChanList;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006405
6406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6407 "<------ %s " ,__func__);
Siddharth Bhala006c122014-05-03 12:13:27 +05306408 if(NULL == pUserData)
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006409 {
6410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhala006c122014-05-03 12:13:27 +05306411 "%s: pUserData received NULL", __func__);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006412 VOS_ASSERT(0);
6413 return;
6414 }
6415
Siddharth Bhala006c122014-05-03 12:13:27 +05306416 pWdaParams = (tWDA_ReqParams *)pUserData;
6417 pwdiUpdateChReqParam =
6418 (WDI_UpdateChReqParamsType *)pWdaParams->wdaWdiApiMsgParam;
6419 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
6420 pChanInfoType = pwdiUpdateChanReqType->pchanParam;
6421 pChanList = (tSirUpdateChanList *)pWdaParams->wdaMsgParam;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006422 /*
6423 * currently there is no response message is expected between PE and
6424 * WDA, Failure return from WDI is a ASSERT condition
6425 */
6426 vos_mem_free(pChanInfoType);
6427 vos_mem_free(pChanList);
6428 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6429 vos_mem_free(pWdaParams);
6430
6431 return;
6432}
6433
6434/*
6435 * FUNCTION: WDA_ProcessUpdateChannelList
6436 * Request to WDI to Update the ChannelList params.
6437 */
6438VOS_STATUS WDA_ProcessUpdateChannelList(tWDA_CbContext *pWDA,
6439 tSirUpdateChanList *pChanList)
6440{
6441 WDI_Status status = WDI_STATUS_SUCCESS;
6442 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
6443 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
6444 WDI_UpdateChannelReqinfoType *pChanInfoType;
6445 tWDA_ReqParams *pWdaParams;
6446 wpt_uint8 i;
6447
6448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6449 "------> %s " ,__func__);
6450 if(NULL == pChanList)
6451 {
6452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6453 "%s: NULL pChanList", __func__);
6454 VOS_ASSERT(0);
6455 return VOS_STATUS_E_INVAL;
6456 }
6457
6458 if(!WDA_getFwWlanFeatCaps(UPDATE_CHANNEL_LIST))
6459 {
6460 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6461 "Update channel list capability Not Supported");
6462 vos_mem_free(pChanList);
6463 return VOS_STATUS_E_INVAL;
6464 }
6465
6466 pwdiUpdateChReqParam = (WDI_UpdateChReqParamsType *)vos_mem_malloc(
6467 sizeof(WDI_UpdateChReqParamsType));
6468 if(NULL == pwdiUpdateChReqParam)
6469 {
6470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6471 "%s: VOS MEM Alloc Failed for WDI_UpdateChReqParamsType",
6472 __func__);
6473 VOS_ASSERT(0);
6474 vos_mem_free(pChanList);
6475 return VOS_STATUS_E_NOMEM;
6476 }
6477 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
6478 pChanInfoType = (WDI_UpdateChannelReqinfoType *)
6479 vos_mem_malloc(sizeof(WDI_UpdateChannelReqinfoType) *
6480 pChanList->numChan);
6481 if(NULL == pChanInfoType)
6482 {
6483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6484 "%s: VOS MEM Alloc Failure", __func__);
6485 VOS_ASSERT(0);
6486 vos_mem_free(pChanList);
6487 vos_mem_free(pwdiUpdateChReqParam);
6488 return VOS_STATUS_E_NOMEM;
6489 }
6490 vos_mem_zero(pChanInfoType, sizeof(WDI_UpdateChannelReqinfoType)
6491 * pChanList->numChan);
6492 pwdiUpdateChanReqType->pchanParam = pChanInfoType;
6493
6494 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6495 if(NULL == pWdaParams)
6496 {
6497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6498 "%s: VOS MEM Alloc Failure", __func__);
6499 VOS_ASSERT(0);
6500 vos_mem_free(pChanList);
6501 vos_mem_free(pChanInfoType);
6502 vos_mem_free(pwdiUpdateChReqParam);
6503 return VOS_STATUS_E_NOMEM;
6504 }
6505 pwdiUpdateChanReqType->numchan = pChanList->numChan;
6506
6507 for(i = 0; i < pwdiUpdateChanReqType->numchan; i++)
6508 {
6509 pChanInfoType->mhz =
6510 vos_chan_to_freq(pChanList->chanParam[i].chanId);
6511
6512 pChanInfoType->band_center_freq1 = pChanInfoType->mhz;
6513 pChanInfoType->band_center_freq2 = 0;
6514
6515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6516 "chan[%d] = %u", i, pChanInfoType->mhz);
6517 if (pChanList->chanParam[i].dfsSet)
6518 {
6519 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_PASSIVE);
6520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6521 "chan[%d] DFS[%d]", pChanList->chanParam[i].chanId,
6522 pChanList->chanParam[i].dfsSet);
6523 }
6524
6525 if (pChanInfoType->mhz < WDA_2_4_GHZ_MAX_FREQ)
6526 {
6527 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11G);
6528 }
6529 else
6530 {
6531 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11A);
6532 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_HT);
6533 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_VHT);
6534 }
6535
6536 WDA_SET_CHANNEL_MAX_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
6537 WDA_SET_CHANNEL_REG_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
6538
6539 pChanInfoType++;
6540 }
6541
6542 pwdiUpdateChReqParam->wdiReqStatusCB = NULL;
6543 pWdaParams->pWdaContext = pWDA;
6544 pWdaParams->wdaMsgParam = (void *)pChanList;
6545 /* store Params pass it to WDI */
6546 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiUpdateChReqParam;
6547 status = WDI_UpdateChannelReq(pwdiUpdateChReqParam,
6548 (WDI_UpdateChannelRspCb)WDA_UpdateChReqCallback, pWdaParams);
6549 if(IS_WDI_STATUS_FAILURE(status))
6550 {
6551 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6552 "Failure in Update Channel REQ Params WDI API, free all the memory");
6553 vos_mem_free(pwdiUpdateChanReqType->pchanParam);
6554 vos_mem_free(pwdiUpdateChReqParam);
6555 vos_mem_free(pWdaParams->wdaMsgParam);
6556 vos_mem_free(pWdaParams);
6557 }
6558 return CONVERT_WDI2VOS_STATUS(status);
6559}
6560
Jeff Johnson295189b2012-06-20 16:38:30 -07006561/*
6562 * FUNCTION: WDA_AddTSReqCallback
6563 * send ADD TS RSP back to PE
6564 */
6565void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
6566{
6567 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306568 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006569 tAddTsParams *pAddTsReqParams;
6570
6571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006572 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006573 if(NULL == pWdaParams)
6574 {
6575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006576 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006577 VOS_ASSERT(0) ;
6578 return ;
6579 }
6580 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306581 if (NULL == pWDA)
6582 {
6583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6584 "%s:pWDA is NULL", __func__);
6585 VOS_ASSERT(0);
6586 return ;
6587 }
6588
Jeff Johnson295189b2012-06-20 16:38:30 -07006589 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
6590 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6591 vos_mem_free(pWdaParams);
6592
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006593 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006594 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006595 return ;
6596}
6597
Jeff Johnson295189b2012-06-20 16:38:30 -07006598/*
6599 * FUNCTION: WDA_ProcessAddTSReq
6600 * Request to WDI to Update the ADD TS REQ params.
6601 */
6602VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
6603 tAddTsParams *pAddTsReqParams)
6604{
6605 WDI_Status status = WDI_STATUS_SUCCESS ;
6606 WDI_AddTSReqParamsType *wdiAddTSReqParam =
6607 (WDI_AddTSReqParamsType *)vos_mem_malloc(
6608 sizeof(WDI_AddTSReqParamsType)) ;
6609 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006611 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006612 if(NULL == wdiAddTSReqParam)
6613 {
6614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006615 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006616 VOS_ASSERT(0);
6617 return VOS_STATUS_E_NOMEM;
6618 }
6619 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6620 if(NULL == pWdaParams)
6621 {
6622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006623 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006624 VOS_ASSERT(0);
6625 vos_mem_free(wdiAddTSReqParam);
6626 return VOS_STATUS_E_NOMEM;
6627 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006628 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
6629 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006630 //TS IE
6631 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
6632 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
6633 pAddTsReqParams->tspec.length;
6634
6635 //TS IE : TS INFO : TRAFFIC
6636 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
6637 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
6638 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
6639 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
6640 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
6641 pAddTsReqParams->tspec.tsinfo.traffic.psb;
6642 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
6643 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
6644 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
6645 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
6646 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
6647 pAddTsReqParams->tspec.tsinfo.traffic.direction;
6648 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
6649 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
6650 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
6651 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
6652
6653 //TS IE : TS INFO : SCHEDULE
6654 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
6655 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
6656 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
6657 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07006658 //TS IE
6659 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
6660 pAddTsReqParams->tspec.nomMsduSz;
6661 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
6662 pAddTsReqParams->tspec.maxMsduSz;
6663 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
6664 pAddTsReqParams->tspec.minSvcInterval;
6665 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
6666 pAddTsReqParams->tspec.maxSvcInterval;
6667 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
6668 pAddTsReqParams->tspec.inactInterval;
6669 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
6670 pAddTsReqParams->tspec.suspendInterval;
6671 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
6672 pAddTsReqParams->tspec.svcStartTime;
6673 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
6674 pAddTsReqParams->tspec.minDataRate;
6675 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
6676 pAddTsReqParams->tspec.meanDataRate;
6677 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
6678 pAddTsReqParams->tspec.peakDataRate;
6679 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
6680 pAddTsReqParams->tspec.maxBurstSz;
6681 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
6682 pAddTsReqParams->tspec.delayBound;
6683 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
6684 pAddTsReqParams->tspec.minPhyRate;
6685 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
6686 pAddTsReqParams->tspec.surplusBw;
6687 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
6688 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07006689 /* TODO: tAddTsParams doesn't have the following fields */
6690#if 0
6691 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6692 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
6693 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6694 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6695#endif
6696 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
6697
6698 pWdaParams->pWdaContext = pWDA;
6699 /* Store ADD TS pointer, as this will be used for response */
6700 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006701 /* store Params pass it to WDI */
6702 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006703 status = WDI_AddTSReq(wdiAddTSReqParam,
6704 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006705 if(IS_WDI_STATUS_FAILURE(status))
6706 {
6707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6708 "Failure in ADD TS REQ Params WDI API, free all the memory " );
6709 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6710 vos_mem_free(pWdaParams);
6711 pAddTsReqParams->status = eSIR_FAILURE ;
6712 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
6713 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006714 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006715}
6716
Jeff Johnson295189b2012-06-20 16:38:30 -07006717/*
6718 * FUNCTION: WDA_DelTSReqCallback
6719 * send DEL TS RSP back to PE
6720 */
6721void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
6722{
6723 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006725 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006726 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6727 vos_mem_free(pWdaParams->wdaMsgParam) ;
6728 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006729 /*
6730 * No respone required for WDA_DEL_TS_REQ so just free the request
6731 * param here
6732 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006733 return ;
6734}
6735
Jeff Johnson295189b2012-06-20 16:38:30 -07006736/*
6737 * FUNCTION: WDA_ProcessDelTSReq
6738 * Request to WDI to Update the DELTS REQ params.
6739 */
6740VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
6741 tDelTsParams *pDelTSReqParams)
6742{
6743 WDI_Status status = WDI_STATUS_SUCCESS ;
6744 WDI_DelTSReqParamsType *wdiDelTSReqParam =
6745 (WDI_DelTSReqParamsType *)vos_mem_malloc(
6746 sizeof(WDI_DelTSReqParamsType)) ;
6747 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006749 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006750 if(NULL == wdiDelTSReqParam)
6751 {
6752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006753 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006754 VOS_ASSERT(0);
6755 return VOS_STATUS_E_NOMEM;
6756 }
6757 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6758 if(NULL == pWdaParams)
6759 {
6760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006761 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006762 VOS_ASSERT(0);
6763 vos_mem_free(wdiDelTSReqParam);
6764 return VOS_STATUS_E_NOMEM;
6765 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006766 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
6767 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
6768 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
6769 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
6770 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006771 pWdaParams->pWdaContext = pWDA;
6772 /* Store DEL TS pointer, as this will be used for response */
6773 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006774 /* store Params pass it to WDI */
6775 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006776 status = WDI_DelTSReq(wdiDelTSReqParam,
6777 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006778 if(IS_WDI_STATUS_FAILURE(status))
6779 {
6780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6781 "Failure in DEL TS REQ Params WDI API, free all the memory " );
6782 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6783 vos_mem_free(pWdaParams->wdaMsgParam);
6784 vos_mem_free(pWdaParams);
6785 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006786 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006787}
Jeff Johnson295189b2012-06-20 16:38:30 -07006788/*
6789 * FUNCTION: WDA_UpdateBeaconParamsCallback
6790 * Free the memory. No need to send any response to PE in this case
6791 */
6792void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
6793{
6794 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006796 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006797 if(NULL == pWdaParams)
6798 {
6799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006800 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006801 VOS_ASSERT(0) ;
6802 return ;
6803 }
6804 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6805 vos_mem_free(pWdaParams->wdaMsgParam) ;
6806 vos_mem_free(pWdaParams);
6807 /*
6808 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
6809 * param here
6810 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006811 return ;
6812}
Jeff Johnson295189b2012-06-20 16:38:30 -07006813/*
6814 * FUNCTION: WDA_ProcessUpdateBeaconParams
6815 * Request to WDI to send the beacon parameters to HAL to update the Hardware
6816 */
6817VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
6818 tUpdateBeaconParams *pUpdateBeaconParams)
6819{
6820 WDI_Status status = WDI_STATUS_SUCCESS ;
6821 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
6822 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
6823 sizeof(WDI_UpdateBeaconParamsType)) ;
6824 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006826 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006827 if(NULL == wdiUpdateBeaconParams)
6828 {
6829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006830 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006831 VOS_ASSERT(0);
6832 return VOS_STATUS_E_NOMEM;
6833 }
6834 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6835 if(NULL == pWdaParams)
6836 {
6837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006838 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006839 VOS_ASSERT(0);
6840 vos_mem_free(wdiUpdateBeaconParams);
6841 return VOS_STATUS_E_NOMEM;
6842 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006843 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
6844 pUpdateBeaconParams->bssIdx;
6845 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
6846 pUpdateBeaconParams->fShortPreamble;
6847 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
6848 pUpdateBeaconParams->fShortSlotTime;
6849 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
6850 pUpdateBeaconParams->beaconInterval;
6851 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
6852 pUpdateBeaconParams->llaCoexist;
6853 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
6854 pUpdateBeaconParams->llbCoexist;
6855 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
6856 pUpdateBeaconParams->llgCoexist;
6857 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
6858 pUpdateBeaconParams->ht20MhzCoexist;
6859 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
6860 pUpdateBeaconParams->llnNonGFCoexist;
6861 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
6862 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
6863 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
6864 pUpdateBeaconParams->fRIFSMode;
6865 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
6866 pUpdateBeaconParams->paramChangeBitmap;
6867 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
6868
6869 pWdaParams->pWdaContext = pWDA;
6870 /* Store UpdateBeacon Req pointer, as this will be used for response */
6871 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006872 /* store Params pass it to WDI */
6873 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006874 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
6875 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
6876 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006877 if(IS_WDI_STATUS_FAILURE(status))
6878 {
6879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6880 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
6881 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6882 vos_mem_free(pWdaParams->wdaMsgParam);
6883 vos_mem_free(pWdaParams);
6884 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006885 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006886}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08006887#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -07006888/*
6889 * FUNCTION: WDA_TSMStatsReqCallback
6890 * send TSM Stats RSP back to PE
6891 */
6892void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
6893{
6894 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6895 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006896 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
6897 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006898
6899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006900 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006901 if(NULL == pWdaParams)
6902 {
6903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006904 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006905 VOS_ASSERT(0) ;
6906 return ;
6907 }
6908 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306909 if (NULL == pWDA)
6910 {
6911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6912 "%s:pWDA is NULL", __func__);
6913 VOS_ASSERT(0);
6914 return ;
6915 }
6916
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006917 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
6918
6919 if(NULL == pGetTsmStatsReqParams)
6920 {
6921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6922 "%s: pGetTsmStatsReqParams received NULL", __func__);
6923 VOS_ASSERT(0);
6924 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6925 vos_mem_free(pWdaParams);
6926 return;
6927 }
6928
6929 pTsmRspParams =
6930 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07006931 if( NULL == pTsmRspParams )
6932 {
6933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006934 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006935 VOS_ASSERT( 0 );
6936 return ;
6937 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006938 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
6939 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
6940 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
6941
Jeff Johnson295189b2012-06-20 16:38:30 -07006942 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
6943 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
6944 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
6945 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
6946 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
6947 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
6948 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
6949 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
6950 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
6951 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006952
6953 /* Assign get tsm stats req req (backup) in to the response */
6954 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
6955
6956 /* free WDI command buffer */
6957 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6958 vos_mem_free(pWdaParams);
6959
Jeff Johnson295189b2012-06-20 16:38:30 -07006960 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006961 return ;
6962}
6963
6964
Jeff Johnson295189b2012-06-20 16:38:30 -07006965/*
6966 * FUNCTION: WDA_ProcessTsmStatsReq
6967 * Request to WDI to get the TSM Stats params.
6968 */
6969VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006970 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07006971{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006972 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006973 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006974 tWDA_ReqParams *pWdaParams = NULL;
6975 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
6976
Jeff Johnson295189b2012-06-20 16:38:30 -07006977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006978 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006979 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
6980 sizeof(WDI_TSMStatsReqParamsType));
6981 if(NULL == wdiTSMReqParam)
6982 {
6983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006984 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006985 VOS_ASSERT(0);
6986 return VOS_STATUS_E_NOMEM;
6987 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006988 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6989 if(NULL == pWdaParams)
6990 {
6991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006992 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006993 VOS_ASSERT(0);
6994 vos_mem_free(wdiTSMReqParam);
6995 return VOS_STATUS_E_NOMEM;
6996 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006997 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
6998 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
6999 pTsmStats->bssId,
7000 sizeof(wpt_macAddr));
7001 wdiTSMReqParam->wdiReqStatusCB = NULL ;
7002
7003 pWdaParams->pWdaContext = pWDA;
7004 /* Store TSM Stats pointer, as this will be used for response */
7005 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007006 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007007 status = WDI_TSMStatsReq(wdiTSMReqParam,
7008 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007009 if(IS_WDI_STATUS_FAILURE(status))
7010 {
7011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7012 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007013 vos_mem_free(pWdaParams);
7014
7015 pGetTsmStatsRspParams =
7016 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
7017 if(NULL == pGetTsmStatsRspParams)
7018 {
7019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7020 "%s: VOS MEM Alloc Failure", __func__);
7021 VOS_ASSERT(0);
7022 vos_mem_free(pTsmStats);
7023 return VOS_STATUS_E_NOMEM;
7024 }
7025 pGetTsmStatsRspParams->staId = pTsmStats->staId;
7026 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
7027 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
7028
7029 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007030 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007031 return CONVERT_WDI2VOS_STATUS(status) ;
7032}
7033#endif
7034/*
7035 * FUNCTION: WDA_SendBeaconParamsCallback
7036 * No need to send any response to PE in this case
7037 */
7038void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
7039{
7040
Jeff Johnson295189b2012-06-20 16:38:30 -07007041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007042 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007043 return ;
7044}
Jeff Johnson295189b2012-06-20 16:38:30 -07007045/*
7046 * FUNCTION: WDA_ProcessSendBeacon
7047 * Request to WDI to send the beacon template to HAL to update the TPE memory and
7048 * start beacon trasmission
7049 */
7050VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
7051 tSendbeaconParams *pSendbeaconParams)
7052{
7053 WDI_Status status = WDI_STATUS_SUCCESS ;
7054 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007056 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007057 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
7058 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
7059 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
7060 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07007061 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
7062 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05307063 /* p2pIeOffset should be atleast greater than timIeOffset */
7064 if ((pSendbeaconParams->p2pIeOffset != 0) &&
7065 (pSendbeaconParams->p2pIeOffset <
7066 pSendbeaconParams->timIeOffset))
7067 {
7068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7069 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
7070 VOS_ASSERT( 0 );
7071 return WDI_STATUS_E_FAILURE;
7072 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007073 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
7074 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07007075 /* Copy the beacon template to local buffer */
7076 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
7077 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
7078 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
7079
Jeff Johnson295189b2012-06-20 16:38:30 -07007080 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
7081 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007082 if(IS_WDI_STATUS_FAILURE(status))
7083 {
7084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7085 "Failure in SEND BEACON REQ Params WDI API" );
7086 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007087 vos_mem_free(pSendbeaconParams);
7088 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007089}
Jeff Johnson295189b2012-06-20 16:38:30 -07007090/*
7091 * FUNCTION: WDA_UpdateProbeRspParamsCallback
7092 * No need to send any response to PE in this case
7093 */
7094void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
7095{
Jeff Johnson295189b2012-06-20 16:38:30 -07007096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007097 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007098 return ;
7099}
7100
Jeff Johnson295189b2012-06-20 16:38:30 -07007101/*
7102 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
7103 * Request to WDI to send the probe response template to HAL to update the TPE memory and
7104 * send probe response
7105 */
7106VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
7107 tSendProbeRespParams *pSendProbeRspParams)
7108{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007109 WDI_Status status = WDI_STATUS_SUCCESS;
7110 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
7111 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07007112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007113 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007114
7115 if (!wdiSendProbeRspParam)
7116 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
7117
Jeff Johnson295189b2012-06-20 16:38:30 -07007118 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007119 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07007120 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007121 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07007122 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07007123 /* Copy the Probe Response template to local buffer */
7124 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007125 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07007126 pSendProbeRspParams->pProbeRespTemplate,
7127 pSendProbeRspParams->probeRespTemplateLen);
7128 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007129 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07007130 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
7131 WDI_PROBE_REQ_BITMAP_IE_LEN);
7132
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007133 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007134
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007135 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07007136 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007137 if(IS_WDI_STATUS_FAILURE(status))
7138 {
7139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7140 "Failure in SEND Probe RSP Params WDI API" );
7141 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007142 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007143 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007144 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007145}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007146#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -07007147/*
7148 * FUNCTION: WDA_SetMaxTxPowerCallBack
7149 * send the response to PE with power value received from WDI
7150 */
7151void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
7152 void* pUserData)
7153{
7154 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7155 tWDA_CbContext *pWDA = NULL;
7156 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
7157
7158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007159 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007160 if(NULL == pWdaParams)
7161 {
7162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007163 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007164 VOS_ASSERT(0) ;
7165 return ;
7166 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007167 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307168 if (NULL == pWDA)
7169 {
7170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7171 "%s:pWDA is NULL", __func__);
7172 VOS_ASSERT(0);
7173 return ;
7174 }
7175
Jeff Johnson295189b2012-06-20 16:38:30 -07007176 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007177 if( NULL == pMaxTxPowerParams )
7178 {
7179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007180 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07007181 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007182 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7183 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007184 return ;
7185 }
Jeff Johnsone7245742012-09-05 17:12:55 -07007186
Jeff Johnson295189b2012-06-20 16:38:30 -07007187
7188 /*need to free memory for the pointers used in the
7189 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007190 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7191 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007192 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07007193
Jeff Johnson295189b2012-06-20 16:38:30 -07007194
7195 /* send response to UMAC*/
7196 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
7197
7198 return;
7199}
Jeff Johnson295189b2012-06-20 16:38:30 -07007200/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007201 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07007202 * Request to WDI to send set Max Tx Power Request
7203 */
7204 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
7205 tMaxTxPowerParams *MaxTxPowerParams)
7206{
7207 WDI_Status status = WDI_STATUS_SUCCESS;
7208 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
7209 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007210
Jeff Johnson295189b2012-06-20 16:38:30 -07007211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007212 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007213
Jeff Johnson295189b2012-06-20 16:38:30 -07007214 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
7215 sizeof(WDI_SetMaxTxPowerParamsType));
7216 if(NULL == wdiSetMaxTxPowerParams)
7217 {
7218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007219 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007220 VOS_ASSERT(0);
7221 return VOS_STATUS_E_NOMEM;
7222 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007223 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7224 if(NULL == pWdaParams)
7225 {
7226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007227 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007228 vos_mem_free(wdiSetMaxTxPowerParams);
7229 VOS_ASSERT(0);
7230 return VOS_STATUS_E_NOMEM;
7231 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007232 /* Copy.Max.Tx.Power Params to WDI structure */
7233 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
7234 MaxTxPowerParams->bssId,
7235 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007236 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
7237 MaxTxPowerParams->selfStaMacAddr,
7238 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007239 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
7240 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07007241 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007242 pWdaParams->pWdaContext = pWDA;
7243 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007244 /* store Params pass it to WDI */
7245 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007246 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
7247 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007248 if(IS_WDI_STATUS_FAILURE(status))
7249 {
7250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7251 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
7252 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7253 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007254 /* send response to UMAC*/
7255 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007256 }
7257 return CONVERT_WDI2VOS_STATUS(status);
7258
7259}
Jeff Johnson295189b2012-06-20 16:38:30 -07007260#endif
schang86c22c42013-03-13 18:41:24 -07007261
7262/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07007263 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
7264 * send the response to PE with power value received from WDI
7265 */
7266void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
7267 *pwdiSetMaxTxPowerPerBandRsp,
7268 void* pUserData)
7269{
7270 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7271 tWDA_CbContext *pWDA = NULL;
7272 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
7273
7274 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7275 "<------ %s ", __func__);
7276 if (NULL == pWdaParams)
7277 {
7278 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7279 "%s: pWdaParams received NULL", __func__);
7280 VOS_ASSERT(0);
7281 return ;
7282 }
7283 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307284 if (NULL == pWDA)
7285 {
7286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7287 "%s:pWDA is NULL", __func__);
7288 VOS_ASSERT(0);
7289 return ;
7290 }
7291
Arif Hussaina5ebce02013-08-09 15:09:58 -07007292 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
7293 if ( NULL == pMxTxPwrPerBandParams )
7294 {
7295 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7296 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
7297 VOS_ASSERT(0);
7298 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7299 vos_mem_free(pWdaParams);
7300 return;
7301 }
7302
7303 /*need to free memory for the pointers used in the
7304 WDA Process.Set Max Tx Power Req function*/
7305 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7306 vos_mem_free(pWdaParams);
7307 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
7308
7309 /* send response to UMAC*/
7310 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
7311 pMxTxPwrPerBandParams, 0);
7312
7313 return;
7314}
7315
7316/*
7317 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
7318 * Request to WDI to send set Max Tx Power Per band Request
7319 */
7320 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
7321 tMaxTxPowerPerBandParams
7322 *MaxTxPowerPerBandParams)
7323{
7324 WDI_Status status = WDI_STATUS_SUCCESS;
7325 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
7326 tWDA_ReqParams *pWdaParams = NULL;
7327
7328 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7329 "------> %s ", __func__);
7330
7331 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
7332 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
7333
7334 if (NULL == wdiSetMxTxPwrPerBandParams)
7335 {
7336 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7337 "%s: VOS MEM Alloc Failure", __func__);
7338 VOS_ASSERT(0);
7339 return VOS_STATUS_E_NOMEM;
7340 }
7341 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7342 if (NULL == pWdaParams)
7343 {
7344 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7345 "%s: VOS MEM Alloc Failure", __func__);
7346 vos_mem_free(wdiSetMxTxPwrPerBandParams);
7347 VOS_ASSERT(0);
7348 return VOS_STATUS_E_NOMEM;
7349 }
7350 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
7351 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
7352 MaxTxPowerPerBandParams->bandInfo;
7353 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
7354 MaxTxPowerPerBandParams->power;
7355 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
7356 pWdaParams->pWdaContext = pWDA;
7357 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
7358 /* store Params pass it to WDI */
7359 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
7360 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
7361 WDA_SetMaxTxPowerPerBandCallBack,
7362 pWdaParams);
7363 if (IS_WDI_STATUS_FAILURE(status))
7364 {
7365 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7366 "Failure in SET MAX TX Power REQ Params WDI API,"
7367 " free all the memory");
7368 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7369 vos_mem_free(pWdaParams);
7370 /* send response to UMAC*/
7371 WDA_SendMsg(pWDA,
7372 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
7373 MaxTxPowerPerBandParams, 0);
7374 }
7375 return CONVERT_WDI2VOS_STATUS(status);
7376}
7377
7378/*
schang86c22c42013-03-13 18:41:24 -07007379 * FUNCTION: WDA_SetTxPowerCallBack
7380 * send the response to PE with power value received from WDI
7381 */
7382void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
7383 void* pUserData)
7384{
7385 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7386 tWDA_CbContext *pWDA = NULL;
7387 tSirSetTxPowerReq *pTxPowerParams = NULL;
7388
7389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7390 "<------ %s ", __func__);
7391 if(NULL == pWdaParams)
7392 {
7393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7394 "%s: pWdaParams received NULL", __func__);
7395 VOS_ASSERT(0) ;
7396 return ;
7397 }
7398 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307399 if (NULL == pWDA)
7400 {
7401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7402 "%s:pWDA is NULL", __func__);
7403 VOS_ASSERT(0);
7404 return ;
7405 }
7406
schang86c22c42013-03-13 18:41:24 -07007407 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
7408 if(NULL == pTxPowerParams)
7409 {
7410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7411 "%s: pTxPowerParams received NULL " ,__func__);
7412 VOS_ASSERT(0);
7413 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7414 vos_mem_free(pWdaParams);
7415 return ;
7416 }
7417
7418 /*need to free memory for the pointers used in the
7419 WDA Process.Set Max Tx Power Req function*/
7420 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7421 vos_mem_free(pWdaParams);
7422
7423 /* send response to UMAC*/
7424 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
7425 return;
7426}
7427
7428/*
7429 * FUNCTION: WDA_ProcessSetTxPowerReq
7430 * Request to WDI to send set Tx Power Request
7431 */
7432 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
7433 tSirSetTxPowerReq *txPowerParams)
7434{
7435 WDI_Status status = WDI_STATUS_SUCCESS;
7436 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
7437 tWDA_ReqParams *pWdaParams = NULL;
7438
7439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7440 "------> %s ", __func__);
7441
7442 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
7443 sizeof(WDI_SetTxPowerParamsType));
7444 if(NULL == wdiSetTxPowerParams)
7445 {
7446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7447 "%s: VOS MEM Alloc Failure", __func__);
7448 VOS_ASSERT(0);
7449 return VOS_STATUS_E_NOMEM;
7450 }
7451 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7452 if(NULL == pWdaParams)
7453 {
7454 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7455 "%s: VOS MEM Alloc Failure", __func__);
7456 vos_mem_free(wdiSetTxPowerParams);
7457 VOS_ASSERT(0);
7458 return VOS_STATUS_E_NOMEM;
7459 }
7460 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
7461 txPowerParams->bssIdx;
7462 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
7463 txPowerParams->mwPower;
7464 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
7465 pWdaParams->pWdaContext = pWDA;
7466 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
7467 /* store Params pass it to WDI */
7468 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
7469 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
7470 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
7471 if(IS_WDI_STATUS_FAILURE(status))
7472 {
7473 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7474 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
7475 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7476 vos_mem_free(pWdaParams);
7477 /* send response to UMAC*/
7478 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
7479 }
7480 return CONVERT_WDI2VOS_STATUS(status);
7481}
7482
Jeff Johnson295189b2012-06-20 16:38:30 -07007483/*
7484 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7485 * Free the memory. No need to send any response to PE in this case
7486 */
7487void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
7488{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007489 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7490
Jeff Johnson295189b2012-06-20 16:38:30 -07007491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007492 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007493
7494 if(NULL == pWdaParams)
7495 {
7496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007497 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007498 VOS_ASSERT(0) ;
7499 return ;
7500 }
7501
7502 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7503 vos_mem_free(pWdaParams->wdaMsgParam) ;
7504 vos_mem_free(pWdaParams);
7505
Jeff Johnson295189b2012-06-20 16:38:30 -07007506 /*
7507 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
7508 * so just free the request param here
7509 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007510 return ;
7511}
7512
Jeff Johnson295189b2012-06-20 16:38:30 -07007513/*
7514 * FUNCTION: WDA_ProcessSetP2PGONOAReq
7515 * Request to WDI to set the P2P Group Owner Notice of Absence Req
7516 */
7517VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
7518 tP2pPsParams *pP2pPsConfigParams)
7519{
7520 WDI_Status status = WDI_STATUS_SUCCESS ;
7521 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
7522 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
7523 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007524 tWDA_ReqParams *pWdaParams = NULL;
7525
Jeff Johnson295189b2012-06-20 16:38:30 -07007526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007527 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007528 if(NULL == wdiSetP2PGONOAReqParam)
7529 {
7530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007531 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007532 VOS_ASSERT(0);
7533 return VOS_STATUS_E_NOMEM;
7534 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007535
7536 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7537 if(NULL == pWdaParams)
7538 {
7539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007540 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007541 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007542 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007543 VOS_ASSERT(0);
7544 return VOS_STATUS_E_NOMEM;
7545 }
7546
Jeff Johnson295189b2012-06-20 16:38:30 -07007547 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
7548 pP2pPsConfigParams->opp_ps;
7549 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
7550 pP2pPsConfigParams->ctWindow;
7551 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
7552 pP2pPsConfigParams->count;
7553 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
7554 pP2pPsConfigParams->duration;
7555 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
7556 pP2pPsConfigParams->interval;
7557 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
7558 pP2pPsConfigParams->single_noa_duration;
7559 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
7560 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007561
Jeff Johnson295189b2012-06-20 16:38:30 -07007562 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
7563 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007564 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
7565
Jeff Johnson295189b2012-06-20 16:38:30 -07007566 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007567 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
7568 pWdaParams->pWdaContext = pWDA;
7569
Jeff Johnson295189b2012-06-20 16:38:30 -07007570 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007571 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
7572
Jeff Johnson295189b2012-06-20 16:38:30 -07007573 if(IS_WDI_STATUS_FAILURE(status))
7574 {
7575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7576 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007577 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7578 vos_mem_free(pWdaParams->wdaMsgParam);
7579 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007580 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007581 return CONVERT_WDI2VOS_STATUS(status);
7582
Jeff Johnson295189b2012-06-20 16:38:30 -07007583}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307584
7585#ifdef FEATURE_WLAN_TDLS
7586/*
7587 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7588 * Free the memory. No need to send any response to PE in this case
7589 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307590void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
7591 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307592{
7593 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7594 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307595 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307596
7597
7598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7599 "<------ %s " ,__func__);
7600 if(NULL == pWdaParams)
7601 {
7602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7603 "%s: pWdaParams received NULL", __func__);
7604 VOS_ASSERT(0) ;
7605 return ;
7606 }
7607 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7608
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307609 if (NULL == pWDA)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307610 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7612 "%s:pWDA is NULL", __func__);
7613 VOS_ASSERT(0);
7614 return ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307615 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307616
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307617 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
7618 if( NULL == pTdlsLinkEstablishParams )
7619 {
7620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7621 "%s: pTdlsLinkEstablishParams "
7622 "received NULL " ,__func__);
7623 VOS_ASSERT(0);
7624 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7625 vos_mem_free(pWdaParams);
7626 return ;
7627 }
7628 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
7629 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307630 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307631 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307632 /* send response to UMAC*/
7633 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
7634
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307635 return ;
7636}
7637
7638VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
7639 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
7640{
7641 WDI_Status status = WDI_STATUS_SUCCESS ;
7642 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
7643 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
7644 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
7645 tWDA_ReqParams *pWdaParams = NULL;
7646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7647 "------> %s " ,__func__);
7648 if(NULL == wdiSetTDLSLinkEstablishReqParam)
7649 {
7650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7651 "%s: VOS MEM Alloc Failure", __func__);
7652 VOS_ASSERT(0);
7653 return VOS_STATUS_E_NOMEM;
7654 }
7655 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7656 if(NULL == pWdaParams)
7657 {
7658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7659 "%s: VOS MEM Alloc Failure", __func__);
7660 vos_mem_free(pTdlsLinkEstablishParams);
7661 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
7662 VOS_ASSERT(0);
7663 return VOS_STATUS_E_NOMEM;
7664 }
7665 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307666 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307667 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307668 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307669 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307670 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307671 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307672 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307673 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307674 pTdlsLinkEstablishParams->isBufsta;
Naresh Jayaramc7cbd782014-02-04 17:38:23 +05307675 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsOffChannelSupported =
7676 pTdlsLinkEstablishParams->isOffChannelSupported;
7677
7678 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannels,
7679 pTdlsLinkEstablishParams->validChannels,
7680 pTdlsLinkEstablishParams->validChannelsLen);
7681
7682 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannelsLen =
7683 pTdlsLinkEstablishParams->validChannelsLen;
7684
7685 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClasses,
7686 pTdlsLinkEstablishParams->validOperClasses,
7687 pTdlsLinkEstablishParams->validOperClassesLen);
7688 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClassesLen =
7689 pTdlsLinkEstablishParams->validOperClassesLen;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307690
7691 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
7692 /* Store msg pointer from PE, as this will be used for response */
7693 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
7694 /* store Params pass it to WDI */
7695 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
7696 pWdaParams->pWdaContext = pWDA;
7697
7698 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
7699 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
7700 WDA_SetTDLSLinkEstablishReqParamsCallback,
7701 pWdaParams);
7702 if(IS_WDI_STATUS_FAILURE(status))
7703 {
7704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7705 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
7706 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7707 vos_mem_free(pWdaParams->wdaMsgParam);
7708 vos_mem_free(pWdaParams);
7709 }
7710 return CONVERT_WDI2VOS_STATUS(status);
7711}
Atul Mittalc0f739f2014-07-31 13:47:47 +05307712
7713// tdlsoffchan
7714void WDA_SetTDLSChanSwitchReqParamsCallback(WDI_SetTdlsChanSwitchReqResp *wdiSetTdlsChanSwitchReqRsp,
7715 void* pUserData)
7716{
7717 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7718 tWDA_CbContext *pWDA = NULL;
7719 tTdlsChanSwitchParams *pTdlsChanSwitchParams;
7720
7721
7722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7723 "<------ %s " ,__func__);
7724 if(NULL == pWdaParams)
7725 {
7726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7727 "%s: pWdaParams received NULL", __func__);
Atul Mittalc0f739f2014-07-31 13:47:47 +05307728 VOS_ASSERT(0) ;
7729 return ;
7730 }
7731 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7732
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307733 if (NULL == pWDA)
Atul Mittal60bd4292014-08-14 12:19:27 +05307734 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7736 "%s:pWDA is NULL", __func__);
7737 VOS_ASSERT(0);
7738 return ;
Atul Mittal60bd4292014-08-14 12:19:27 +05307739 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307740
Atul Mittalc0f739f2014-07-31 13:47:47 +05307741 pTdlsChanSwitchParams = (tTdlsChanSwitchParams *)pWdaParams->wdaMsgParam ;
Atul Mittal60bd4292014-08-14 12:19:27 +05307742 if( NULL == pTdlsChanSwitchParams )
Atul Mittalc0f739f2014-07-31 13:47:47 +05307743 {
7744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7745 "%s: pTdlsChanSwitchParams "
7746 "received NULL " ,__func__);
7747 VOS_ASSERT(0);
7748 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7749 vos_mem_free(pWdaParams);
7750 return ;
7751 }
7752 pTdlsChanSwitchParams->status = CONVERT_WDI2SIR_STATUS(
7753 wdiSetTdlsChanSwitchReqRsp->wdiStatus);
Atul Mittalc0f739f2014-07-31 13:47:47 +05307754 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7755 vos_mem_free(pWdaParams);
Atul Mittal60bd4292014-08-14 12:19:27 +05307756 /* send response to UMAC*/
7757 WDA_SendMsg(pWDA, WDA_SET_TDLS_CHAN_SWITCH_REQ_RSP, pTdlsChanSwitchParams, 0) ;
Atul Mittalc0f739f2014-07-31 13:47:47 +05307758
7759 return ;
7760}
7761VOS_STATUS WDA_ProcessSetTdlsChanSwitchReq(tWDA_CbContext *pWDA,
7762 tTdlsChanSwitchParams *pTdlsChanSwitchParams)
7763{
7764 WDI_Status status = WDI_STATUS_SUCCESS ;
7765 WDI_SetTDLSChanSwitchReqParamsType *wdiSetTDLSChanSwitchReqParam =
7766 (WDI_SetTDLSChanSwitchReqParamsType *)vos_mem_malloc(
7767 sizeof(WDI_SetTDLSChanSwitchReqParamsType));
7768 tWDA_ReqParams *pWdaParams = NULL;
7769
7770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7771 "Enter: %s ",__func__);
7772 if(NULL == wdiSetTDLSChanSwitchReqParam)
7773 {
7774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7775 "%s: VOS MEM Alloc Failure", __func__);
7776 VOS_ASSERT(0);
7777 return VOS_STATUS_E_NOMEM;
7778 }
7779
7780 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7781 if(NULL == pWdaParams)
7782 {
7783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7784 "%s: VOS MEM Alloc Failure", __func__);
7785 vos_mem_free(pTdlsChanSwitchParams);
7786 vos_mem_free(wdiSetTDLSChanSwitchReqParam);
7787 VOS_ASSERT(0);
7788 return VOS_STATUS_E_NOMEM;
7789 }
7790 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.staIdx =
7791 pTdlsChanSwitchParams->staIdx;
7792 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.isOffchannelInitiator =
7793 pTdlsChanSwitchParams->tdlsSwMode;
7794 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetOperClass =
7795 pTdlsChanSwitchParams->operClass;
7796 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetChannel =
7797 pTdlsChanSwitchParams->tdlsOffCh;
7798 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.secondaryChannelOffset =
7799 pTdlsChanSwitchParams->tdlsOffChBwOffset;
7800
7801
7802 /* Store msg pointer from PE, as this will be used for response */
7803 pWdaParams->wdaMsgParam = (void *)pTdlsChanSwitchParams ;
7804 /* store Params pass it to WDI */
7805 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSChanSwitchReqParam ;
7806 pWdaParams->pWdaContext = pWDA;
7807 status = WDI_SetTDLSChanSwitchReq(wdiSetTDLSChanSwitchReqParam,
7808 (WDI_SetTDLSChanSwitchReqParamsRspCb)
7809 WDA_SetTDLSChanSwitchReqParamsCallback,
7810 pWdaParams);
7811 if(IS_WDI_STATUS_FAILURE(status))
7812 {
7813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7814 "Failure in TDLS Channel Switch Req WDI API, free all the memory" );
7815 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7816 vos_mem_free(pWdaParams->wdaMsgParam);
7817 vos_mem_free(pWdaParams);
7818 }
7819 return CONVERT_WDI2VOS_STATUS(status);
7820}
7821#endif /*FEATURE_WLAN_TDLS*/
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307822
7823
Jeff Johnson295189b2012-06-20 16:38:30 -07007824#ifdef WLAN_FEATURE_VOWIFI_11R
7825/*
7826 * FUNCTION: WDA_AggrAddTSReqCallback
7827 * send ADD AGGREGATED TS RSP back to PE
7828 */
7829void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
7830{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007831 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307832 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007833 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007834 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07007835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007836 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007837 if(NULL == pWdaParams)
7838 {
7839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007840 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007841 VOS_ASSERT(0) ;
7842 return ;
7843 }
7844
7845 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307846 if (NULL == pWDA)
7847 {
7848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7849 "%s:pWDA is NULL", __func__);
7850 VOS_ASSERT(0);
7851 return ;
7852 }
7853
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007854 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007855
7856 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
7857 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007858 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007859 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007860 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007861
7862 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7863 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007864 return ;
7865}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07007866/*
7867 * FUNCTION: WDA_ProcessAddTSReq
7868 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
7869 */
7870VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
7871 tAggrAddTsParams *pAggrAddTsReqParams)
7872{
7873 WDI_Status status = WDI_STATUS_SUCCESS ;
7874 int i;
7875 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007876 tWDA_ReqParams *pWdaParams = NULL;
7877
7878
Jeff Johnson295189b2012-06-20 16:38:30 -07007879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007880 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007881 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
7882 sizeof(WDI_AggrAddTSReqParamsType)) ;
7883 if(NULL == wdiAggrAddTSReqParam)
7884 {
7885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007886 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007887 VOS_ASSERT(0);
7888 return VOS_STATUS_E_NOMEM;
7889 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007890
7891
7892 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7893 if(NULL == pWdaParams)
7894 {
7895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007896 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007897 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007898 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007899 VOS_ASSERT(0);
7900 return VOS_STATUS_E_NOMEM;
7901 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007902 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
7903 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
7904 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007905 for( i = 0; i < WDI_MAX_NO_AC; i++ )
7906 {
7907 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
7908 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
7909 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07007910 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
7911 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
7912 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
7913 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
7914 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
7915 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
7916 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
7917 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
7918 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
7919 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
7920 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
7921 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
7922 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
7923 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
7924 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
7925 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07007926 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
7927 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07007928 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
7929 pAggrAddTsReqParams->tspec[i].nomMsduSz;
7930 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
7931 pAggrAddTsReqParams->tspec[i].maxMsduSz;
7932 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
7933 pAggrAddTsReqParams->tspec[i].minSvcInterval;
7934 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
7935 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
7936 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
7937 pAggrAddTsReqParams->tspec[i].inactInterval;
7938 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
7939 pAggrAddTsReqParams->tspec[i].suspendInterval;
7940 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
7941 pAggrAddTsReqParams->tspec[i].svcStartTime;
7942 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
7943 pAggrAddTsReqParams->tspec[i].minDataRate;
7944 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
7945 pAggrAddTsReqParams->tspec[i].meanDataRate;
7946 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
7947 pAggrAddTsReqParams->tspec[i].peakDataRate;
7948 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
7949 pAggrAddTsReqParams->tspec[i].maxBurstSz;
7950 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
7951 pAggrAddTsReqParams->tspec[i].delayBound;
7952 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
7953 pAggrAddTsReqParams->tspec[i].minPhyRate;
7954 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
7955 pAggrAddTsReqParams->tspec[i].surplusBw;
7956 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
7957 pAggrAddTsReqParams->tspec[i].mediumTime;
7958 }
7959
7960 /* TODO: tAggrAddTsParams doesn't have the following fields */
7961#if 0
7962 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
7963 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
7964 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
7965 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
7966#endif
7967 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
7968
7969 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007970 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007971 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007972 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
7973
7974 pWdaParams->pWdaContext = pWDA;
7975
Jeff Johnson295189b2012-06-20 16:38:30 -07007976 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007977 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
7978
Jeff Johnson295189b2012-06-20 16:38:30 -07007979 if(IS_WDI_STATUS_FAILURE(status))
7980 {
7981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7982 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007983 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7984 vos_mem_free(pWdaParams);
7985
7986 /* send the failure response back to PE*/
7987 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
7988 {
7989 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
7990 }
7991
7992 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
7993 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007994 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007995 return CONVERT_WDI2VOS_STATUS(status) ;
7996}
7997#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07007998/*
Mihir Shetea4306052014-03-25 00:02:54 +05307999 * FUNCTION: WDA_EnterImpsRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008000 * send Enter IMPS RSP back to PE
8001 */
Mihir Shetea4306052014-03-25 00:02:54 +05308002void WDA_EnterImpsRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008003{
Mihir Shetea4306052014-03-25 00:02:54 +05308004 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308005 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05308006
Jeff Johnson295189b2012-06-20 16:38:30 -07008007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Mihir Shetea4306052014-03-25 00:02:54 +05308008 "<------ %s status=%d" ,__func__,status);
8009 if(NULL == pWdaParams)
8010 {
8011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8012 "%s: pWdaParams received NULL", __func__);
8013 VOS_ASSERT(0);
8014 return;
8015 }
8016
8017 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308018 if (NULL == pWDA)
8019 {
8020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8021 "%s:pWDA is NULL", __func__);
8022 VOS_ASSERT(0);
8023 return ;
8024 }
Mihir Shetea4306052014-03-25 00:02:54 +05308025
8026 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8027 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008028 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008029 return ;
8030}
Mihir Shetea4306052014-03-25 00:02:54 +05308031
8032
8033/*
8034 * FUNCTION: WDA_EnterImpsReqCallback
8035 * Free memory and send Enter IMPS RSP back to PE.
8036 * Invoked when Enter IMPS REQ failed in WDI and no RSP callback is generated.
8037 */
8038void WDA_EnterImpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8039{
8040 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308041 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05308042
8043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8044 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8045
8046 if(NULL == pWdaParams)
8047 {
8048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8049 "%s: pWdaParams received NULL", __func__);
8050 VOS_ASSERT(0);
8051 return;
8052 }
8053
8054 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308055 if (NULL == pWDA)
8056 {
8057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8058 "%s:pWDA is NULL", __func__);
8059 VOS_ASSERT(0);
8060 return ;
8061 }
8062
Mihir Shetea4306052014-03-25 00:02:54 +05308063
8064 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8065 {
8066 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8067 vos_mem_free(pWdaParams);
8068 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
8069 CONVERT_WDI2SIR_STATUS(wdiStatus));
8070 }
8071
8072 return;
8073}
Jeff Johnson295189b2012-06-20 16:38:30 -07008074/*
8075 * FUNCTION: WDA_ProcessEnterImpsReq
8076 * Request to WDI to Enter IMPS power state.
8077 */
8078VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
8079{
8080 WDI_Status status = WDI_STATUS_SUCCESS ;
Mihir Shetea4306052014-03-25 00:02:54 +05308081 WDI_EnterImpsReqParamsType *wdiEnterImpsReqParams;
8082 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008084 "------> %s " ,__func__);
Mihir Shetea4306052014-03-25 00:02:54 +05308085
8086
8087 wdiEnterImpsReqParams = vos_mem_malloc(sizeof(WDI_EnterImpsReqParamsType));
8088 if (NULL == wdiEnterImpsReqParams)
8089 {
8090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8091 "%s: VOS MEM Alloc Failure", __func__);
8092 VOS_ASSERT(0);
8093 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
8094 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
8095 return VOS_STATUS_E_NOMEM;
8096 }
8097
8098 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8099 if (NULL == pWdaParams)
8100 {
8101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8102 "%s: VOS MEM Alloc Failure", __func__);
8103 VOS_ASSERT(0);
8104 vos_mem_free(wdiEnterImpsReqParams);
8105 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL ,
8106 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
8107 return VOS_STATUS_E_NOMEM;
8108 }
8109
8110 wdiEnterImpsReqParams->wdiReqStatusCB = WDA_EnterImpsReqCallback;
8111 wdiEnterImpsReqParams->pUserData = pWdaParams;
8112
8113 pWdaParams->wdaWdiApiMsgParam = wdiEnterImpsReqParams;
8114 pWdaParams->wdaMsgParam = NULL;
8115 pWdaParams->pWdaContext = pWDA;
8116
8117 status = WDI_EnterImpsReq(wdiEnterImpsReqParams,
8118 (WDI_EnterImpsRspCb)WDA_EnterImpsRspCallback,
8119 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008120 if(IS_WDI_STATUS_FAILURE(status))
8121 {
8122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8123 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Mihir Shetea4306052014-03-25 00:02:54 +05308124 vos_mem_free(wdiEnterImpsReqParams);
8125 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008126 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008127 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008128 return CONVERT_WDI2VOS_STATUS(status) ;
8129}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308130
8131/*
8132 * FUNCTION: WDA_ExitImpsRespCallback
8133 * send Exit IMPS RSP back to PE
8134 */
8135void WDA_ExitImpsRespCallback(WDI_Status status, void* pUserData)
8136{
8137 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8138 tWDA_CbContext *pWDA;
8139
8140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8141 "<------ %s " ,__func__);
8142
8143 if (NULL == pWdaParams)
8144 {
8145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8146 "%s: pWdaParams received NULL", __func__);
8147 VOS_ASSERT(0);
8148 return;
8149 }
8150 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8151
8152 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8153 vos_mem_free(pWdaParams);
8154
8155 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status));
8156 return;
8157}
8158
Jeff Johnson295189b2012-06-20 16:38:30 -07008159/*
8160 * FUNCTION: WDA_ExitImpsReqCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008161 */
8162void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
8163{
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308164 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008166 "<------ %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308167 if(NULL == pWdaParams)
8168 {
8169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8170 "%s: pWdaParams received NULL", __func__);
8171 VOS_ASSERT(0);
8172 return;
8173 }
8174
8175 if (IS_WDI_STATUS_FAILURE(status))
8176 {
8177 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8178 vos_mem_free(pWdaParams);
8179 if (WDI_STATUS_DEV_INTERNAL_FAILURE == status)
8180 {
8181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8182 FL("reload wlan driver"));
8183 wpalWlanReload();
8184 }
8185 }
8186 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07008187}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308188
Jeff Johnson295189b2012-06-20 16:38:30 -07008189/*
8190 * FUNCTION: WDA_ProcessExitImpsReq
8191 * Request to WDI to Exit IMPS power state.
8192 */
8193VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
8194{
8195 WDI_Status status = WDI_STATUS_SUCCESS ;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308196 tWDA_ReqParams *pWdaParams;
8197 WDI_ExitImpsReqParamsType *wdiExitImpsReqParams;
8198
Jeff Johnson295189b2012-06-20 16:38:30 -07008199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008200 "------> %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308201 wdiExitImpsReqParams = (WDI_ExitImpsReqParamsType *)vos_mem_malloc(
8202 sizeof(WDI_ExitImpsReqParamsType));
8203 if (NULL == wdiExitImpsReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008204 {
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8206 "%s: VOS MEM Alloc Failure", __func__);
8207 VOS_ASSERT(0);
8208 return VOS_STATUS_E_NOMEM;
8209 }
8210 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8211 if(NULL == pWdaParams)
8212 {
8213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8214 "%s: VOS MEM Alloc Failure", __func__);
8215 VOS_ASSERT(0);
8216 vos_mem_free(wdiExitImpsReqParams);
8217 return VOS_STATUS_E_NOMEM;
8218 }
8219 wdiExitImpsReqParams->wdiReqStatusCB = WDA_ExitImpsReqCallback;
8220 wdiExitImpsReqParams->pUserData = pWdaParams;
8221
8222 /* Store param pointer as passed in by caller */
8223 /* store Params pass it to WDI */
8224 pWdaParams->wdaWdiApiMsgParam = wdiExitImpsReqParams;
8225 pWdaParams->pWdaContext = pWDA;
8226 pWdaParams->wdaMsgParam = wdiExitImpsReqParams;
8227 status = WDI_ExitImpsReq(wdiExitImpsReqParams,
8228 (WDI_ExitImpsRspCb)WDA_ExitImpsRespCallback,
8229 pWdaParams);
8230 if (IS_WDI_STATUS_FAILURE(status))
8231 {
8232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8233 "Failure in Exit IMPS REQ WDI API, free all the memory " );
8234 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8235 vos_mem_free(pWdaParams);
8236 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008237 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008238 return CONVERT_WDI2VOS_STATUS(status) ;
8239}
Jeff Johnson295189b2012-06-20 16:38:30 -07008240/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008241 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008242 * send Enter BMPS RSP back to PE
8243 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008244void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008245{
8246 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308247 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008248 tEnterBmpsParams *pEnterBmpsRspParams;
8249
Jeff Johnson295189b2012-06-20 16:38:30 -07008250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008251 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008252 if(NULL == pWdaParams)
8253 {
8254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008255 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008256 VOS_ASSERT(0) ;
8257 return ;
8258 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008259
8260 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308261 if (NULL == pWDA)
8262 {
8263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8264 "%s:pWDA is NULL", __func__);
8265 VOS_ASSERT(0);
8266 return ;
8267 }
8268
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008269 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
8270
8271 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008272 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008273
8274 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008275 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008276 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
8277
Jeff Johnson295189b2012-06-20 16:38:30 -07008278 return ;
8279}
Jeff Johnson295189b2012-06-20 16:38:30 -07008280/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008281 * FUNCTION: WDA_EnterBmpsReqCallback
8282 * Free memory and send Enter BMPS RSP back to PE.
8283 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
8284 */
8285void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8286{
8287 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308288 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008289 tEnterBmpsParams *pEnterBmpsRspParams;
8290
8291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8292 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8293
8294 if(NULL == pWdaParams)
8295 {
8296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8297 "%s: pWdaParams received NULL", __func__);
8298 VOS_ASSERT(0);
8299 return;
8300 }
8301
8302 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308303 if (NULL == pWDA)
8304 {
8305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8306 "%s:pWDA is NULL", __func__);
8307 VOS_ASSERT(0);
8308 return ;
8309 }
8310
Yue Ma7f44bbe2013-04-12 11:47:39 -07008311 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
8312 pEnterBmpsRspParams->status = wdiStatus;
8313
8314 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8315 {
8316 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8317 vos_mem_free(pWdaParams);
8318 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
8319 }
8320
8321 return;
8322}
8323/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008324 * FUNCTION: WDA_ProcessEnterBmpsReq
8325 * Request to WDI to Enter BMPS power state.
8326 */
8327VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
8328 tEnterBmpsParams *pEnterBmpsReqParams)
8329{
8330 WDI_Status status = WDI_STATUS_SUCCESS;
8331 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
8332 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008334 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008335 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
8336 {
8337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008338 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008339 VOS_ASSERT(0);
8340 return VOS_STATUS_E_FAILURE;
8341 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008342 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
8343 if (NULL == wdiEnterBmpsReqParams)
8344 {
8345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008346 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008347 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008348 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
8349 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008350 return VOS_STATUS_E_NOMEM;
8351 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008352 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8353 if (NULL == pWdaParams)
8354 {
8355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008356 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008357 VOS_ASSERT(0);
8358 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008359 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
8360 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008361 return VOS_STATUS_E_NOMEM;
8362 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008363 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
8364 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
8365 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
8366 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08008367 // For ESE and 11R Roaming
Jeff Johnson295189b2012-06-20 16:38:30 -07008368 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
8369 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
8370 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008371 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
8372 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008373
Jeff Johnson295189b2012-06-20 16:38:30 -07008374 /* Store param pointer as passed in by caller */
8375 /* store Params pass it to WDI */
8376 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008377 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008378 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008379 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008380 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008381 if (IS_WDI_STATUS_FAILURE(status))
8382 {
8383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8384 "Failure in Enter BMPS REQ WDI API, free all the memory" );
8385 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008386 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07008387 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008388 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008389 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008390 return CONVERT_WDI2VOS_STATUS(status);
8391}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008392
8393
8394static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
8395 WDI_Status wdiStatus,
8396 tExitBmpsParams *pExitBmpsReqParams)
8397{
8398 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
8399
8400 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
8401}
8402
8403
Jeff Johnson295189b2012-06-20 16:38:30 -07008404/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008405 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008406 * send Exit BMPS RSP back to PE
8407 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008408void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008409{
8410 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308411 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008412 tExitBmpsParams *pExitBmpsRspParams;
8413
Jeff Johnson295189b2012-06-20 16:38:30 -07008414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008415 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008416 if(NULL == pWdaParams)
8417 {
8418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008419 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008420 VOS_ASSERT(0) ;
8421 return ;
8422 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008423
8424 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308425 if (NULL == pWDA)
8426 {
8427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8428 "%s:pWDA is NULL", __func__);
8429 VOS_ASSERT(0);
8430 return ;
8431 }
8432
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008433 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
8434
8435 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008436 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008437
Jeff Johnson295189b2012-06-20 16:38:30 -07008438 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8439 vos_mem_free(pWdaParams) ;
8440
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008441 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008442 return ;
8443}
Jeff Johnson295189b2012-06-20 16:38:30 -07008444/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008445 * FUNCTION: WDA_ExitBmpsReqCallback
8446 * Free memory and send Exit BMPS RSP back to PE.
8447 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
8448 */
8449void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8450{
8451 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308452 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008453 tExitBmpsParams *pExitBmpsRspParams;
8454
8455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8456 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8457
8458 if(NULL == pWdaParams)
8459 {
8460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8461 "%s: pWdaParams received NULL", __func__);
8462 VOS_ASSERT(0);
8463 return;
8464 }
8465
8466 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308467 if (NULL == pWDA)
8468 {
8469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8470 "%s:pWDA is NULL", __func__);
8471 VOS_ASSERT(0);
8472 return ;
8473 }
8474
Yue Ma7f44bbe2013-04-12 11:47:39 -07008475 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
8476 pExitBmpsRspParams->status = wdiStatus;
8477
8478 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8479 {
8480 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8481 vos_mem_free(pWdaParams);
8482 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
8483 }
8484
8485 return;
8486}
8487/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008488 * FUNCTION: WDA_ProcessExitBmpsReq
8489 * Request to WDI to Exit BMPS power state.
8490 */
8491VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
8492 tExitBmpsParams *pExitBmpsReqParams)
8493{
8494 WDI_Status status = WDI_STATUS_SUCCESS ;
8495 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
8496 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
8497 sizeof(WDI_ExitBmpsReqParamsType)) ;
8498 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008500 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008501 if(NULL == wdiExitBmpsReqParams)
8502 {
8503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008504 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008505 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008506 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008507 return VOS_STATUS_E_NOMEM;
8508 }
8509 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8510 if(NULL == pWdaParams)
8511 {
8512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008513 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008514 VOS_ASSERT(0);
8515 vos_mem_free(wdiExitBmpsReqParams);
8516 return VOS_STATUS_E_NOMEM;
8517 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008518 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07008519
8520 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
8521
Yue Ma7f44bbe2013-04-12 11:47:39 -07008522 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
8523 wdiExitBmpsReqParams->pUserData = pWdaParams;
8524
Jeff Johnson295189b2012-06-20 16:38:30 -07008525 /* Store param pointer as passed in by caller */
8526 /* store Params pass it to WDI */
8527 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
8528 pWdaParams->pWdaContext = pWDA;
8529 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008530 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008531 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008532 if(IS_WDI_STATUS_FAILURE(status))
8533 {
8534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8535 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008536 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8537 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008538 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008539 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008540 return CONVERT_WDI2VOS_STATUS(status) ;
8541}
Jeff Johnson295189b2012-06-20 16:38:30 -07008542/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008543 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008544 * send Enter UAPSD RSP back to PE
8545 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008546void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008547{
8548 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308549 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008550 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008552 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008553 if(NULL == pWdaParams)
8554 {
8555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008556 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008557 VOS_ASSERT(0) ;
8558 return ;
8559 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008560
8561 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308562 if (NULL == pWDA)
8563 {
8564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8565 "%s:pWDA is NULL", __func__);
8566 VOS_ASSERT(0);
8567 return ;
8568 }
8569
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008570 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
8571
8572 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008573 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008574
Jeff Johnson295189b2012-06-20 16:38:30 -07008575 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8576 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008577 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008578 return ;
8579}
Jeff Johnson295189b2012-06-20 16:38:30 -07008580/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008581 * FUNCTION: WDA_EnterUapsdReqCallback
8582 * Free memory and send Enter UAPSD RSP back to PE.
8583 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
8584 */
8585void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
8586{
8587 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8588 tWDA_CbContext *pWDA;
8589 tUapsdParams *pEnterUapsdRsqParams;
8590
8591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8592 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8593
8594 if(NULL == pWdaParams)
8595 {
8596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8597 "%s: pWdaParams received NULL", __func__);
8598 VOS_ASSERT(0);
8599 return;
8600 }
8601
8602 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308603 if (NULL == pWDA)
8604 {
8605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8606 "%s:pWDA is NULL", __func__);
8607 VOS_ASSERT(0);
8608 return ;
8609 }
8610
Yue Ma7f44bbe2013-04-12 11:47:39 -07008611 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
8612 pEnterUapsdRsqParams->status = wdiStatus;
8613
8614 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8615 {
8616 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8617 vos_mem_free(pWdaParams);
8618 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
8619 }
8620
8621 return;
8622}
8623/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008624 * FUNCTION: WDA_ProcessEnterUapsdReq
8625 * Request to WDI to Enter UAPSD power state.
8626 */
8627VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
8628 tUapsdParams *pEnterUapsdReqParams)
8629{
8630 WDI_Status status = WDI_STATUS_SUCCESS ;
8631 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
8632 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
8633 sizeof(WDI_EnterUapsdReqParamsType)) ;
8634 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008636 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008637 if(NULL == wdiEnterUapsdReqParams)
8638 {
8639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008640 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008641 VOS_ASSERT(0);
8642 return VOS_STATUS_E_NOMEM;
8643 }
8644 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8645 if(NULL == pWdaParams)
8646 {
8647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008648 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008649 VOS_ASSERT(0);
8650 vos_mem_free(wdiEnterUapsdReqParams);
8651 return VOS_STATUS_E_NOMEM;
8652 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008653 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
8654 pEnterUapsdReqParams->beDeliveryEnabled;
8655 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
8656 pEnterUapsdReqParams->beTriggerEnabled;
8657 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
8658 pEnterUapsdReqParams->bkDeliveryEnabled;
8659 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
8660 pEnterUapsdReqParams->bkTriggerEnabled;
8661 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
8662 pEnterUapsdReqParams->viDeliveryEnabled;
8663 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
8664 pEnterUapsdReqParams->viTriggerEnabled;
8665 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
8666 pEnterUapsdReqParams->voDeliveryEnabled;
8667 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
8668 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07008669 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008670
Yue Ma7f44bbe2013-04-12 11:47:39 -07008671 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
8672 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008673
Jeff Johnson295189b2012-06-20 16:38:30 -07008674 /* Store param pointer as passed in by caller */
8675 /* store Params pass it to WDI */
8676 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
8677 pWdaParams->pWdaContext = pWDA;
8678 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008679 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008680 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008681 if(IS_WDI_STATUS_FAILURE(status))
8682 {
8683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8684 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
8685 vos_mem_free(pWdaParams->wdaMsgParam) ;
8686 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8687 vos_mem_free(pWdaParams) ;
8688 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008689 return CONVERT_WDI2VOS_STATUS(status) ;
8690}
Jeff Johnson295189b2012-06-20 16:38:30 -07008691/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008692 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008693 * send Exit UAPSD RSP back to PE
8694 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008695void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008696{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008697
8698 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8699 tWDA_CbContext *pWDA;
8700 tExitUapsdParams *pExitUapsdRspParams;
8701
Jeff Johnson295189b2012-06-20 16:38:30 -07008702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008703 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008704 if(NULL == pWdaParams)
8705 {
8706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008707 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008708 VOS_ASSERT(0);
8709 return;
8710 }
8711
8712 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8713 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
8714
8715 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008716 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008717
8718 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8719 vos_mem_free(pWdaParams) ;
8720
8721 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008722 return ;
8723}
Jeff Johnson295189b2012-06-20 16:38:30 -07008724/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008725 * FUNCTION: WDA_ExitUapsdReqCallback
8726 * Free memory and send Exit UAPSD RSP back to PE.
8727 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
8728 */
8729void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
8730{
8731 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308732 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008733 tExitUapsdParams *pExitUapsdRspParams;
8734
8735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8736 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8737
8738 if(NULL == pWdaParams)
8739 {
8740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8741 "%s: pWdaParams received NULL", __func__);
8742 VOS_ASSERT(0);
8743 return;
8744 }
8745
8746 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308747 if (NULL == pWDA)
8748 {
8749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8750 "%s:pWDA is NULL", __func__);
8751 VOS_ASSERT(0);
8752 return ;
8753 }
8754
Yue Ma7f44bbe2013-04-12 11:47:39 -07008755 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
8756 pExitUapsdRspParams->status = wdiStatus;
8757
8758 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8759 {
8760 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8761 vos_mem_free(pWdaParams);
8762 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
8763 }
8764
8765 return;
8766}
8767/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008768 * FUNCTION: WDA_ProcessExitUapsdReq
8769 * Request to WDI to Exit UAPSD power state.
8770 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008771VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
8772 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008773{
8774 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008775 tWDA_ReqParams *pWdaParams ;
8776 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
8777 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
8778 sizeof(WDI_ExitUapsdReqParamsType)) ;
8779
Jeff Johnson295189b2012-06-20 16:38:30 -07008780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008781 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008782
8783 if(NULL == wdiExitUapsdReqParams)
8784 {
8785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008786 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008787 VOS_ASSERT(0);
8788 return VOS_STATUS_E_NOMEM;
8789 }
8790 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8791 if(NULL == pWdaParams)
8792 {
8793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008794 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008795 VOS_ASSERT(0);
8796 vos_mem_free(wdiExitUapsdReqParams);
8797 return VOS_STATUS_E_NOMEM;
8798 }
8799
8800 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008801 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
8802 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008803
8804 /* Store param pointer as passed in by caller */
8805 /* store Params pass it to WDI */
8806 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
8807 pWdaParams->pWdaContext = pWDA;
8808 pWdaParams->wdaMsgParam = pExitUapsdParams;
8809
Yue Ma7f44bbe2013-04-12 11:47:39 -07008810 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008811 if(IS_WDI_STATUS_FAILURE(status))
8812 {
8813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8814 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008815 vos_mem_free(pWdaParams->wdaMsgParam) ;
8816 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8817 vos_mem_free(pWdaParams) ;
8818
Jeff Johnson295189b2012-06-20 16:38:30 -07008819 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008820 return CONVERT_WDI2VOS_STATUS(status) ;
8821}
8822
Jeff Johnson295189b2012-06-20 16:38:30 -07008823/*
8824 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
8825 *
8826 */
8827void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
8828{
8829 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008831 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008832 if(NULL == pWdaParams)
8833 {
8834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008835 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008836 VOS_ASSERT(0) ;
8837 return ;
8838 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008839 if( pWdaParams != NULL )
8840 {
8841 if( pWdaParams->wdaWdiApiMsgParam != NULL )
8842 {
8843 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8844 }
8845 if( pWdaParams->wdaMsgParam != NULL )
8846 {
8847 vos_mem_free(pWdaParams->wdaMsgParam) ;
8848 }
8849 vos_mem_free(pWdaParams) ;
8850 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008851 return ;
8852}
Jeff Johnson295189b2012-06-20 16:38:30 -07008853/*
8854 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
8855 * Request to WDI to set the power save params at start.
8856 */
8857VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
8858 tSirPowerSaveCfg *pPowerSaveCfg)
8859{
8860 WDI_Status status = WDI_STATUS_SUCCESS ;
8861 tHalCfg *tlvStruct = NULL ;
8862 tANI_U8 *tlvStructStart = NULL ;
8863 v_PVOID_t *configParam;
8864 tANI_U32 configParamSize;
8865 tANI_U32 *configDataValue;
8866 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
8867 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008869 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008870 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
8871 {
8872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008873 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008874 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008875 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008876 return VOS_STATUS_E_FAILURE;
8877 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008878 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
8879 if (NULL == wdiPowerSaveCfg)
8880 {
8881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008882 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008883 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008884 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008885 return VOS_STATUS_E_NOMEM;
8886 }
8887 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8888 if(NULL == pWdaParams)
8889 {
8890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008891 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008892 VOS_ASSERT(0);
8893 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008894 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008895 return VOS_STATUS_E_NOMEM;
8896 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008897 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
8898 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07008899 if(NULL == configParam)
8900 {
8901 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08008902 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008903 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07008904 vos_mem_free(pWdaParams);
8905 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008906 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008907 return VOS_STATUS_E_NOMEM;
8908 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008909 vos_mem_set(configParam, configParamSize, 0);
8910 wdiPowerSaveCfg->pConfigBuffer = configParam;
8911 tlvStruct = (tHalCfg *)configParam;
8912 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008913 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
8914 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
8915 tlvStruct->length = sizeof(tANI_U32);
8916 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8917 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07008918 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8919 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008920 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
8921 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
8922 tlvStruct->length = sizeof(tANI_U32);
8923 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8924 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07008925 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8926 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008927 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
8928 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
8929 tlvStruct->length = sizeof(tANI_U32);
8930 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8931 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07008932 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8933 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008934 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
8935 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
8936 tlvStruct->length = sizeof(tANI_U32);
8937 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8938 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07008939 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8940 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008941 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
8942 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
8943 tlvStruct->length = sizeof(tANI_U32);
8944 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8945 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07008946 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8947 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008948 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
8949 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
8950 tlvStruct->length = sizeof(tANI_U32);
8951 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8952 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07008953 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8954 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008955 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
8956 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
8957 tlvStruct->length = sizeof(tANI_U32);
8958 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8959 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07008960 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8961 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008962 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
8963 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
8964 tlvStruct->length = sizeof(tANI_U32);
8965 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8966 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
8967 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8968 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008969 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
8970 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
8971 tlvStruct->length = sizeof(tANI_U32);
8972 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8973 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
8974 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8975 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008976 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
8977 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
8978 tlvStruct->length = sizeof(tANI_U32);
8979 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8980 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07008981 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8982 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008983 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
8984 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
8985 tlvStruct->length = sizeof(tANI_U32);
8986 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8987 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07008988 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8989 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008990 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008991 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008992 /* store Params pass it to WDI */
8993 pWdaParams->wdaMsgParam = configParam;
8994 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
8995 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008996 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
8997 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008998 if(IS_WDI_STATUS_FAILURE(status))
8999 {
9000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9001 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
9002 vos_mem_free(pWdaParams->wdaMsgParam);
9003 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9004 vos_mem_free(pWdaParams);
9005 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009006 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009007 return CONVERT_WDI2VOS_STATUS(status);
9008}
Jeff Johnson295189b2012-06-20 16:38:30 -07009009/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009010 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009011 *
9012 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009013void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009014{
Yue Ma7f44bbe2013-04-12 11:47:39 -07009015 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9016
Jeff Johnson295189b2012-06-20 16:38:30 -07009017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009018 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009019
9020 if(NULL == pWdaParams)
9021 {
9022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9023 "%s: pWdaParams received NULL", __func__);
9024 VOS_ASSERT(0);
9025 return ;
9026 }
9027
9028 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07009029 vos_mem_free(pWdaParams);
9030
Jeff Johnson295189b2012-06-20 16:38:30 -07009031 return ;
9032}
Jeff Johnson295189b2012-06-20 16:38:30 -07009033/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009034 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
9035 * Free memory.
9036 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
9037 */
9038void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
9039{
9040 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9041
9042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9043 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9044
9045 if(NULL == pWdaParams)
9046 {
9047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9048 "%s: pWdaParams received NULL", __func__);
9049 VOS_ASSERT(0);
9050 return;
9051 }
9052
9053 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9054 {
9055 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9056 vos_mem_free(pWdaParams);
9057 }
9058
9059 return;
9060}
9061/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009062 * FUNCTION: WDA_SetUapsdAcParamsReq
9063 * Request to WDI to set the UAPSD params for an ac (sta mode).
9064 */
9065VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
9066 tUapsdInfo *pUapsdInfo)
9067{
9068 WDI_Status status = WDI_STATUS_SUCCESS;
9069 tWDA_CbContext *pWDA = NULL ;
9070 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
9071 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
9072 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
9073 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009075 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009076 if(NULL == wdiUapsdParams)
9077 {
9078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009079 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009080 VOS_ASSERT(0);
9081 return VOS_STATUS_E_NOMEM;
9082 }
9083 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9084 if(NULL == pWdaParams)
9085 {
9086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009087 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009088 VOS_ASSERT(0);
9089 vos_mem_free(wdiUapsdParams);
9090 return VOS_STATUS_E_NOMEM;
9091 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009092 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
9093 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
9094 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
9095 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
9096 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
9097 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009098 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
9099 wdiUapsdParams->pUserData = pWdaParams;
9100
Jeff Johnson295189b2012-06-20 16:38:30 -07009101 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07009102 pWdaParams->pWdaContext = pWDA;
9103 /* Store param pointer as passed in by caller */
9104 pWdaParams->wdaMsgParam = pUapsdInfo;
9105 /* store Params pass it to WDI */
9106 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009107 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009108 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07009109 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009110 if(IS_WDI_STATUS_FAILURE(status))
9111 {
9112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9113 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
9114 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9115 vos_mem_free(pWdaParams);
9116 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009117 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
9118 return VOS_STATUS_SUCCESS;
9119 else
9120 return VOS_STATUS_E_FAILURE;
9121
Jeff Johnson295189b2012-06-20 16:38:30 -07009122}
9123/*
9124 * FUNCTION: WDA_ClearUapsdAcParamsReq
9125 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
9126 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
9127 * and again enter the UPASD with the modified params. Hence the disable
9128 * function was kept empty.
9129 *
9130 */
9131VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
9132{
9133 /* do nothing */
9134 return VOS_STATUS_SUCCESS;
9135}
Jeff Johnson295189b2012-06-20 16:38:30 -07009136/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009137 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009138 *
9139 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009140void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009141{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009142 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9143
Jeff Johnson295189b2012-06-20 16:38:30 -07009144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009145 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009146
9147 if(NULL == pWdaParams)
9148 {
9149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009150 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009151 VOS_ASSERT(0) ;
9152 return ;
9153 }
9154
9155 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9156 vos_mem_free(pWdaParams->wdaMsgParam);
9157 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009158
Jeff Johnson295189b2012-06-20 16:38:30 -07009159 //print a msg, nothing else to do
9160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009161 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009162 return ;
9163}
Jeff Johnson295189b2012-06-20 16:38:30 -07009164/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009165 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
9166 * Free memory.
9167 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
9168 */
9169void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
9170{
9171 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9172
9173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9174 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9175
9176 if(NULL == pWdaParams)
9177 {
9178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9179 "%s: pWdaParams received NULL", __func__);
9180 VOS_ASSERT(0);
9181 return;
9182 }
9183
9184 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9185 {
9186 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9187 vos_mem_free(pWdaParams->wdaMsgParam);
9188 vos_mem_free(pWdaParams);
9189 }
9190
9191 return;
9192}
9193/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009194 * FUNCTION: WDA_UpdateUapsdParamsReq
9195 * Request to WDI to update UAPSD params (in softAP mode) for a station.
9196 */
9197VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
9198 tUpdateUapsdParams* pUpdateUapsdInfo)
9199{
9200 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009201 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009202 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
9203 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
9204 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009205 tWDA_ReqParams *pWdaParams = NULL;
9206
Jeff Johnson295189b2012-06-20 16:38:30 -07009207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009208 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009209 if(NULL == wdiUpdateUapsdParams)
9210 {
9211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009212 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009213 VOS_ASSERT(0);
9214 return VOS_STATUS_E_NOMEM;
9215 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009216 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
9217 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
9218 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009219 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
9220 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009221
9222 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9223 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009224 {
9225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009226 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009227 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009228 vos_mem_free(pUpdateUapsdInfo);
9229 vos_mem_free(wdiUpdateUapsdParams);
9230 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07009231 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009232 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009233 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07009234 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009235 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
9236 pWdaParams->pWdaContext = pWDA;
9237
Jeff Johnson43971f52012-07-17 12:26:56 -07009238 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009239 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009240 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009241
Jeff Johnson43971f52012-07-17 12:26:56 -07009242 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009243 {
9244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9245 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009246 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
9247 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9248 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009249 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009250 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009251 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009252}
Jeff Johnson295189b2012-06-20 16:38:30 -07009253/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009254 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009255 *
9256 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009257void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009258{
9259 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009261 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009262 if(WDI_STATUS_SUCCESS != wdiStatus)
9263 {
9264 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009265 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009266 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009267 if(NULL == pWdaParams)
9268 {
9269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009270 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009271 VOS_ASSERT(0) ;
9272 return ;
9273 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009274 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9275 vos_mem_free(pWdaParams->wdaMsgParam);
9276 vos_mem_free(pWdaParams);
9277 return ;
9278}
Jeff Johnson295189b2012-06-20 16:38:30 -07009279/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009280 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
9281 * Free memory.
9282 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
9283 */
9284void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9285{
9286 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9287
9288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9289 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9290
9291 if(NULL == pWdaParams)
9292 {
9293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9294 "%s: pWdaParams received NULL", __func__);
9295 VOS_ASSERT(0);
9296 return;
9297 }
9298
9299 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9300 {
9301 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9302 vos_mem_free(pWdaParams->wdaMsgParam);
9303 vos_mem_free(pWdaParams);
9304 }
9305
9306 return;
9307}
9308/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009309 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
9310 *
9311 */
9312VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
9313 tSirWlanSetRxpFilters *pWlanSuspendParam)
9314{
Jeff Johnson295189b2012-06-20 16:38:30 -07009315 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009316 WDI_Status wstatus;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +05309317 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009318 tWDA_ReqParams *pWdaParams ;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +05309319 /* Sanity Check
9320 * This is very unlikely and add assert to collect more info next time */
9321 if(NULL == pWlanSuspendParam)
9322 {
9323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9324 "%s: pWlanSuspendParam received NULL", __func__);
9325 VOS_ASSERT(0) ;
9326 return VOS_STATUS_E_FAULT;
9327 }
9328 wdiRxpFilterParams = (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
9329 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009331 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009332 if(NULL == wdiRxpFilterParams)
9333 {
9334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009335 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009336 VOS_ASSERT(0);
9337 vos_mem_free(pWlanSuspendParam);
9338 return VOS_STATUS_E_NOMEM;
9339 }
9340 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9341 if(NULL == pWdaParams)
9342 {
9343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009344 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009345 VOS_ASSERT(0);
9346 vos_mem_free(wdiRxpFilterParams);
9347 vos_mem_free(pWlanSuspendParam);
9348 return VOS_STATUS_E_NOMEM;
9349 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009350 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
9351 pWlanSuspendParam->setMcstBcstFilter;
9352 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
9353 pWlanSuspendParam->configuredMcstBcstFilterSetting;
9354
Yue Ma7f44bbe2013-04-12 11:47:39 -07009355 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
9356 wdiRxpFilterParams->pUserData = pWdaParams;
9357
Jeff Johnson295189b2012-06-20 16:38:30 -07009358 pWdaParams->pWdaContext = pWDA;
9359 pWdaParams->wdaMsgParam = pWlanSuspendParam;
9360 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009361 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009362 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07009363 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009364 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009365 {
9366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9367 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009368 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009369 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9370 vos_mem_free(pWdaParams->wdaMsgParam);
9371 vos_mem_free(pWdaParams);
9372 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009373 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009374}
Jeff Johnson295189b2012-06-20 16:38:30 -07009375/*
9376 * FUNCTION: WDA_WdiIndicationCallback
9377 *
9378 */
9379void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
9380 void* pUserData)
9381{
9382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009383 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009384}
Jeff Johnson295189b2012-06-20 16:38:30 -07009385/*
9386 * FUNCTION: WDA_ProcessWlanSuspendInd
9387 *
9388 */
9389VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
9390 tSirWlanSuspendParam *pWlanSuspendParam)
9391{
9392 WDI_Status wdiStatus;
9393 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009395 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009396 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
9397 pWlanSuspendParam->configuredMcstBcstFilterSetting;
9398 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
9399 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07009401 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
9402 if(WDI_STATUS_PENDING == wdiStatus)
9403 {
9404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009405 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009406 }
9407 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
9408 {
9409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009410 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009411 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009412 vos_mem_free(pWlanSuspendParam);
9413 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9414}
9415
Chet Lanctot186b5732013-03-18 10:26:30 -07009416#ifdef WLAN_FEATURE_11W
9417/*
9418 * FUNCTION: WDA_ProcessExcludeUnecryptInd
9419 *
9420 */
9421VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
9422 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
9423{
9424 WDI_Status wdiStatus;
9425 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
9426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9427 "------> %s ", __func__);
9428
9429 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
9430 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
9431 sizeof(tSirMacAddr));
9432
9433 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
9434 wdiExclUnencryptParams.pUserData = pWDA;
9435
9436 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
9437 if(WDI_STATUS_PENDING == wdiStatus)
9438 {
9439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9440 "Pending received for %s:%d ", __func__, __LINE__ );
9441 }
9442 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
9443 {
9444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9445 "Failure in %s:%d ", __func__, __LINE__ );
9446 }
9447 vos_mem_free(pExclUnencryptParam);
9448 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9449}
9450#endif
9451
Jeff Johnson295189b2012-06-20 16:38:30 -07009452/*
9453 * FUNCTION: WDA_ProcessWlanResumeCallback
9454 *
9455 */
9456void WDA_ProcessWlanResumeCallback(
9457 WDI_SuspendResumeRspParamsType *resumeRspParams,
9458 void* pUserData)
9459{
9460 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009462 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009463 if(NULL == pWdaParams)
9464 {
9465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009466 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009467 VOS_ASSERT(0) ;
9468 return ;
9469 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009470 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
9471 {
9472 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009473 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009474 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009475 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9476 vos_mem_free(pWdaParams->wdaMsgParam);
9477 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009478 return ;
9479}
Jeff Johnson295189b2012-06-20 16:38:30 -07009480/*
9481 * FUNCTION: WDA_ProcessWlanResumeReq
9482 *
9483 */
9484VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
9485 tSirWlanResumeParam *pWlanResumeParam)
9486{
9487 WDI_Status wdiStatus;
9488 WDI_ResumeParamsType *wdiResumeParams =
9489 (WDI_ResumeParamsType *)vos_mem_malloc(
9490 sizeof(WDI_ResumeParamsType) ) ;
9491 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009493 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009494 if(NULL == wdiResumeParams)
9495 {
9496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009497 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009498 VOS_ASSERT(0);
9499 return VOS_STATUS_E_NOMEM;
9500 }
9501 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9502 if(NULL == pWdaParams)
9503 {
9504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009505 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009506 VOS_ASSERT(0);
9507 vos_mem_free(wdiResumeParams);
9508 return VOS_STATUS_E_NOMEM;
9509 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009510 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
9511 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07009513 wdiResumeParams->wdiReqStatusCB = NULL;
9514 pWdaParams->wdaMsgParam = pWlanResumeParam;
9515 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
9516 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009517 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
9518 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
9519 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009520 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9521 {
9522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9523 "Failure in Host Resume REQ WDI API, free all the memory " );
9524 VOS_ASSERT(0);
9525 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9526 vos_mem_free(pWdaParams->wdaMsgParam);
9527 vos_mem_free(pWdaParams);
9528 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009529 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9530}
9531
Jeff Johnson295189b2012-06-20 16:38:30 -07009532/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009533 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009534 *
9535 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009536void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009537{
9538 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009540 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009541 if(NULL == pWdaParams)
9542 {
9543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009544 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009545 VOS_ASSERT(0) ;
9546 return ;
9547 }
9548
9549 vos_mem_free(pWdaParams->wdaMsgParam) ;
9550 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9551 vos_mem_free(pWdaParams) ;
9552 /*
9553 * No respone required for SetBeaconFilter req so just free the request
9554 * param here
9555 */
9556
Jeff Johnson295189b2012-06-20 16:38:30 -07009557 return ;
9558}
Jeff Johnson295189b2012-06-20 16:38:30 -07009559/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009560 * FUNCTION: WDA_SetBeaconFilterReqCallback
9561 * Free memory.
9562 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
9563 */
9564void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9565{
9566 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9567
9568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9569 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9570
9571 if(NULL == pWdaParams)
9572 {
9573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9574 "%s: pWdaParams received NULL", __func__);
9575 VOS_ASSERT(0);
9576 return;
9577 }
9578
9579 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9580 {
9581 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9582 vos_mem_free(pWdaParams->wdaMsgParam);
9583 vos_mem_free(pWdaParams);
9584 }
9585
9586 return;
9587}
9588/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009589 * FUNCTION: WDA_SetBeaconFilterReq
9590 * Request to WDI to send the beacon filtering related information.
9591 */
9592VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
9593 tBeaconFilterMsg* pBeaconFilterInfo)
9594{
9595 WDI_Status status = WDI_STATUS_SUCCESS;
9596 tANI_U8 *dstPtr, *srcPtr;
9597 tANI_U8 filterLength;
9598 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
9599 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
9600 sizeof(WDI_BeaconFilterReqParamsType) ) ;
9601 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009603 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009604 if(NULL == wdiBeaconFilterInfo)
9605 {
9606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009607 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009608 VOS_ASSERT(0);
9609 return VOS_STATUS_E_NOMEM;
9610 }
9611 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9612 if(NULL == pWdaParams)
9613 {
9614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009615 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009616 VOS_ASSERT(0);
9617 vos_mem_free(wdiBeaconFilterInfo);
9618 return VOS_STATUS_E_NOMEM;
9619 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009620 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
9621 pBeaconFilterInfo->beaconInterval;
9622 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
9623 pBeaconFilterInfo->capabilityInfo;
9624 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
9625 pBeaconFilterInfo->capabilityMask;
9626 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07009627
9628 //Fill the BssIdx
9629 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
9630
Jeff Johnson295189b2012-06-20 16:38:30 -07009631 //Fill structure with info contained in the beaconFilterTable
9632 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
9633 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
9634 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
9635 if(WDI_BEACON_FILTER_LEN < filterLength)
9636 {
9637 filterLength = WDI_BEACON_FILTER_LEN;
9638 }
9639 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009640 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
9641 wdiBeaconFilterInfo->pUserData = pWdaParams;
9642
Jeff Johnson295189b2012-06-20 16:38:30 -07009643 /* Store param pointer as passed in by caller */
9644 /* store Params pass it to WDI */
9645 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
9646 pWdaParams->pWdaContext = pWDA;
9647 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
9648
Jeff Johnson295189b2012-06-20 16:38:30 -07009649 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009650 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009651 if(IS_WDI_STATUS_FAILURE(status))
9652 {
9653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9654 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
9655 vos_mem_free(pWdaParams->wdaMsgParam) ;
9656 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9657 vos_mem_free(pWdaParams) ;
9658 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009659 return CONVERT_WDI2VOS_STATUS(status) ;
9660}
Jeff Johnson295189b2012-06-20 16:38:30 -07009661/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009662 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009663 *
9664 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009665void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009666{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009667 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9668
Jeff Johnson295189b2012-06-20 16:38:30 -07009669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009670 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009671
9672 if(NULL == pWdaParams)
9673 {
9674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009675 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009676 VOS_ASSERT(0) ;
9677 return ;
9678 }
9679
9680 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9681 vos_mem_free(pWdaParams->wdaMsgParam);
9682 vos_mem_free(pWdaParams);
9683
Jeff Johnson295189b2012-06-20 16:38:30 -07009684 //print a msg, nothing else to do
9685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009686 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009687 return ;
9688}
Yue Ma7f44bbe2013-04-12 11:47:39 -07009689/*
9690 * FUNCTION: WDA_RemBeaconFilterReqCallback
9691 * Free memory.
9692 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
9693 */
9694void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9695{
9696 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9697
9698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9699 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9700
9701 if(NULL == pWdaParams)
9702 {
9703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9704 "%s: pWdaParams received NULL", __func__);
9705 VOS_ASSERT(0);
9706 return;
9707 }
9708
9709 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9710 {
9711 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9712 vos_mem_free(pWdaParams->wdaMsgParam);
9713 vos_mem_free(pWdaParams);
9714 }
9715
9716 return;
9717}
Jeff Johnson295189b2012-06-20 16:38:30 -07009718 // TODO: PE does not have this feature for now implemented,
9719 // but the support for removing beacon filter exists between
9720 // HAL and FW. This function can be called whenever PE defines
9721 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07009722/*
9723 * FUNCTION: WDA_RemBeaconFilterReq
9724 * Request to WDI to send the removal of beacon filtering related information.
9725 */
9726VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
9727 tRemBeaconFilterMsg* pBeaconFilterInfo)
9728{
9729 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009730 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009731 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
9732 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
9733 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009734 tWDA_ReqParams *pWdaParams ;
9735
Jeff Johnson295189b2012-06-20 16:38:30 -07009736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009737 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009738 if(NULL == wdiBeaconFilterInfo)
9739 {
9740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009741 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009742 VOS_ASSERT(0);
9743 return VOS_STATUS_E_NOMEM;
9744 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009745 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9746 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009747 {
9748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009749 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009750 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009751 vos_mem_free(wdiBeaconFilterInfo);
9752 vos_mem_free(pBeaconFilterInfo);
9753 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07009754 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009755
9756 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
9757 pBeaconFilterInfo->ucIeCount;
9758 //Fill structure with info contained in the ucRemIeId
9759 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
9760 pBeaconFilterInfo->ucRemIeId,
9761 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
9762 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
9763 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009764
9765 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009766 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07009767 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009768 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
9769
9770 pWdaParams->pWdaContext = pWDA;
9771
Jeff Johnson43971f52012-07-17 12:26:56 -07009772 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009773 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009774 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009775 {
9776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9777 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009778 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009779 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9780 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009781 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009782 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009783 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009784}
Jeff Johnson295189b2012-06-20 16:38:30 -07009785/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009786 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009787 *
9788 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009789void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009790{
9791 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009793 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009794 if(NULL == pWdaParams)
9795 {
9796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009797 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009798 VOS_ASSERT(0) ;
9799 return ;
9800 }
9801
9802 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9803 vos_mem_free(pWdaParams) ;
9804
Jeff Johnson295189b2012-06-20 16:38:30 -07009805 return ;
9806}
Jeff Johnson295189b2012-06-20 16:38:30 -07009807/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009808 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
9809 * Free memory.
9810 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
9811 */
9812void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
9813{
9814 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9815
9816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9817 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9818
9819 if(NULL == pWdaParams)
9820 {
9821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9822 "%s: pWdaParams received NULL", __func__);
9823 VOS_ASSERT(0);
9824 return;
9825 }
9826
9827 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9828 {
9829 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9830 vos_mem_free(pWdaParams);
9831 }
9832
9833 return;
9834}
9835/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009836 * FUNCTION: WDA_SetRSSIThresholdsReq
9837 * Request to WDI to set the RSSI thresholds (sta mode).
9838 */
9839VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
9840{
9841 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009842 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009843 tWDA_CbContext *pWDA = NULL ;
9844 v_PVOID_t pVosContext = NULL;
9845 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
9846 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
9847 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
9848 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009850 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009851 if(NULL == wdiRSSIThresholdsInfo)
9852 {
9853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009854 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009855 VOS_ASSERT(0);
9856 return VOS_STATUS_E_NOMEM;
9857 }
9858 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9859 if(NULL == pWdaParams)
9860 {
9861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009862 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009863 VOS_ASSERT(0);
9864 vos_mem_free(wdiRSSIThresholdsInfo);
9865 return VOS_STATUS_E_NOMEM;
9866 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009867 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07009868 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
9869 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
9870 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07009871 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
9872 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
9873 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07009874 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
9875 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
9876 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009877 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
9878 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009879 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
9880 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
9881
Jeff Johnson295189b2012-06-20 16:38:30 -07009882 /* Store param pointer as passed in by caller */
9883 /* store Params pass it to WDI */
9884 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
9885 pWdaParams->pWdaContext = pWDA;
9886 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07009887 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009888 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009889 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009890 {
9891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9892 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009893 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009894 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9895 vos_mem_free(pWdaParams) ;
9896 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009897 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009898
9899}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009900/*
Yue Madb90ac12013-04-04 13:39:13 -07009901 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009902 *
9903 */
Yue Madb90ac12013-04-04 13:39:13 -07009904void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009905{
9906 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9907
9908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009909 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009910 if(NULL == pWdaParams)
9911 {
9912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009913 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009914 VOS_ASSERT(0) ;
9915 return ;
9916 }
9917
9918 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9919 vos_mem_free(pWdaParams->wdaMsgParam);
9920 vos_mem_free(pWdaParams) ;
9921
9922 //print a msg, nothing else to do
9923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -07009924 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009925 return ;
9926}
Jeff Johnson295189b2012-06-20 16:38:30 -07009927/*
Yue Madb90ac12013-04-04 13:39:13 -07009928 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -07009929 * Free memory.
9930 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -07009931 */
9932void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
9933{
9934 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9935
9936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9937 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9938
9939 if(NULL == pWdaParams)
9940 {
9941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9942 "%s: Invalid pWdaParams pointer", __func__);
9943 VOS_ASSERT(0);
9944 return;
9945 }
9946
9947 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9948 {
9949 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9950 vos_mem_free(pWdaParams->wdaMsgParam);
9951 vos_mem_free(pWdaParams);
9952 }
9953
9954 return;
9955}
9956/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009957 * FUNCTION: WDA_ProcessHostOffloadReq
9958 * Request to WDI to set the filter to minimize unnecessary host wakeup due
9959 * to broadcast traffic (sta mode).
9960 */
9961VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
9962 tSirHostOffloadReq *pHostOffloadParams)
9963{
9964 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009965 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009966 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
9967 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
9968 sizeof(WDI_HostOffloadReqParamsType)) ;
9969 tWDA_ReqParams *pWdaParams ;
9970
9971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009972 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07009973
9974 if(NULL == wdiHostOffloadInfo)
9975 {
9976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009977 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009978 VOS_ASSERT(0);
9979 return VOS_STATUS_E_NOMEM;
9980 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009981 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9982 if(NULL == pWdaParams)
9983 {
9984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009985 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009986 VOS_ASSERT(0);
9987 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009988 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009989 return VOS_STATUS_E_NOMEM;
9990 }
9991
9992 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
9993 pHostOffloadParams->offloadType;
9994 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
9995 pHostOffloadParams->enableOrDisable;
9996
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009997 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
9998 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
9999
Jeff Johnson295189b2012-06-20 16:38:30 -070010000 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
10001 {
10002 case SIR_IPV4_ARP_REPLY_OFFLOAD:
10003 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
10004 pHostOffloadParams->params.hostIpv4Addr,
10005 4);
10006 break;
10007 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
10008 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
10009 pHostOffloadParams->params.hostIpv6Addr,
10010 16);
10011 break;
10012 case SIR_IPV6_NS_OFFLOAD:
10013 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
10014 pHostOffloadParams->params.hostIpv6Addr,
10015 16);
10016
10017#ifdef WLAN_NS_OFFLOAD
10018 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
10019 {
10020 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
10021 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
10022 16);
10023 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
10024 }
10025 else
10026 {
10027 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
10028 }
10029
10030 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
10031 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
10032 16);
10033 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
10034 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
10035 6);
10036
10037 //Only two are supported so let's go through them without a loop
10038 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
10039 {
10040 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
10041 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
10042 16);
10043 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
10044 }
10045 else
10046 {
10047 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
10048 }
10049
10050 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
10051 {
10052 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
10053 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
10054 16);
10055 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
10056 }
10057 else
10058 {
10059 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
10060 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +053010061 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
10062 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070010063 break;
10064#endif //WLAN_NS_OFFLOAD
10065 default:
10066 {
10067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10068 "No Handling for Offload Type %x in WDA "
10069 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
10070 //WDA_VOS_ASSERT(0) ;
10071 }
10072 }
Yue Madb90ac12013-04-04 13:39:13 -070010073 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
10074 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010075
Jeff Johnson295189b2012-06-20 16:38:30 -070010076 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010077 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010078 /* store Params pass it to WDI */
10079 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
10080 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010081
Jeff Johnson295189b2012-06-20 16:38:30 -070010082
Jeff Johnson43971f52012-07-17 12:26:56 -070010083 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -070010084 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010085
Jeff Johnson43971f52012-07-17 12:26:56 -070010086 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010087 {
10088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
c_hpothu86feba52014-10-28 15:51:18 +053010089 "Failure in host offload REQ WDI API, free all the memory %d",
10090 wstatus);
Jeff Johnson43971f52012-07-17 12:26:56 -070010091 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010092 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10093 vos_mem_free(pWdaParams->wdaMsgParam);
10094 vos_mem_free(pWdaParams) ;
10095 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010096 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010097
10098}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010099/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010100 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010101 *
10102 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010103void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010104{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010105 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10106
Jeff Johnson295189b2012-06-20 16:38:30 -070010107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010108 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010109
10110 if(NULL == pWdaParams)
10111 {
10112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010113 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010114 VOS_ASSERT(0) ;
10115 return ;
10116 }
10117
10118 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10119 vos_mem_free(pWdaParams->wdaMsgParam);
10120 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010121
Jeff Johnson295189b2012-06-20 16:38:30 -070010122 //print a msg, nothing else to do
10123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010124 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010125 return ;
10126}
Jeff Johnson295189b2012-06-20 16:38:30 -070010127/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010128 * FUNCTION: WDA_KeepAliveReqCallback
10129 * Free memory.
10130 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
10131 */
10132void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
10133{
10134 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10135
10136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10137 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10138
10139 if(NULL == pWdaParams)
10140 {
10141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10142 "%s: pWdaParams received NULL", __func__);
10143 VOS_ASSERT(0);
10144 return;
10145 }
10146
10147 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10148 {
10149 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10150 vos_mem_free(pWdaParams->wdaMsgParam);
10151 vos_mem_free(pWdaParams);
10152 }
10153
10154 return;
10155}
10156/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010157 * FUNCTION: WDA_ProcessKeepAliveReq
10158 * Request to WDI to send Keep Alive packets to minimize unnecessary host
10159 * wakeup due to broadcast traffic (sta mode).
10160 */
10161VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
10162 tSirKeepAliveReq *pKeepAliveParams)
10163{
10164 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010165 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010166 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
10167 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
10168 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010169 tWDA_ReqParams *pWdaParams;
10170
Jeff Johnson295189b2012-06-20 16:38:30 -070010171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010172 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010173 if(NULL == wdiKeepAliveInfo)
10174 {
10175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010176 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010177 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010178 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010179 return VOS_STATUS_E_NOMEM;
10180 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010181
10182 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10183 if(NULL == pWdaParams)
10184 {
10185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010186 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010187 VOS_ASSERT(0);
10188 vos_mem_free(wdiKeepAliveInfo);
10189 vos_mem_free(pKeepAliveParams);
10190 return VOS_STATUS_E_NOMEM;
10191 }
10192
Jeff Johnson295189b2012-06-20 16:38:30 -070010193 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
10194 pKeepAliveParams->packetType;
10195 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
10196 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010197
10198 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
10199 pKeepAliveParams->bssId,
10200 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010201
10202 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
10203 {
10204 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
10205 pKeepAliveParams->hostIpv4Addr,
10206 SIR_IPV4_ADDR_LEN);
10207 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
10208 pKeepAliveParams->destIpv4Addr,
10209 SIR_IPV4_ADDR_LEN);
10210 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
10211 pKeepAliveParams->destMacAddr,
10212 SIR_MAC_ADDR_LEN);
10213 }
10214 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
10215 {
10216 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
10217 SIR_IPV4_ADDR_LEN,
10218 0);
10219 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
10220 SIR_IPV4_ADDR_LEN,
10221 0);
10222 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
10223 SIR_MAC_ADDR_LEN,
10224 0);
10225 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010226 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
10227 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010228
Jeff Johnson295189b2012-06-20 16:38:30 -070010229 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010230 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010231 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010232 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
10233 pWdaParams->pWdaContext = pWDA;
10234
Jeff Johnson295189b2012-06-20 16:38:30 -070010235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
10236 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
10237 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
10238 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
10239 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
10240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
10241 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
10242 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
10243 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
10244 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
10245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10246 "WDA DMAC : %d:%d:%d:%d:%d:%d",
10247 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
10248 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
10249 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
10250 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
10251 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
10252 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
10253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10254 "TimePeriod %d PacketType %d",
10255 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
10256 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -070010257 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010258 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010259
Jeff Johnson43971f52012-07-17 12:26:56 -070010260 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010261 {
10262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10263 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010264 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010265 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10266 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070010267 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010268 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010269 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010270
10271}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010272/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010273 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010274 *
10275 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010276void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010277 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
10278 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010279{
10280 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010282 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010283 if(NULL == pWdaParams)
10284 {
10285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010286 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010287 VOS_ASSERT(0) ;
10288 return ;
10289 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010290 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10291 vos_mem_free(pWdaParams->wdaMsgParam);
10292 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010293 return ;
10294}
Jeff Johnson295189b2012-06-20 16:38:30 -070010295/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010296 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
10297 * Free memory.
10298 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
10299 */
10300void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
10301{
10302 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10303
10304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10305 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10306
10307 if(NULL == pWdaParams)
10308 {
10309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10310 "%s: pWdaParams received NULL", __func__);
10311 VOS_ASSERT(0);
10312 return;
10313 }
10314
10315 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10316 {
10317 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10318 vos_mem_free(pWdaParams->wdaMsgParam);
10319 vos_mem_free(pWdaParams);
10320 }
10321
10322 return;
10323}
10324
10325/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010326 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
10327 * Request to WDI to add WOWL Bcast pattern
10328 */
10329VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
10330 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
10331{
10332 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010333 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010334 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
10335 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
10336 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
10337 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010339 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010340 if(NULL == wdiWowlAddBcPtrnInfo)
10341 {
10342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010343 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010344 VOS_ASSERT(0);
10345 return VOS_STATUS_E_NOMEM;
10346 }
10347 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10348 if(NULL == pWdaParams)
10349 {
10350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010351 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010352 VOS_ASSERT(0);
10353 vos_mem_free(wdiWowlAddBcPtrnInfo);
10354 return VOS_STATUS_E_NOMEM;
10355 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010356 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
10357 pWowlAddBcPtrnParams->ucPatternId;
10358 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
10359 pWowlAddBcPtrnParams->ucPatternByteOffset;
10360 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
10361 pWowlAddBcPtrnParams->ucPatternMaskSize;
10362 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
10363 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -070010364 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
10365 {
10366 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
10367 pWowlAddBcPtrnParams->ucPattern,
10368 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
10369 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
10370 pWowlAddBcPtrnParams->ucPatternMask,
10371 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
10372 }
10373 else
10374 {
10375 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
10376 pWowlAddBcPtrnParams->ucPattern,
10377 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10378 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
10379 pWowlAddBcPtrnParams->ucPatternMask,
10380 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10381
10382 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
10383 pWowlAddBcPtrnParams->ucPatternExt,
10384 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10385 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
10386 pWowlAddBcPtrnParams->ucPatternMaskExt,
10387 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10388 }
10389
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010390 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
10391 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
10392
Yue Ma7f44bbe2013-04-12 11:47:39 -070010393 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
10394 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010395 /* Store param pointer as passed in by caller */
10396 /* store Params pass it to WDI */
10397 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
10398 pWdaParams->pWdaContext = pWDA;
10399 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010400 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010401 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010402 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010403 {
10404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10405 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010406 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010407 vos_mem_free(pWdaParams->wdaMsgParam) ;
10408 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10409 vos_mem_free(pWdaParams) ;
10410 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010411 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010412
10413}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010414/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010415 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010416 *
10417 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010418void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010419 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
10420 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010421{
10422 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010424 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010425 if(NULL == pWdaParams)
10426 {
10427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010428 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010429 VOS_ASSERT(0) ;
10430 return ;
10431 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010432 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10433 vos_mem_free(pWdaParams->wdaMsgParam);
10434 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010435 return ;
10436}
Jeff Johnson295189b2012-06-20 16:38:30 -070010437/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010438 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
10439 * Free memory.
10440 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
10441 */
10442void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
10443{
10444 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10445
10446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10447 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10448
10449 if(NULL == pWdaParams)
10450 {
10451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10452 "%s: pWdaParams received NULL", __func__);
10453 VOS_ASSERT(0);
10454 return;
10455 }
10456
10457 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10458 {
10459 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10460 vos_mem_free(pWdaParams->wdaMsgParam);
10461 vos_mem_free(pWdaParams);
10462 }
10463
10464 return;
10465}
10466/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010467 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
10468 * Request to WDI to delete WOWL Bcast pattern
10469 */
10470VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
10471 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
10472{
10473 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010474 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010475 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
10476 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
10477 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
10478 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010480 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010481 if(NULL == wdiWowlDelBcPtrnInfo)
10482 {
10483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010484 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010485 VOS_ASSERT(0);
10486 return VOS_STATUS_E_NOMEM;
10487 }
10488 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10489 if(NULL == pWdaParams)
10490 {
10491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010492 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010493 VOS_ASSERT(0);
10494 vos_mem_free(wdiWowlDelBcPtrnInfo);
10495 return VOS_STATUS_E_NOMEM;
10496 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010497 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
10498 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010499
10500 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
10501 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
10502
Yue Ma7f44bbe2013-04-12 11:47:39 -070010503 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
10504 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010505 /* Store param pointer as passed in by caller */
10506 /* store Params pass it to WDI */
10507 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
10508 pWdaParams->pWdaContext = pWDA;
10509 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010510 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010511 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010512 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010513 {
10514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10515 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010516 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010517 vos_mem_free(pWdaParams->wdaMsgParam) ;
10518 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10519 vos_mem_free(pWdaParams) ;
10520 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010521 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010522
10523}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010524/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010525 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010526 *
10527 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010528void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010529{
10530 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010531 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010532 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010534 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010535 if(NULL == pWdaParams)
10536 {
10537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010538 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010539 VOS_ASSERT(0) ;
10540 return ;
10541 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010542 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010543 if (NULL == pWDA)
10544 {
10545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10546 "%s:pWDA is NULL", __func__);
10547 VOS_ASSERT(0);
10548 return ;
10549 }
10550
Jeff Johnson295189b2012-06-20 16:38:30 -070010551 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
10552
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010553 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
10554
Jeff Johnson295189b2012-06-20 16:38:30 -070010555 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10556 vos_mem_free(pWdaParams) ;
10557
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010558 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010559 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -070010560 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010561 return ;
10562}
Jeff Johnson295189b2012-06-20 16:38:30 -070010563/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010564 * FUNCTION: WDA_WowlEnterReqCallback
10565 * Free memory and send WOWL Enter RSP back to PE.
10566 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
10567 */
10568void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
10569{
10570 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010571 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010572 tSirHalWowlEnterParams *pWowlEnterParams;
10573
10574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10575 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10576
10577 if(NULL == pWdaParams)
10578 {
10579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10580 "%s: pWdaParams received NULL", __func__);
10581 VOS_ASSERT(0);
10582 return;
10583 }
10584
10585 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010586 if (NULL == pWDA)
10587 {
10588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10589 "%s:pWDA is NULL", __func__);
10590 VOS_ASSERT(0);
10591 return ;
10592 }
10593
Yue Ma7f44bbe2013-04-12 11:47:39 -070010594 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
10595 pWowlEnterParams->status = wdiStatus;
10596
10597 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10598 {
10599 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10600 vos_mem_free(pWdaParams);
10601 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
10602 }
10603
10604 return;
10605}
10606/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010607 * FUNCTION: WDA_ProcessWowlEnterReq
10608 * Request to WDI to enter WOWL
10609 */
10610VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
10611 tSirHalWowlEnterParams *pWowlEnterParams)
10612{
10613 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010614 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010615 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
10616 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
10617 sizeof(WDI_WowlEnterReqParamsType)) ;
10618 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010620 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010621 if(NULL == wdiWowlEnterInfo)
10622 {
10623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010624 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010625 VOS_ASSERT(0);
10626 return VOS_STATUS_E_NOMEM;
10627 }
10628 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10629 if(NULL == pWdaParams)
10630 {
10631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010632 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010633 VOS_ASSERT(0);
10634 vos_mem_free(wdiWowlEnterInfo);
10635 return VOS_STATUS_E_NOMEM;
10636 }
Kumar Anandaca924e2013-07-22 14:35:34 -070010637
10638 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
10639
Jeff Johnson295189b2012-06-20 16:38:30 -070010640 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
10641 pWowlEnterParams->magicPtrn,
10642 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010643 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
10644 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010645 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
10646 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010647 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
10648 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010649 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
10650 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010651 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
10652 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010653 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
10654 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010655 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
10656 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -070010657 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
10658 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -070010659#ifdef WLAN_WAKEUP_EVENTS
10660 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
10661 pWowlEnterParams->ucWoWEAPIDRequestEnable;
10662
10663 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
10664 pWowlEnterParams->ucWoWEAPOL4WayEnable;
10665
10666 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
10667 pWowlEnterParams->ucWowNetScanOffloadMatch;
10668
10669 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
10670 pWowlEnterParams->ucWowGTKRekeyError;
10671
10672 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
10673 pWowlEnterParams->ucWoWBSSConnLoss;
10674#endif // WLAN_WAKEUP_EVENTS
10675
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010676 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
10677 pWowlEnterParams->bssIdx;
10678
Yue Ma7f44bbe2013-04-12 11:47:39 -070010679 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
10680 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010681 /* Store param pointer as passed in by caller */
10682 /* store Params pass it to WDI */
10683 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
10684 pWdaParams->pWdaContext = pWDA;
10685 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010686 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010687 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010688 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010689 {
10690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10691 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010692 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010693 vos_mem_free(pWdaParams->wdaMsgParam) ;
10694 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10695 vos_mem_free(pWdaParams) ;
10696 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010697 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010698
10699}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010700/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010701 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010702 *
10703 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010704void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010705{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010706 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010707 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010708 tSirHalWowlExitParams *pWowlExitParams;
10709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010710 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010711 if(NULL == pWdaParams)
10712 {
10713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010714 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010715 VOS_ASSERT(0) ;
10716 return ;
10717 }
10718 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010719 if (NULL == pWDA)
10720 {
10721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10722 "%s:pWDA is NULL", __func__);
10723 VOS_ASSERT(0);
10724 return ;
10725 }
10726
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010727 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
10728
10729 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010730 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010731
10732 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10733 vos_mem_free(pWdaParams) ;
10734
Jeff Johnson295189b2012-06-20 16:38:30 -070010735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010736 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010737 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010738 return ;
10739}
Jeff Johnson295189b2012-06-20 16:38:30 -070010740/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010741 * FUNCTION: WDA_WowlExitReqCallback
10742 * Free memory and send WOWL Exit RSP back to PE.
10743 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
10744 */
10745void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
10746{
10747 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010748 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010749 tSirHalWowlExitParams *pWowlExitParams;
10750
10751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10752 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10753
10754 if(NULL == pWdaParams)
10755 {
10756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10757 "%s: pWdaParams received NULL", __func__);
10758 VOS_ASSERT(0);
10759 return;
10760 }
10761
10762 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010763 if (NULL == pWDA)
10764 {
10765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10766 "%s:pWDA is NULL", __func__);
10767 VOS_ASSERT(0);
10768 return ;
10769 }
10770
Yue Ma7f44bbe2013-04-12 11:47:39 -070010771 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
10772 pWowlExitParams->status = wdiStatus;
10773
10774 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10775 {
10776 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10777 vos_mem_free(pWdaParams);
10778 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
10779 }
10780
10781 return;
10782}
10783/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010784 * FUNCTION: WDA_ProcessWowlExitReq
10785 * Request to WDI to add WOWL Bcast pattern
10786 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010787VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
10788 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010789{
10790 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010791 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010792 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
10793 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
10794 sizeof(WDI_WowlExitReqParamsType)) ;
10795 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010797 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010798 if(NULL == wdiWowlExitInfo)
10799 {
10800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010801 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010802 VOS_ASSERT(0);
10803 return VOS_STATUS_E_NOMEM;
10804 }
10805 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10806 if(NULL == pWdaParams)
10807 {
10808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010809 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010810 VOS_ASSERT(0);
10811 vos_mem_free(wdiWowlExitInfo);
10812 return VOS_STATUS_E_NOMEM;
10813 }
10814
10815 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
10816 pWowlExitParams->bssIdx;
10817
Yue Ma7f44bbe2013-04-12 11:47:39 -070010818 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
10819 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010820
10821 /* Store param pointer as passed in by caller */
10822 /* store Params pass it to WDI */
10823 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
10824 pWdaParams->pWdaContext = pWDA;
10825 pWdaParams->wdaMsgParam = pWowlExitParams;
10826
10827 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010828 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010829
Jeff Johnson43971f52012-07-17 12:26:56 -070010830 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010831 {
10832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10833 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010834 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010835 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10836 vos_mem_free(pWdaParams->wdaMsgParam);
10837 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010838 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010839 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010840}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010841/*
10842 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
10843 * Request to WDI to determine whether a given station is capable of
10844 * using HW-based frame translation
10845 */
10846v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
10847 tANI_U8 staIdx)
10848{
10849 return WDI_IsHwFrameTxTranslationCapable(staIdx);
10850}
Katya Nigam6201c3e2014-05-27 17:51:42 +053010851
10852/*
10853 * FUNCTION: WDA_IsSelfSTA
10854 * Request to WDI to determine whether a given STAID is self station
10855 * index.
10856 */
10857v_BOOL_t WDA_IsSelfSTA(v_PVOID_t pVosContext, tANI_U8 ucSTAIdx)
10858{
10859
10860 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
10861
Girish Gowli05cf44e2014-06-12 21:53:37 +053010862 if (NULL != pWDA)
10863 return WDI_IsSelfSTA(pWDA->pWdiContext,ucSTAIdx);
10864 else
10865 return VOS_TRUE;
Katya Nigam6201c3e2014-05-27 17:51:42 +053010866}
Jeff Johnson295189b2012-06-20 16:38:30 -070010867/*
10868 * FUNCTION: WDA_NvDownloadReqCallback
10869 * send NV Download RSP back to PE
10870 */
10871void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
10872 void* pUserData)
10873{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010874
10875 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010876 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010877
Jeff Johnson295189b2012-06-20 16:38:30 -070010878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010879 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010880
10881 if(NULL == pWdaParams)
10882 {
10883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010884 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010885 VOS_ASSERT(0) ;
10886 return ;
10887 }
10888
10889 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010890 if (NULL == pWDA)
10891 {
10892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10893 "%s:pWDA is NULL", __func__);
10894 VOS_ASSERT(0);
10895 return ;
10896 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010897
Jeff Johnson295189b2012-06-20 16:38:30 -070010898 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010899 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10900 vos_mem_free(pWdaParams);
10901
Jeff Johnson295189b2012-06-20 16:38:30 -070010902 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070010903 return ;
10904}
Jeff Johnson295189b2012-06-20 16:38:30 -070010905/*
10906 * FUNCTION: WDA_ProcessNvDownloadReq
10907 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
10908 */
10909VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
10910{
10911 /* Initialize the local Variables*/
10912 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
10913 v_VOID_t *pNvBuffer=NULL;
10914 v_SIZE_t bufferSize = 0;
10915 WDI_Status status = WDI_STATUS_E_FAILURE;
10916 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010917 tWDA_ReqParams *pWdaParams ;
10918
Jeff Johnson295189b2012-06-20 16:38:30 -070010919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010920 "------> %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010921 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070010922 {
10923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010924 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010925 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070010926 return VOS_STATUS_E_FAILURE;
10927 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010928
Jeff Johnson295189b2012-06-20 16:38:30 -070010929 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -070010930 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
10931
Jeff Johnson295189b2012-06-20 16:38:30 -070010932 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
10933 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010934 if(NULL == wdiNvDownloadReqParam)
10935 {
10936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010937 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010938 VOS_ASSERT(0);
10939 return VOS_STATUS_E_NOMEM;
10940 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010941 /* Copy Params to wdiNvDownloadReqParam*/
10942 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
10943 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010944
10945 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10946 if(NULL == pWdaParams)
10947 {
10948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010949 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010950 VOS_ASSERT(0);
10951 vos_mem_free(wdiNvDownloadReqParam);
10952 return VOS_STATUS_E_NOMEM;
10953 }
10954
Jeff Johnson295189b2012-06-20 16:38:30 -070010955 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010956 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
10957 pWdaParams->wdaMsgParam = NULL;
10958 pWdaParams->pWdaContext = pWDA;
10959
10960
Jeff Johnson295189b2012-06-20 16:38:30 -070010961 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010962
Jeff Johnson295189b2012-06-20 16:38:30 -070010963 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010964 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
10965
Jeff Johnson295189b2012-06-20 16:38:30 -070010966 if(IS_WDI_STATUS_FAILURE(status))
10967 {
10968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10969 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010970 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10971 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010972 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010973 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010974}
10975/*
10976 * FUNCTION: WDA_FlushAcReqCallback
10977 * send Flush AC RSP back to TL
10978 */
10979void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
10980{
10981 vos_msg_t wdaMsg = {0} ;
10982 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10983 tFlushACReq *pFlushACReqParams;
10984 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010986 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010987 if(NULL == pWdaParams)
10988 {
10989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010990 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010991 VOS_ASSERT(0) ;
10992 return ;
10993 }
10994
10995 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
10996 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
10997 if(NULL == pFlushACRspParams)
10998 {
10999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011000 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011001 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070011002 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011003 return ;
11004 }
11005 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
11006 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
11007 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
11008 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
11009 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070011010 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011011 vos_mem_free(pWdaParams->wdaMsgParam) ;
11012 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11013 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011014 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
11015 wdaMsg.bodyptr = (void *)pFlushACRspParams;
11016 // POST message to TL
11017 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
11018
Jeff Johnson295189b2012-06-20 16:38:30 -070011019 return ;
11020}
Jeff Johnson295189b2012-06-20 16:38:30 -070011021/*
11022 * FUNCTION: WDA_ProcessFlushAcReq
11023 * Request to WDI to Update the DELBA REQ params.
11024 */
11025VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
11026 tFlushACReq *pFlushAcReqParams)
11027{
11028 WDI_Status status = WDI_STATUS_SUCCESS ;
11029 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
11030 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
11031 sizeof(WDI_FlushAcReqParamsType)) ;
11032 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011033 if(NULL == wdiFlushAcReqParam)
11034 {
11035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011036 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011037 VOS_ASSERT(0);
11038 return VOS_STATUS_E_NOMEM;
11039 }
11040 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11041 if(NULL == pWdaParams)
11042 {
11043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011044 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011045 VOS_ASSERT(0);
11046 vos_mem_free(wdiFlushAcReqParam);
11047 return VOS_STATUS_E_NOMEM;
11048 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011050 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011051 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
11052 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
11053 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
11054 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -070011055 /* Store Flush AC pointer, as this will be used for response */
11056 /* store Params pass it to WDI */
11057 pWdaParams->pWdaContext = pWDA;
11058 pWdaParams->wdaMsgParam = pFlushAcReqParams;
11059 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011060 status = WDI_FlushAcReq(wdiFlushAcReqParam,
11061 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011062 if(IS_WDI_STATUS_FAILURE(status))
11063 {
11064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11065 "Failure in Flush AC REQ Params WDI API, free all the memory " );
11066 vos_mem_free(pWdaParams->wdaMsgParam) ;
11067 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11068 vos_mem_free(pWdaParams) ;
11069 //TODO: respond to TL with failure
11070 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011071 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011072}
Jeff Johnson295189b2012-06-20 16:38:30 -070011073/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011074 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011075 *
11076 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011077void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011078{
11079 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011080 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070011081 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011082
11083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011084 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011085 if(NULL == pWdaParams)
11086 {
11087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011088 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011089 VOS_ASSERT(0) ;
11090 return ;
11091 }
11092 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011093 if (NULL == pWDA)
11094 {
11095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11096 "%s:pWDA is NULL", __func__);
11097 VOS_ASSERT(0);
11098 return ;
11099 }
11100
Jeff Johnson295189b2012-06-20 16:38:30 -070011101 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
11102 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
11103 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
11104 {
11105 pWDA->wdaAmpSessionOn = VOS_FALSE;
11106 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011107 vos_mem_free(pWdaParams->wdaMsgParam) ;
11108 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11109 vos_mem_free(pWdaParams) ;
11110 /*
11111 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
11112 * param here
11113 */
Jeff Johnson295189b2012-06-20 16:38:30 -070011114 return ;
11115}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011116/*
11117 * FUNCTION: WDA_BtAmpEventReqCallback
11118 * Free memory.
11119 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
11120 */
11121void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
11122{
11123 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011124 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011125 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011126
Yue Ma7f44bbe2013-04-12 11:47:39 -070011127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11128 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11129
11130 if(NULL == pWdaParams)
11131 {
11132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11133 "%s: pWdaParams received NULL", __func__);
11134 VOS_ASSERT(0);
11135 return;
11136 }
11137
11138 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011139 if (NULL == pWDA)
11140 {
11141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11142 "%s:pWDA is NULL", __func__);
11143 VOS_ASSERT(0);
11144 return ;
11145 }
11146
Yue Ma7f44bbe2013-04-12 11:47:39 -070011147 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
11148
11149 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
11150 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
11151 {
11152 pWDA->wdaAmpSessionOn = VOS_FALSE;
11153 }
11154
11155 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11156 {
11157 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11158 vos_mem_free(pWdaParams->wdaMsgParam);
11159 vos_mem_free(pWdaParams);
11160 }
11161
11162 return;
11163}
Jeff Johnson295189b2012-06-20 16:38:30 -070011164/*
11165 * FUNCTION: WDA_ProcessBtAmpEventReq
11166 * Request to WDI to Update with BT AMP events.
11167 */
11168VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
11169 tSmeBtAmpEvent *pBtAmpEventParams)
11170{
11171 WDI_Status status = WDI_STATUS_SUCCESS ;
11172 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
11173 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
11174 sizeof(WDI_BtAmpEventParamsType)) ;
11175 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011177 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011178 if(NULL == wdiBtAmpEventParam)
11179 {
11180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011181 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011182 VOS_ASSERT(0);
11183 return VOS_STATUS_E_NOMEM;
11184 }
11185 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11186 if(NULL == pWdaParams)
11187 {
11188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011189 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011190 VOS_ASSERT(0);
11191 vos_mem_free(wdiBtAmpEventParam);
11192 return VOS_STATUS_E_NOMEM;
11193 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011194 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
11195 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011196 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
11197 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011198 /* Store BT AMP event pointer, as this will be used for response */
11199 /* store Params pass it to WDI */
11200 pWdaParams->pWdaContext = pWDA;
11201 pWdaParams->wdaMsgParam = pBtAmpEventParams;
11202 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011203 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011204 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011205 if(IS_WDI_STATUS_FAILURE(status))
11206 {
11207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11208 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
11209 vos_mem_free(pWdaParams->wdaMsgParam) ;
11210 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11211 vos_mem_free(pWdaParams) ;
11212 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011213 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
11214 {
11215 pWDA->wdaAmpSessionOn = VOS_TRUE;
11216 }
11217 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011218}
11219
Jeff Johnson295189b2012-06-20 16:38:30 -070011220/*
11221 * FUNCTION: WDA_FTMCommandReqCallback
11222 * Handle FTM CMD response came from HAL
11223 * Route responce to HDD FTM
11224 */
11225void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
11226 void *usrData)
11227{
11228 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011229 if((NULL == pWDA) || (NULL == ftmCmdRspData))
11230 {
11231 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053011232 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070011233 return;
11234 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011235 /* Release Current FTM Command Request */
11236 vos_mem_free(pWDA->wdaFTMCmdReq);
11237 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011238 /* Post FTM Responce to HDD FTM */
11239 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070011240 return;
11241}
Jeff Johnson295189b2012-06-20 16:38:30 -070011242/*
11243 * FUNCTION: WDA_ProcessFTMCommand
11244 * Send FTM command to WDI
11245 */
11246VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
11247 tPttMsgbuffer *pPTTFtmCmd)
11248{
11249 WDI_Status status = WDI_STATUS_SUCCESS;
11250 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011251 ftmCMDReq = (WDI_FTMCommandReqType *)
11252 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
11253 if(NULL == ftmCMDReq)
11254 {
11255 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11256 "WDA FTM Command buffer alloc fail");
11257 return VOS_STATUS_E_NOMEM;
11258 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011259 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
11260 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070011261 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070011262 /* Send command to WDI */
11263 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070011264 return status;
11265}
Jeff Johnsone7245742012-09-05 17:12:55 -070011266#ifdef FEATURE_OEM_DATA_SUPPORT
11267/*
11268 * FUNCTION: WDA_StartOemDataReqCallback
11269 *
11270 */
11271void WDA_StartOemDataReqCallback(
11272 WDI_oemDataRspParamsType *wdiOemDataRspParams,
11273 void* pUserData)
11274{
11275 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011276 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011277 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070011278 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011279
Jeff Johnsone7245742012-09-05 17:12:55 -070011280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011281 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011282
11283 if(NULL == pWdaParams)
11284 {
11285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011286 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011287 VOS_ASSERT(0) ;
11288 return ;
11289 }
11290 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
11291
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011292 if (NULL == pWDA)
Jeff Johnsone7245742012-09-05 17:12:55 -070011293 {
11294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011295 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011296 VOS_ASSERT(0);
11297 return ;
11298 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011299
Jeff Johnsone7245742012-09-05 17:12:55 -070011300 /*
11301 * Allocate memory for response params sent to PE
11302 */
11303 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
11304
11305 // Check if memory is allocated for OemdataMeasRsp Params.
11306 if(NULL == pOemDataRspParams)
11307 {
11308 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11309 "OEM DATA WDA callback alloc fail");
11310 VOS_ASSERT(0) ;
11311 return;
11312 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011313
Jeff Johnsone7245742012-09-05 17:12:55 -070011314 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011315 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11316 vos_mem_free(pWdaParams->wdaMsgParam);
11317 vos_mem_free(pWdaParams) ;
11318
Jeff Johnsone7245742012-09-05 17:12:55 -070011319 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080011320 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070011321 * Also, here success always means that we have atleast one BSSID.
11322 */
11323 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
11324
11325 //enable Tx
11326 status = WDA_ResumeDataTx(pWDA);
11327 if(status != VOS_STATUS_SUCCESS)
11328 {
11329 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
11330 }
11331 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
11332 return ;
11333}
11334/*
11335 * FUNCTION: WDA_ProcessStartOemDataReq
11336 * Send Start Oem Data Req to WDI
11337 */
11338VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
11339 tStartOemDataReq *pOemDataReqParams)
11340{
11341 WDI_Status status = WDI_STATUS_SUCCESS;
11342 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011343 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070011344
11345 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
11346
11347 if(NULL == wdiOemDataReqParams)
11348 {
11349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011350 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011351 VOS_ASSERT(0);
11352 return VOS_STATUS_E_NOMEM;
11353 }
11354
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011355 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
11356 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
11357 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
11358 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070011359
11360 wdiOemDataReqParams->wdiReqStatusCB = NULL;
11361
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011362 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11363 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070011364 {
11365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011366 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011367 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011368 vos_mem_free(pOemDataReqParams);
11369 VOS_ASSERT(0);
11370 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070011371 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011372
Bernald44a1ae2013-01-09 08:30:39 -080011373 pWdaParams->pWdaContext = (void*)pWDA;
11374 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
11375 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011376
11377 status = WDI_StartOemDataReq(wdiOemDataReqParams,
11378 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011379
11380 if(IS_WDI_STATUS_FAILURE(status))
11381 {
11382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11383 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011384 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11385 vos_mem_free(pWdaParams->wdaMsgParam);
11386 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011387 }
11388 return CONVERT_WDI2VOS_STATUS(status) ;
11389}
11390#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070011391/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011392 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011393 *
11394 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011395void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011396{
11397 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011399 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011400 if(NULL == pWdaParams)
11401 {
11402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011403 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011404 VOS_ASSERT(0) ;
11405 return ;
11406 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011407
11408 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11409 vos_mem_free(pWdaParams->wdaMsgParam);
11410 vos_mem_free(pWdaParams);
11411
11412 return ;
11413}
11414/*
11415 * FUNCTION: WDA_SetTxPerTrackingReqCallback
11416 * Free memory.
11417 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
11418 */
11419void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
11420{
11421 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11422
11423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11424 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11425
11426 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070011427 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070011428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11429 "%s: pWdaParams received NULL", __func__);
11430 VOS_ASSERT(0);
11431 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011432 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011433
11434 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011435 {
11436 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011437 vos_mem_free(pWdaParams->wdaMsgParam);
11438 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011439 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011440
11441 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011442}
Jeff Johnson295189b2012-06-20 16:38:30 -070011443#ifdef WLAN_FEATURE_GTK_OFFLOAD
11444/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011445 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011446 *
11447 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011448void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011449 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011450{
11451 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11452
11453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011454 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080011455 if(NULL == pWdaParams)
11456 {
11457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11458 "%s: pWdaParams received NULL", __func__);
11459 VOS_ASSERT(0);
11460 return;
11461 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011462
Jeff Johnson295189b2012-06-20 16:38:30 -070011463 vos_mem_free(pWdaParams->wdaMsgParam) ;
11464 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11465 vos_mem_free(pWdaParams) ;
11466
11467 //print a msg, nothing else to do
11468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011469 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011470
11471 return ;
11472}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011473/*
11474 * FUNCTION: WDA_GTKOffloadReqCallback
11475 * Free memory.
11476 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
11477 */
11478void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
11479{
11480 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011481
Yue Ma7f44bbe2013-04-12 11:47:39 -070011482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11483 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11484
11485 if(NULL == pWdaParams)
11486 {
11487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11488 "%s: pWdaParams received NULL", __func__);
11489 VOS_ASSERT(0);
11490 return;
11491 }
11492
11493 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11494 {
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053011495 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
11496 sizeof(WDI_GtkOffloadReqMsg));
11497 vos_mem_zero(pWdaParams->wdaMsgParam,
11498 sizeof(tSirGtkOffloadParams));
Yue Ma7f44bbe2013-04-12 11:47:39 -070011499 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11500 vos_mem_free(pWdaParams->wdaMsgParam);
11501 vos_mem_free(pWdaParams);
11502 }
11503
11504 return;
11505}
Jeff Johnson295189b2012-06-20 16:38:30 -070011506/*
11507 * FUNCTION: WDA_ProcessGTKOffloadReq
11508 * Request to WDI to set the filter to minimize unnecessary host wakeup due
11509 * to broadcast traffic (sta mode).
11510 */
11511VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
11512 tpSirGtkOffloadParams pGtkOffloadParams)
11513{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011514 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011515 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
11516 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
11517 sizeof(WDI_GtkOffloadReqMsg)) ;
11518 tWDA_ReqParams *pWdaParams ;
11519
11520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011521 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011522
11523 if(NULL == wdiGtkOffloadReqMsg)
11524 {
11525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011526 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011527 VOS_ASSERT(0);
11528 return VOS_STATUS_E_NOMEM;
11529 }
11530
11531 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11532 if(NULL == pWdaParams)
11533 {
11534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011535 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011536 VOS_ASSERT(0);
11537 vos_mem_free(wdiGtkOffloadReqMsg);
11538 return VOS_STATUS_E_NOMEM;
11539 }
11540
11541 //
11542 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
11543 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011544
11545 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011546 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011547
Jeff Johnson295189b2012-06-20 16:38:30 -070011548 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
11549 // Copy KCK
11550 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
11551 // Copy KEK
11552 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
11553 // Copy KeyReplayCounter
11554 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
11555 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
11556
Yue Ma7f44bbe2013-04-12 11:47:39 -070011557 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
11558 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011559
Jeff Johnson295189b2012-06-20 16:38:30 -070011560
11561 /* Store Params pass it to WDI */
11562 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
11563 pWdaParams->pWdaContext = pWDA;
11564 /* Store param pointer as passed in by caller */
11565 pWdaParams->wdaMsgParam = pGtkOffloadParams;
11566
Yue Ma7f44bbe2013-04-12 11:47:39 -070011567 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011568
11569 if(IS_WDI_STATUS_FAILURE(status))
11570 {
11571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11572 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053011573 vos_mem_zero(wdiGtkOffloadReqMsg, sizeof(WDI_GtkOffloadReqMsg));
11574 vos_mem_zero(pGtkOffloadParams, sizeof(tSirGtkOffloadParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070011575 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11576 vos_mem_free(pWdaParams->wdaMsgParam);
11577 vos_mem_free(pWdaParams);
11578 }
11579
11580 return CONVERT_WDI2VOS_STATUS(status) ;
11581}
11582
11583/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011584 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011585 *
11586 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011587void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011588 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011589{
11590 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11591 tWDA_CbContext *pWDA;
11592 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Nirav Shah374de6e2014-02-13 16:40:01 +053011593 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070011594 vos_msg_t vosMsg;
11595
11596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011597 "<------ %s " ,__func__);
Nirav Shah374de6e2014-02-13 16:40:01 +053011598
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080011599 if(NULL == pWdaParams)
11600 {
11601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11602 "%s: pWdaParams received NULL", __func__);
11603 VOS_ASSERT(0);
11604 return;
11605 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011606
Nirav Shah374de6e2014-02-13 16:40:01 +053011607 pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams));
11608 if(NULL == pGtkOffloadGetInfoRsp)
11609 {
11610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11611 "%s: vos_mem_malloc failed ", __func__);
11612 VOS_ASSERT(0);
11613 return;
11614 }
11615
Jeff Johnson295189b2012-06-20 16:38:30 -070011616 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
11617 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
11618
11619 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
11620 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
11621
11622 /* Message Header */
11623 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070011624 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011625
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011626 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
11627 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
11628 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
11629 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
11630 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070011631
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011632 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
11633 pwdiGtkOffloadGetInfoRsparams->bssId,
11634 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011635 /* VOS message wrapper */
11636 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
11637 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
11638 vosMsg.bodyval = 0;
11639
11640 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11641 {
11642 /* free the mem and return */
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053011643 vos_mem_zero(pGtkOffloadGetInfoRsp,
11644 sizeof(tSirGtkOffloadGetInfoRspParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070011645 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
11646 }
11647
11648 vos_mem_free(pWdaParams->wdaMsgParam) ;
11649 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11650 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011651
11652 return;
11653}
11654/*
11655 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
11656 * Free memory and send RSP back to SME.
11657 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
11658 */
11659void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
11660{
11661 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11662 vos_msg_t vosMsg;
11663
11664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11665 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11666
11667 if(NULL == pWdaParams)
11668 {
11669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11670 "%s: pWdaParams received NULL", __func__);
11671 VOS_ASSERT(0);
11672 return;
11673 }
11674
11675 /* VOS message wrapper */
11676 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
11677 vosMsg.bodyptr = NULL;
11678 vosMsg.bodyval = 0;
11679
11680 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11681 {
11682 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11683 vos_mem_free(pWdaParams->wdaMsgParam);
11684 vos_mem_free(pWdaParams);
11685 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
11686 }
11687
11688 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011689}
11690#endif
11691
11692/*
11693 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
11694 * Request to WDI to set Tx Per Tracking configurations
11695 */
11696VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
11697{
11698 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011699 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011700 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
11701 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
11702 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
11703 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011705 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011706 if(NULL == pwdiSetTxPerTrackingReqParams)
11707 {
11708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011709 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011710 vos_mem_free(pTxPerTrackingParams);
11711 VOS_ASSERT(0);
11712 return VOS_STATUS_E_NOMEM;
11713 }
11714 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11715 if(NULL == pWdaParams)
11716 {
11717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011718 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011719 vos_mem_free(pwdiSetTxPerTrackingReqParams);
11720 vos_mem_free(pTxPerTrackingParams);
11721 VOS_ASSERT(0);
11722 return VOS_STATUS_E_NOMEM;
11723 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011724 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
11725 pTxPerTrackingParams->ucTxPerTrackingEnable;
11726 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
11727 pTxPerTrackingParams->ucTxPerTrackingPeriod;
11728 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
11729 pTxPerTrackingParams->ucTxPerTrackingRatio;
11730 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
11731 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011732 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
11733 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011734 /* Store param pointer as passed in by caller */
11735 /* store Params pass it to WDI
11736 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
11737 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
11738 pWdaParams->pWdaContext = pWDA;
11739 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011740 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011741 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011742 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011743 {
11744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11745 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011746 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011747 vos_mem_free(pWdaParams->wdaMsgParam) ;
11748 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11749 vos_mem_free(pWdaParams) ;
11750 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011751 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011752
11753}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011754/*
11755 * FUNCTION: WDA_HALDumpCmdCallback
11756 * Send the VOS complete .
11757 */
11758void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
11759 void* pUserData)
11760{
11761 tANI_U8 *buffer = NULL;
11762 tWDA_CbContext *pWDA = NULL;
11763 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011764 if(NULL == pWdaParams)
11765 {
11766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011767 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011768 VOS_ASSERT(0) ;
11769 return ;
11770 }
11771
11772 pWDA = pWdaParams->pWdaContext;
11773 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011774 if(wdiRspParams->usBufferLen > 0)
11775 {
11776 /*Copy the Resp data to UMAC supplied buffer*/
11777 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
11778 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011779 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11780 vos_mem_free(pWdaParams);
11781
11782 /* Indicate VOSS about the start complete */
11783 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070011784 return ;
11785}
11786
Jeff Johnson295189b2012-06-20 16:38:30 -070011787/*
11788 * FUNCTION: WDA_ProcessHALDumpCmdReq
11789 * Send Dump command to WDI
11790 */
11791VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
11792 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
11793 tANI_U32 arg4, tANI_U8 *pBuffer)
11794{
11795 WDI_Status status = WDI_STATUS_SUCCESS;
11796 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
11797 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
11798 tWDA_ReqParams *pWdaParams ;
11799 pVosContextType pVosContext = NULL;
11800 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011801 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
11802 (void *)pMac);
Katya Nigame4bafe02014-02-28 15:37:57 +053011803 if(pVosContext)
11804 {
11805 if (pVosContext->isLogpInProgress)
11806 {
11807 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
11808 "%s:LOGP in Progress. Ignore!!!", __func__);
11809 return VOS_STATUS_E_BUSY;
11810 }
11811 }
11812 else
11813 {
11814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11815 "%s: VOS Context Null", __func__);
11816 return VOS_STATUS_E_RESOURCES;
11817 }
11818
Jeff Johnson295189b2012-06-20 16:38:30 -070011819 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11820 if(NULL == pWdaParams)
11821 {
11822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011823 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011824 return VOS_STATUS_E_NOMEM;
11825 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011826 /* Allocate memory WDI request structure*/
11827 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
11828 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
11829 if(NULL == wdiHALDumpCmdReqParam)
11830 {
11831 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11832 "WDA HAL DUMP Command buffer alloc fail");
11833 vos_mem_free(pWdaParams);
11834 return WDI_STATUS_E_FAILURE;
11835 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011836 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070011837 /* Extract the arguments */
11838 wdiHalDumpCmdInfo->command = cmd;
11839 wdiHalDumpCmdInfo->argument1 = arg1;
11840 wdiHalDumpCmdInfo->argument2 = arg2;
11841 wdiHalDumpCmdInfo->argument3 = arg3;
11842 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070011843 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011844 pWdaParams->pWdaContext = pVosContext->pWDAContext;
11845
11846 /* Response message will be passed through the buffer */
11847 pWdaParams->wdaMsgParam = (void *)pBuffer;
11848
11849 /* store Params pass it to WDI */
11850 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011851 /* Send command to WDI */
11852 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -080011853 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), WDA_DUMPCMD_WAIT_TIMEOUT );
Jeff Johnson295189b2012-06-20 16:38:30 -070011854 if ( vStatus != VOS_STATUS_SUCCESS )
11855 {
11856 if ( vStatus == VOS_STATUS_E_TIMEOUT )
11857 {
11858 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011859 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011860 }
11861 else
11862 {
11863 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011864 "%s: WDA_HALDUMP reporting other error",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011865 }
11866 VOS_ASSERT(0);
11867 }
11868 return status;
11869}
Jeff Johnson295189b2012-06-20 16:38:30 -070011870#ifdef WLAN_FEATURE_GTK_OFFLOAD
11871/*
11872 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
11873 * Request to WDI to get GTK Offload Information
11874 */
11875VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
11876 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
11877{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011878 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011879 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
11880 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
11881 tWDA_ReqParams *pWdaParams ;
11882
11883 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
11884 {
11885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011886 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011887 VOS_ASSERT(0);
11888 return VOS_STATUS_E_NOMEM;
11889 }
11890
11891 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11892 if(NULL == pWdaParams)
11893 {
11894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011895 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011896 VOS_ASSERT(0);
11897 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
11898 return VOS_STATUS_E_NOMEM;
11899 }
11900
Yue Ma7f44bbe2013-04-12 11:47:39 -070011901 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
11902 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011903
Jeff Johnson295189b2012-06-20 16:38:30 -070011904 /* Store Params pass it to WDI */
11905 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
11906 pWdaParams->pWdaContext = pWDA;
11907 /* Store param pointer as passed in by caller */
11908 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
11909
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011910 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011911 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011912
Yue Ma7f44bbe2013-04-12 11:47:39 -070011913 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011914
11915 if(IS_WDI_STATUS_FAILURE(status))
11916 {
11917 /* failure returned by WDI API */
11918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11919 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
11920 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11921 vos_mem_free(pWdaParams) ;
11922 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
11923 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
11924 }
11925
11926 return CONVERT_WDI2VOS_STATUS(status) ;
11927}
11928#endif // WLAN_FEATURE_GTK_OFFLOAD
11929
11930/*
Yue Mab9c86f42013-08-14 15:59:08 -070011931 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
11932 *
11933 */
11934VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
11935 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
11936{
11937 WDI_Status wdiStatus;
11938 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
11939
11940 addPeriodicTxPtrnParams =
11941 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
11942
11943 if (NULL == addPeriodicTxPtrnParams)
11944 {
11945 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11946 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
11947 __func__);
11948
11949 return VOS_STATUS_E_NOMEM;
11950 }
11951
11952 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
11953 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
11954
11955 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
11956 addPeriodicTxPtrnParams->pUserData = pWDA;
11957
11958 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
11959
11960 if (WDI_STATUS_PENDING == wdiStatus)
11961 {
11962 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11963 "Pending received for %s:%d", __func__, __LINE__ );
11964 }
11965 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11966 {
11967 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11968 "Failure in %s:%d", __func__, __LINE__ );
11969 }
11970
11971 vos_mem_free(addPeriodicTxPtrnParams);
11972
11973 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11974}
11975
11976/*
11977 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
11978 *
11979 */
11980VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
11981 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
11982{
11983 WDI_Status wdiStatus;
11984 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
11985
11986 delPeriodicTxPtrnParams =
11987 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
11988
11989 if (NULL == delPeriodicTxPtrnParams)
11990 {
11991 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11992 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
11993 __func__);
11994
11995 return VOS_STATUS_E_NOMEM;
11996 }
11997
11998 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
11999 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
12000
12001 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
12002 delPeriodicTxPtrnParams->pUserData = pWDA;
12003
12004 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
12005
12006 if (WDI_STATUS_PENDING == wdiStatus)
12007 {
12008 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12009 "Pending received for %s:%d", __func__, __LINE__ );
12010 }
12011 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12012 {
12013 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12014 "Failure in %s:%d", __func__, __LINE__ );
12015 }
12016
12017 vos_mem_free(delPeriodicTxPtrnParams);
12018
12019 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12020}
12021
Rajeev79dbe4c2013-10-05 11:03:42 +053012022#ifdef FEATURE_WLAN_BATCH_SCAN
12023/*
12024 * FUNCTION: WDA_ProcessStopBatchScanInd
12025 *
12026 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
12027 *
12028 * PARAM:
12029 * pWDA: pointer to WDA context
12030 * pReq: pointer to stop batch scan request
12031 */
12032VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
12033 tSirStopBatchScanInd *pReq)
12034{
12035 WDI_Status wdiStatus;
12036 WDI_StopBatchScanIndType wdiReq;
12037
12038 wdiReq.param = pReq->param;
12039
12040 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
12041
12042 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12043 {
12044 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12045 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
12046 }
12047
12048 vos_mem_free(pReq);
12049
12050 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12051}
12052/*==========================================================================
12053 FUNCTION WDA_ProcessTriggerBatchScanResultInd
12054
12055 DESCRIPTION
12056 API to pull batch scan result from FW
12057
12058 PARAMETERS
12059 pWDA: Pointer to WDA context
12060 pGetBatchScanReq: Pointer to get batch scan result indication
12061
12062 RETURN VALUE
12063 NONE
12064
12065===========================================================================*/
12066VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
12067 tSirTriggerBatchScanResultInd *pReq)
12068{
12069 WDI_Status wdiStatus;
12070 WDI_TriggerBatchScanResultIndType wdiReq;
12071
12072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12073 "------> %s " ,__func__);
12074
12075 wdiReq.param = pReq->param;
12076
12077 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
12078
12079 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12080 {
12081 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12082 "Trigger batch scan result ind failed %s:%d",
12083 __func__, wdiStatus);
12084 }
12085
12086 vos_mem_free(pReq);
12087
12088 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12089}
12090
12091/*==========================================================================
12092 FUNCTION WDA_SetBatchScanRespCallback
12093
12094 DESCRIPTION
12095 API to process set batch scan response from FW
12096
12097 PARAMETERS
12098 pRsp: Pointer to set batch scan response
12099 pUserData: Pointer to user data
12100
12101 RETURN VALUE
12102 NONE
12103
12104===========================================================================*/
12105void WDA_SetBatchScanRespCallback
12106(
12107 WDI_SetBatchScanRspType *pRsp,
12108 void* pUserData
12109)
12110{
12111 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
12112 tpAniSirGlobal pMac;
12113 void *pCallbackContext;
12114 tWDA_CbContext *pWDA = NULL ;
12115 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12116
12117
12118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12119 "<------ %s " ,__func__);
12120 if (NULL == pWdaParams)
12121 {
12122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12123 "%s: pWdaParams received NULL", __func__);
12124 VOS_ASSERT(0) ;
12125 return ;
12126 }
12127
12128 /*extract WDA context*/
12129 pWDA = pWdaParams->pWdaContext;
12130 if (NULL == pWDA)
12131 {
12132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12133 "%s:pWDA is NULL can't invole HDD callback",
12134 __func__);
12135 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12136 vos_mem_free(pWdaParams->wdaMsgParam);
12137 vos_mem_free(pWdaParams);
12138 VOS_ASSERT(0);
12139 return;
12140 }
12141
12142 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12143 vos_mem_free(pWdaParams->wdaMsgParam);
12144 vos_mem_free(pWdaParams);
12145
12146 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12147 if (NULL == pMac)
12148 {
12149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12150 "%s:pMac is NULL", __func__);
12151 VOS_ASSERT(0);
12152 return;
12153 }
12154
12155 pHddSetBatchScanRsp =
12156 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
12157 if (NULL == pHddSetBatchScanRsp)
12158 {
12159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12160 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
12161 VOS_ASSERT(0);
12162 return;
12163 }
12164
12165 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
12166
12167 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
12168 /*call hdd callback with set batch scan response data*/
12169 if(pMac->pmc.setBatchScanReqCallback)
12170 {
12171 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
12172 }
12173 else
12174 {
12175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12176 "%s:HDD callback is null", __func__);
12177 VOS_ASSERT(0);
12178 }
12179
12180 vos_mem_free(pHddSetBatchScanRsp);
12181 return ;
12182}
12183
12184/*==========================================================================
12185 FUNCTION WDA_ProcessSetBatchScanReq
12186
12187 DESCRIPTION
12188 API to send set batch scan request to WDI
12189
12190 PARAMETERS
12191 pWDA: Pointer to WDA context
12192 pSetBatchScanReq: Pointer to set batch scan req
12193
12194 RETURN VALUE
12195 NONE
12196
12197===========================================================================*/
12198VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
12199 tSirSetBatchScanReq *pSetBatchScanReq)
12200{
12201 WDI_Status status;
12202 tWDA_ReqParams *pWdaParams ;
12203 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
12204
12205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12206 "------> %s " ,__func__);
12207
12208 pWdiSetBatchScanReq =
12209 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
12210 if (NULL == pWdiSetBatchScanReq)
12211 {
12212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12213 "%s: VOS MEM Alloc Failure", __func__);
12214 vos_mem_free(pSetBatchScanReq);
12215 VOS_ASSERT(0);
12216 return VOS_STATUS_E_NOMEM;
12217 }
12218
12219 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
12220 if (NULL == pWdaParams)
12221 {
12222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12223 "%s: VOS MEM Alloc Failure", __func__);
12224 VOS_ASSERT(0);
12225 vos_mem_free(pSetBatchScanReq);
12226 vos_mem_free(pWdiSetBatchScanReq);
12227 return VOS_STATUS_E_NOMEM;
12228 }
12229
12230 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
12231 pWdiSetBatchScanReq->numberOfScansToBatch =
12232 pSetBatchScanReq->numberOfScansToBatch;
12233 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
12234 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
12235 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
12236
12237 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
12238 pWdaParams->pWdaContext = pWDA;
12239 pWdaParams->wdaMsgParam = pSetBatchScanReq;
12240
12241 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
12242 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
12243 if (IS_WDI_STATUS_FAILURE(status))
12244 {
12245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12246 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
12247 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12248 vos_mem_free(pWdaParams->wdaMsgParam);
12249 vos_mem_free(pWdaParams);
12250 }
12251 return CONVERT_WDI2VOS_STATUS(status);
12252}
12253
12254#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053012255/*
12256 * FUNCTION: WDA_ProcessHT40OBSSScanInd
12257 *
12258 * DESCRIPTION: This function sends start/update OBSS scan
12259 * inidcation message to WDI
12260 *
12261 * PARAM:
12262 * pWDA: pointer to WDA context
12263 * pReq: pointer to start OBSS scan request
12264 */
12265VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
12266 tSirHT40OBSSScanInd *pReq)
12267{
12268 WDI_Status status;
12269 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
12270 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053012271
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053012272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12273 "------> %s " ,__func__);
12274 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
12275 wdiOBSSScanParams.pUserData = pWDA;
12276
12277 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
12278 pWdiOBSSScanInd->cmdType = pReq->cmdType;
12279 pWdiOBSSScanInd->scanType = pReq->scanType;
12280 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
12281 pReq->OBSSScanActiveDwellTime;
12282 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
12283 pReq->OBSSScanPassiveDwellTime;
12284 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
12285 pReq->BSSChannelWidthTriggerScanInterval;
12286 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
12287 pReq->BSSWidthChannelTransitionDelayFactor;
12288 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
12289 pReq->OBSSScanActiveTotalPerChannel;
12290 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
12291 pReq->OBSSScanPassiveTotalPerChannel;
12292 pWdiOBSSScanInd->OBSSScanActivityThreshold =
12293 pReq->OBSSScanActivityThreshold;
12294 pWdiOBSSScanInd->channelCount = pReq->channelCount;
12295 vos_mem_copy(pWdiOBSSScanInd->channels,
12296 pReq->channels,
12297 pReq->channelCount);
12298 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
12299 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
12300 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
12301 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
12302 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
12303
12304 vos_mem_copy(pWdiOBSSScanInd->ieField,
12305 pReq->ieField,
12306 pReq->ieFieldLen);
12307
12308 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
12309 if (WDI_STATUS_PENDING == status)
12310 {
12311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12312 "Pending received for %s:%d ",__func__,__LINE__ );
12313 }
12314 else if (WDI_STATUS_SUCCESS_SYNC != status)
12315 {
12316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12317 "Failure in %s:%d ",__func__,__LINE__ );
12318 }
12319 return CONVERT_WDI2VOS_STATUS(status) ;
12320}
12321/*
12322 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
12323 *
12324 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
12325 *
12326 * PARAM:
12327 * pWDA: pointer to WDA context
12328 * pReq: pointer to stop batch scan request
12329 */
12330VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
12331 tANI_U8 *bssIdx)
12332{
12333 WDI_Status status;
12334
12335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12336 "------> %s " ,__func__);
12337
12338 status = WDI_HT40OBSSStopScanInd(*bssIdx);
12339 if (WDI_STATUS_PENDING == status)
12340 {
12341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12342 "Pending received for %s:%d ",__func__,__LINE__ );
12343 }
12344 else if (WDI_STATUS_SUCCESS_SYNC != status)
12345 {
12346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12347 "Failure in %s:%d ",__func__,__LINE__ );
12348 }
12349 return CONVERT_WDI2VOS_STATUS(status) ;
12350}
Yue Mab9c86f42013-08-14 15:59:08 -070012351/*
Chittajit Mitraf5413a42013-10-18 14:20:08 -070012352 * FUNCTION: WDA_ProcessRateUpdateInd
12353 *
12354 */
12355VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
12356 tSirRateUpdateInd *pRateUpdateParams)
12357{
12358 WDI_Status wdiStatus;
12359 WDI_RateUpdateIndParams rateUpdateParams;
12360
12361 vos_mem_copy(rateUpdateParams.bssid,
12362 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
12363
12364 rateUpdateParams.ucastDataRateTxFlag =
12365 pRateUpdateParams->ucastDataRateTxFlag;
12366 rateUpdateParams.reliableMcastDataRateTxFlag =
12367 pRateUpdateParams->reliableMcastDataRateTxFlag;
12368 rateUpdateParams.mcastDataRate24GHzTxFlag =
12369 pRateUpdateParams->mcastDataRate24GHzTxFlag;
12370 rateUpdateParams.mcastDataRate5GHzTxFlag =
12371 pRateUpdateParams->mcastDataRate5GHzTxFlag;
12372
12373 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
12374 rateUpdateParams.reliableMcastDataRate =
12375 pRateUpdateParams->reliableMcastDataRate;
12376 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
12377 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
12378
12379 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
12380 rateUpdateParams.pUserData = pWDA;
12381
12382 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
12383
12384 if (WDI_STATUS_PENDING == wdiStatus)
12385 {
12386 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12387 "Pending received for %s:%d", __func__, __LINE__ );
12388 }
12389 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12390 {
12391 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12392 "Failure in %s:%d", __func__, __LINE__ );
12393 }
12394
12395 vos_mem_free(pRateUpdateParams);
12396
12397 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12398}
12399
12400/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012401 * -------------------------------------------------------------------------
12402 * DATA interface with WDI for Mgmt Frames
12403 * -------------------------------------------------------------------------
12404 */
Jeff Johnson295189b2012-06-20 16:38:30 -070012405/*
12406 * FUNCTION: WDA_TxComplete
12407 * Callback function for the WDA_TxPacket
12408 */
12409VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
12410 VOS_STATUS status )
12411{
12412
12413 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
12414 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012415 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012416
12417 if(NULL == wdaContext)
12418 {
12419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12420 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012421 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012422 VOS_ASSERT(0);
Sushant Kaushik8355d202014-12-17 16:48:10 +053012423 vos_pkt_return_packet(pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012424 return VOS_STATUS_E_FAILURE;
12425 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012426
12427 /*Check if frame was timed out or not*/
12428 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
12429 (v_PVOID_t)&uUserData);
12430
12431 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
12432 {
12433 /*Discard frame - no further processing is needed*/
12434 vos_pkt_return_packet(pData);
12435 return VOS_STATUS_SUCCESS;
12436 }
12437
Jeff Johnson295189b2012-06-20 16:38:30 -070012438 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
12439 if( NULL!=wdaContext->pTxCbFunc)
12440 {
12441 /*check if packet is freed already*/
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012442 if(vos_atomic_set((uintptr_t*)&wdaContext->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (uintptr_t)pData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012443 {
12444 wdaContext->pTxCbFunc(pMac, pData);
12445 }
12446 else
12447 {
12448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012449 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012450 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012451 //Return from here since we reaching here because the packet already timeout
12452 return status;
12453 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012454 }
12455
12456 /*
12457 * Trigger the event to bring the HAL TL Tx complete function to come
12458 * out of wait
12459 * Let the coe above to complete the packet first. When this event is set,
12460 * the thread waiting for the event may run and set Vospacket_freed causing the original
12461 * packet not being freed.
12462 */
12463 status = vos_event_set(&wdaContext->txFrameEvent);
12464 if(!VOS_IS_STATUS_SUCCESS(status))
12465 {
12466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012467 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012468 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012469 return status;
12470}
Jeff Johnson295189b2012-06-20 16:38:30 -070012471/*
12472 * FUNCTION: WDA_TxPacket
12473 * Forward TX management frame to WDI
12474 */
12475VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
12476 void *pFrmBuf,
12477 tANI_U16 frmLen,
12478 eFrameType frmType,
12479 eFrameTxDir txDir,
12480 tANI_U8 tid,
12481 pWDATxRxCompFunc pCompFunc,
12482 void *pData,
12483 pWDAAckFnTxComp pAckTxComp,
Kanchanapally, Vidyullathaf9426e52013-12-24 17:28:54 +053012484 tANI_U32 txFlag)
Jeff Johnson295189b2012-06-20 16:38:30 -070012485{
12486 VOS_STATUS status = VOS_STATUS_SUCCESS ;
12487 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
12488 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
12489 tANI_U8 eventIdx = 0;
12490 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
12491 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -070012492 if((NULL == pWDA)||(NULL == pFrmBuf))
12493 {
12494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012495 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012496 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070012497 VOS_ASSERT(0);
12498 return VOS_STATUS_E_FAILURE;
12499 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012500
Jeff Johnson295189b2012-06-20 16:38:30 -070012501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012502 "Tx Mgmt Frame Subtype: %d alloc(%p)", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070012503 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12504 if(NULL == pMac)
12505 {
12506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012507 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012508 VOS_ASSERT(0);
12509 return VOS_STATUS_E_FAILURE;
12510 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012511
Jeff Johnson295189b2012-06-20 16:38:30 -070012512 /* store the call back function in WDA context */
12513 pWDA->pTxCbFunc = pCompFunc;
12514 /* store the call back for the function of ackTxComplete */
12515 if( pAckTxComp )
12516 {
Jeff Johnsone7245742012-09-05 17:12:55 -070012517 if( NULL != pWDA->pAckTxCbFunc )
12518 {
12519 /* Already TxComp is active no need to active again */
12520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012521 "There is already one request pending for tx complete");
Jeff Johnsone7245742012-09-05 17:12:55 -070012522 pWDA->pAckTxCbFunc( pMac, 0);
12523 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012524
Jeff Johnsone7245742012-09-05 17:12:55 -070012525 if( VOS_STATUS_SUCCESS !=
12526 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12527 {
12528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12529 "Tx Complete timeout Timer Stop Failed ");
12530 }
12531 else
12532 {
12533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080012534 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070012535 }
12536 }
12537
12538 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
12539 pWDA->pAckTxCbFunc = pAckTxComp;
12540 if( VOS_STATUS_SUCCESS !=
12541 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
12542 {
12543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12544 "Tx Complete Timer Start Failed ");
12545 pWDA->pAckTxCbFunc = NULL;
12546 return eHAL_STATUS_FAILURE;
12547 }
12548 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012549 /* Reset the event to be not signalled */
12550 status = vos_event_reset(&pWDA->txFrameEvent);
12551 if(!VOS_IS_STATUS_SUCCESS(status))
12552 {
12553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012554 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012555 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
12556 if( pAckTxComp )
12557 {
12558 pWDA->pAckTxCbFunc = NULL;
12559 if( VOS_STATUS_SUCCESS !=
12560 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12561 {
12562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12563 "Tx Complete timeout Timer Stop Failed ");
12564 }
12565 }
12566 return VOS_STATUS_E_FAILURE;
12567 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012568
12569 /* If Peer Sta mask is set don't overwrite to self sta */
12570 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070012571 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012572 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070012573 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012574 else
12575 {
Ganesh K08bce952012-12-13 15:04:41 -080012576 /* Get system role, use the self station if in unknown role or STA role */
12577 systemRole = wdaGetGlobalSystemRole(pMac);
12578 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
12579 (( eSYSTEM_STA_ROLE == systemRole )
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012580#if defined FEATURE_WLAN_ESE || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080012581 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012582#endif
Ganesh K08bce952012-12-13 15:04:41 -080012583 ))
12584 {
12585 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
12586 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080012587 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012588
Jeff Johnsone7245742012-09-05 17:12:55 -070012589 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
12590 disassoc frame reaches the HW, HAL has already deleted the peer station */
12591 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070012592 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080012593 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070012594 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070012595 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012596 /*Send Probe request frames on self sta idx*/
12597 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070012598 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012599 /* Since we donot want probe responses to be retried, send probe responses
12600 through the NO_ACK queues */
12601 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
12602 {
12603 //probe response is sent out using self station and no retries options.
12604 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
12605 }
12606 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
12607 {
12608 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
12609 }
12610 }
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012611 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012612
12613 /*Set frame tag to 0
12614 We will use the WDA user data in order to tag a frame as expired*/
12615 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
12616 (v_PVOID_t)0);
12617
12618
12619 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
12620 frmLen, ucTypeSubType, tid,
12621 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
12622 {
12623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012624 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012625 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012626 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 -070012627 if( pAckTxComp )
12628 {
12629 pWDA->pAckTxCbFunc = NULL;
12630 if( VOS_STATUS_SUCCESS !=
12631 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12632 {
12633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12634 "Tx Complete timeout Timer Stop Failed ");
12635 }
12636 }
12637 return VOS_STATUS_E_FAILURE;
12638 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012639 /*
12640 * Wait for the event to be set by the TL, to get the response of TX
12641 * complete, this event should be set by the Callback function called by TL
12642 */
12643 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
12644 &eventIdx);
12645 if(!VOS_IS_STATUS_SUCCESS(status))
12646 {
12647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12648 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012649 __func__, status);
Sushant Kaushik8355d202014-12-17 16:48:10 +053012650
12651 /*Tag Frame as timed out for later deletion*/
12652 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
12653 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
Jeff Johnson295189b2012-06-20 16:38:30 -070012654 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
12655 after the packet gets completed(packet freed once)*/
12656
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070012657 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Katya Nigam53677462014-08-04 11:37:28 +053012658 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070012659
Jeff Johnson295189b2012-06-20 16:38:30 -070012660 /* check whether the packet was freed already,so need not free again when
12661 * TL calls the WDA_Txcomplete routine
12662 */
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012663 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED);
12664 /*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 -070012665 {
12666 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012667 } */
12668
Jeff Johnson295189b2012-06-20 16:38:30 -070012669 if( pAckTxComp )
12670 {
12671 pWDA->pAckTxCbFunc = NULL;
12672 if( VOS_STATUS_SUCCESS !=
12673 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12674 {
12675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12676 "Tx Complete timeout Timer Stop Failed ");
12677 }
12678 }
12679 status = VOS_STATUS_E_FAILURE;
12680 }
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053012681#ifdef WLAN_DUMP_MGMTFRAMES
12682 if (VOS_IS_STATUS_SUCCESS(status))
12683 {
12684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12685 "%s() TX packet : SubType %d", __func__,pFc->subType);
12686 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12687 pData, frmLen);
12688 }
12689#endif
12690
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080012691 if (VOS_IS_STATUS_SUCCESS(status))
12692 {
12693 if (pMac->fEnableDebugLog & 0x1)
12694 {
12695 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
12696 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
12697 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
12698 {
12699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
12700 pFc->type, pFc->subType);
12701 }
12702 }
12703 }
12704
12705
Jeff Johnson295189b2012-06-20 16:38:30 -070012706 return status;
12707}
Jeff Johnson295189b2012-06-20 16:38:30 -070012708/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012709 * FUNCTION: WDA_ProcessDHCPStartInd
12710 * Forward DHCP Start to WDI
12711 */
12712static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
12713 tAniDHCPInd *dhcpStartInd)
12714{
12715 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053012716 WDI_DHCPInd wdiDHCPInd;
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012717
c_hpothu0b0cab72014-02-13 21:52:40 +053012718 wdiDHCPInd.device_mode = dhcpStartInd->device_mode;
12719 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStartInd->macAddr,
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012720 sizeof(tSirMacAddr));
12721
c_hpothu0b0cab72014-02-13 21:52:40 +053012722 status = WDI_dhcpStartInd(&wdiDHCPInd);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012723
c_hpothu0b0cab72014-02-13 21:52:40 +053012724 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012725 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12727 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012728 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012729 else if (WDI_STATUS_SUCCESS_SYNC != status)
12730 {
12731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12732 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
12733 }
12734
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012735 vos_mem_free(dhcpStartInd);
12736 return CONVERT_WDI2VOS_STATUS(status) ;
12737}
12738
12739 /*
12740 * FUNCTION: WDA_ProcessDHCPStopInd
12741 * Forward DHCP Stop to WDI
12742 */
12743 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
12744 tAniDHCPInd *dhcpStopInd)
12745 {
12746 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053012747 WDI_DHCPInd wdiDHCPInd;
12748
12749 wdiDHCPInd.device_mode = dhcpStopInd->device_mode;
12750 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
12751
12752 status = WDI_dhcpStopInd(&wdiDHCPInd);
12753
12754 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012755 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12757 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012758 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012759 else if (WDI_STATUS_SUCCESS_SYNC != status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012760 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12762 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012763 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012764
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012765 vos_mem_free(dhcpStopInd);
c_hpothu0b0cab72014-02-13 21:52:40 +053012766
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012767 return CONVERT_WDI2VOS_STATUS(status) ;
12768 }
12769
12770/*
Siddharth Bhal171788a2014-09-29 21:02:40 +053012771 * FUNCTION: WDA_ProcessSetSpoofMacAddrReq
12772 *
12773 * DESCRIPTION: This function sends Spoof Mac Addr Req to WDI
12774 *
12775 * PARAM:
12776 * pWDA: pointer to WDA context
12777 * pReq: pointer to stop batch scan request
12778 */
12779VOS_STATUS WDA_ProcessSetSpoofMacAddrReq(tWDA_CbContext *pWDA,
12780 tpSpoofMacAddrReqParams pReq)
12781{
12782 WDI_Status wdiStatus;
12783 WDI_SpoofMacAddrInfoType *WDI_SpoofMacAddrInfoParams;
12784 tWDA_ReqParams *pWdaParams;
12785
12786 WDI_SpoofMacAddrInfoParams = (WDI_SpoofMacAddrInfoType *)vos_mem_malloc(
12787 sizeof(WDI_SpoofMacAddrInfoType));
12788 if(NULL == WDI_SpoofMacAddrInfoParams) {
12789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12790 "%s: VOS MEM Alloc Failure in Spoof Req", __func__);
12791 VOS_ASSERT(0);
12792 return VOS_STATUS_E_NOMEM;
12793 }
12794 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12795 if(NULL == pWdaParams) {
12796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12797 "%s: VOS MEM Alloc Failure", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +053012798 vos_mem_free(WDI_SpoofMacAddrInfoParams);
Siddharth Bhal171788a2014-09-29 21:02:40 +053012799 VOS_ASSERT(0);
12800 return VOS_STATUS_E_NOMEM;
12801 }
12802
12803 vos_mem_copy(WDI_SpoofMacAddrInfoParams->macAddr,
12804 pReq->macAddr, VOS_MAC_ADDRESS_LEN);
12805
12806 pWdaParams->pWdaContext = pWDA;
12807 /* Store Upper layer req pointer, as this will be used for response */
Siddharth Bhal029d6732014-10-09 21:31:23 +053012808 pWdaParams->wdaMsgParam = (void *)pReq;
12809
12810 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, WDA_MAC_ADDRESS_STR,
12811 WDA_MAC_ADDR_ARRAY(WDI_SpoofMacAddrInfoParams->macAddr));
12812
Siddharth Bhal171788a2014-09-29 21:02:40 +053012813 /* store Params pass it to WDI */
12814 pWdaParams->wdaWdiApiMsgParam = (void *)WDI_SpoofMacAddrInfoParams ;
12815
12816 wdiStatus = WDI_SetSpoofMacAddrReq(WDI_SpoofMacAddrInfoParams,
Siddharth Bhal029d6732014-10-09 21:31:23 +053012817 (WDI_SetSpoofMacAddrRspCb) WDA_SpoofMacAddrRspCallback,
12818 pWdaParams );
Siddharth Bhal171788a2014-09-29 21:02:40 +053012819
12820 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12821 {
12822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12823 "Failure in SetSpoofMacAddrReq Params WDI API, free all the memory " );
12824 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12825 vos_mem_free(pWdaParams->wdaMsgParam);
12826 vos_mem_free(pWdaParams);
12827 }
12828
12829 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
12830}
12831
12832/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012833 * FUNCTION: WDA_McProcessMsg
12834 * Trigger DAL-AL to start CFG download
12835 */
12836VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
12837{
12838 VOS_STATUS status = VOS_STATUS_SUCCESS;
12839 tWDA_CbContext *pWDA = NULL ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012840 if(NULL == pMsg)
Jeff Johnson295189b2012-06-20 16:38:30 -070012841 {
12842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012843 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012844 VOS_ASSERT(0);
12845 return VOS_STATUS_E_FAILURE;
12846 }
12847
12848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012849 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070012850
12851 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
12852 if(NULL == pWDA )
12853 {
12854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012855 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012856 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070012857 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012858 return VOS_STATUS_E_FAILURE;
12859 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012860 /* Process all the WDA messages.. */
12861 switch( pMsg->type )
12862 {
12863 case WNI_CFG_DNLD_REQ:
12864 {
12865 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070012866 /* call WDA complete event if config download success */
12867 if( VOS_IS_STATUS_SUCCESS(status) )
12868 {
12869 vos_WDAComplete_cback(pVosContext);
12870 }
12871 else
12872 {
12873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12874 "WDA Config Download failure" );
12875 }
12876 break ;
12877 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012878 /*
12879 * Init SCAN request from PE, convert it into DAL format
12880 * and send it to DAL
12881 */
12882 case WDA_INIT_SCAN_REQ:
12883 {
12884 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
12885 break ;
12886 }
12887 /* start SCAN request from PE */
12888 case WDA_START_SCAN_REQ:
12889 {
12890 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
12891 break ;
12892 }
12893 /* end SCAN request from PE */
12894 case WDA_END_SCAN_REQ:
12895 {
12896 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
12897 break ;
12898 }
12899 /* end SCAN request from PE */
12900 case WDA_FINISH_SCAN_REQ:
12901 {
12902 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
12903 break ;
12904 }
12905 /* join request from PE */
12906 case WDA_CHNL_SWITCH_REQ:
12907 {
12908 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
12909 {
12910 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
12911 }
12912 else
12913 {
Kalikinkar dhara1e83b772014-02-06 12:59:22 -080012914 if (IS_FEATURE_SUPPORTED_BY_FW(CH_SWITCH_V1) &&
12915 eHAL_CHANNEL_SWITCH_SOURCE_CSA ==
12916 ((tSwitchChannelParams*)pMsg->bodyptr)->channelSwitchSrc )
12917 {
12918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12919 "call ProcessChannelSwitchReq_V1" );
12920 WDA_ProcessChannelSwitchReq_V1(pWDA,
12921 (tSwitchChannelParams*)pMsg->bodyptr) ;
12922 }
12923 else
12924 {
12925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12926 "call ProcessChannelSwitchReq" );
12927 WDA_ProcessChannelSwitchReq(pWDA,
12928 (tSwitchChannelParams*)pMsg->bodyptr) ;
12929 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012930 }
12931 break ;
12932 }
12933 /* ADD BSS request from PE */
12934 case WDA_ADD_BSS_REQ:
12935 {
12936 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
12937 break ;
12938 }
12939 case WDA_ADD_STA_REQ:
12940 {
12941 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
12942 break ;
12943 }
12944 case WDA_DELETE_BSS_REQ:
12945 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012946 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
12947 break ;
12948 }
12949 case WDA_DELETE_STA_REQ:
12950 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012951 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
12952 break ;
12953 }
12954 case WDA_CONFIG_PARAM_UPDATE_REQ:
12955 {
12956 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
12957 break ;
12958 }
12959 case WDA_SET_BSSKEY_REQ:
12960 {
12961 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
12962 break ;
12963 }
12964 case WDA_SET_STAKEY_REQ:
12965 {
12966 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
12967 break ;
12968 }
12969 case WDA_SET_STA_BCASTKEY_REQ:
12970 {
12971 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
12972 break ;
12973 }
12974 case WDA_REMOVE_BSSKEY_REQ:
12975 {
12976 WDA_ProcessRemoveBssKeyReq(pWDA,
12977 (tRemoveBssKeyParams *)pMsg->bodyptr);
12978 break ;
12979 }
12980 case WDA_REMOVE_STAKEY_REQ:
12981 {
12982 WDA_ProcessRemoveStaKeyReq(pWDA,
12983 (tRemoveStaKeyParams *)pMsg->bodyptr);
12984 break ;
12985 }
12986 case WDA_REMOVE_STA_BCASTKEY_REQ:
12987 {
12988 /* TODO: currently UMAC is not sending this request, Add the code for
12989 handling this request when UMAC supports */
12990 break;
12991 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012992#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -070012993 case WDA_TSM_STATS_REQ:
12994 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070012995 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012996 break;
12997 }
12998#endif
12999 case WDA_UPDATE_EDCA_PROFILE_IND:
13000 {
13001 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
13002 break;
13003 }
13004 case WDA_ADD_TS_REQ:
13005 {
13006 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
13007 break;
13008 }
13009 case WDA_DEL_TS_REQ:
13010 {
13011 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
13012 break;
13013 }
13014 case WDA_ADDBA_REQ:
13015 {
13016 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
13017 break;
13018 }
13019 case WDA_DELBA_IND:
13020 {
13021 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
13022 break;
13023 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080013024 case WDA_UPDATE_CHAN_LIST_REQ:
13025 {
13026 WDA_ProcessUpdateChannelList(pWDA,
13027 (tSirUpdateChanList *)pMsg->bodyptr);
13028 break;
13029 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013030 case WDA_SET_LINK_STATE:
13031 {
13032 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
13033 break;
13034 }
13035 case WDA_GET_STATISTICS_REQ:
13036 {
13037 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
13038 break;
13039 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013040#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080013041 case WDA_GET_ROAM_RSSI_REQ:
13042 {
13043 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
13044 break;
13045 }
13046#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013047 case WDA_PWR_SAVE_CFG:
13048 {
13049 if(pWDA->wdaState == WDA_READY_STATE)
13050 {
13051 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
13052 }
13053 else
13054 {
13055 if(NULL != pMsg->bodyptr)
13056 {
13057 vos_mem_free(pMsg->bodyptr);
13058 }
13059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13060 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
13061 }
13062 break;
13063 }
13064 case WDA_ENTER_IMPS_REQ:
13065 {
13066 if(pWDA->wdaState == WDA_READY_STATE)
13067 {
13068 WDA_ProcessEnterImpsReq(pWDA);
13069 }
13070 else
13071 {
13072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13073 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
13074 }
13075 break;
13076 }
13077 case WDA_EXIT_IMPS_REQ:
13078 {
13079 if(pWDA->wdaState == WDA_READY_STATE)
13080 {
13081 WDA_ProcessExitImpsReq(pWDA);
13082 }
13083 else
13084 {
13085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13086 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
13087 }
13088 break;
13089 }
13090 case WDA_ENTER_BMPS_REQ:
13091 {
13092 if(pWDA->wdaState == WDA_READY_STATE)
13093 {
13094 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
13095 }
13096 else
13097 {
13098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13099 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
13100 }
13101 break;
13102 }
13103 case WDA_EXIT_BMPS_REQ:
13104 {
13105 if(pWDA->wdaState == WDA_READY_STATE)
13106 {
13107 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
13108 }
13109 else
13110 {
13111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13112 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
13113 }
13114 break;
13115 }
13116 case WDA_ENTER_UAPSD_REQ:
13117 {
13118 if(pWDA->wdaState == WDA_READY_STATE)
13119 {
13120 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
13121 }
13122 else
13123 {
13124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13125 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
13126 }
13127 break;
13128 }
13129 case WDA_EXIT_UAPSD_REQ:
13130 {
13131 if(pWDA->wdaState == WDA_READY_STATE)
13132 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013133 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070013134 }
13135 else
13136 {
13137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13138 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
13139 }
13140 break;
13141 }
13142 case WDA_UPDATE_UAPSD_IND:
13143 {
13144 if(pWDA->wdaState == WDA_READY_STATE)
13145 {
13146 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
13147 }
13148 else
13149 {
13150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13151 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
13152 }
13153 break;
13154 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013155 case WDA_REGISTER_PE_CALLBACK :
13156 {
13157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13158 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
13159 /*TODO: store the PE callback */
13160 /* Do Nothing? MSG Body should be freed at here */
13161 if(NULL != pMsg->bodyptr)
13162 {
13163 vos_mem_free(pMsg->bodyptr);
13164 }
13165 break;
13166 }
13167 case WDA_SYS_READY_IND :
13168 {
13169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13170 "Handling msg type WDA_SYS_READY_IND " );
13171 pWDA->wdaState = WDA_READY_STATE;
13172 if(NULL != pMsg->bodyptr)
13173 {
13174 vos_mem_free(pMsg->bodyptr);
13175 }
13176 break;
13177 }
13178 case WDA_BEACON_FILTER_IND :
13179 {
13180 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
13181 break;
13182 }
13183 case WDA_BTC_SET_CFG:
13184 {
13185 /*TODO: handle this while dealing with BTC */
13186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13187 "Handling msg type WDA_BTC_SET_CFG " );
13188 /* Do Nothing? MSG Body should be freed at here */
13189 if(NULL != pMsg->bodyptr)
13190 {
13191 vos_mem_free(pMsg->bodyptr);
13192 }
13193 break;
13194 }
13195 case WDA_SIGNAL_BT_EVENT:
13196 {
13197 /*TODO: handle this while dealing with BTC */
13198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13199 "Handling msg type WDA_SIGNAL_BT_EVENT " );
13200 /* Do Nothing? MSG Body should be freed at here */
13201 if(NULL != pMsg->bodyptr)
13202 {
13203 vos_mem_free(pMsg->bodyptr);
13204 }
13205 break;
13206 }
13207 case WDA_CFG_RXP_FILTER_REQ:
13208 {
13209 WDA_ProcessConfigureRxpFilterReq(pWDA,
13210 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
13211 break;
13212 }
13213 case WDA_SET_HOST_OFFLOAD:
13214 {
13215 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
13216 break;
13217 }
13218 case WDA_SET_KEEP_ALIVE:
13219 {
13220 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
13221 break;
13222 }
13223#ifdef WLAN_NS_OFFLOAD
13224 case WDA_SET_NS_OFFLOAD:
13225 {
13226 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
13227 break;
13228 }
13229#endif //WLAN_NS_OFFLOAD
13230 case WDA_ADD_STA_SELF_REQ:
13231 {
13232 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
13233 break;
13234 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013235 case WDA_DEL_STA_SELF_REQ:
13236 {
13237 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
13238 break;
13239 }
13240 case WDA_WOWL_ADD_BCAST_PTRN:
13241 {
13242 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
13243 break;
13244 }
13245 case WDA_WOWL_DEL_BCAST_PTRN:
13246 {
13247 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
13248 break;
13249 }
13250 case WDA_WOWL_ENTER_REQ:
13251 {
13252 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
13253 break;
13254 }
13255 case WDA_WOWL_EXIT_REQ:
13256 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013257 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070013258 break;
13259 }
13260 case WDA_TL_FLUSH_AC_REQ:
13261 {
13262 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
13263 break;
13264 }
13265 case WDA_SIGNAL_BTAMP_EVENT:
13266 {
13267 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
13268 break;
13269 }
Abhishek Singh85b74712014-10-08 11:38:19 +053013270 case WDA_FW_STATS_GET_REQ:
13271 {
13272 WDA_ProcessFWStatsGetReq(pWDA,
13273 (tSirFWStatsGetReq *)pMsg->bodyptr);
13274 break;
13275 }
Sunil Duttbd736ed2014-05-26 21:19:41 +053013276#ifdef WLAN_FEATURE_LINK_LAYER_STATS
13277 case WDA_LINK_LAYER_STATS_SET_REQ:
13278 {
13279 WDA_ProcessLLStatsSetReq(pWDA, (tSirLLStatsSetReq *)pMsg->bodyptr);
13280 break;
13281 }
13282 case WDA_LINK_LAYER_STATS_GET_REQ:
13283 {
13284 WDA_ProcessLLStatsGetReq(pWDA, (tSirLLStatsGetReq *)pMsg->bodyptr);
13285 break;
13286 }
13287 case WDA_LINK_LAYER_STATS_CLEAR_REQ:
13288 {
13289 WDA_ProcessLLStatsClearReq(pWDA, (tSirLLStatsClearReq *)pMsg->bodyptr);
13290 break;
13291 }
13292#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Dino Mycle41bdc942014-06-10 11:30:24 +053013293#ifdef WLAN_FEATURE_EXTSCAN
13294 case WDA_EXTSCAN_GET_CAPABILITIES_REQ:
13295 {
13296 WDA_ProcessEXTScanGetCapabilitiesReq(pWDA,
13297 (tSirGetEXTScanCapabilitiesReqParams *)pMsg->bodyptr);
13298 break;
13299 }
13300 case WDA_EXTSCAN_START_REQ:
13301 {
13302 WDA_ProcessEXTScanStartReq(pWDA,
13303 (tSirEXTScanStartReqParams *)pMsg->bodyptr);
13304 break;
13305 }
13306 case WDA_EXTSCAN_STOP_REQ:
13307 {
13308 WDA_ProcessEXTScanStopReq(pWDA,
13309 (tSirEXTScanStopReqParams *)pMsg->bodyptr);
13310 break;
13311 }
13312 case WDA_EXTSCAN_GET_CACHED_RESULTS_REQ:
13313 {
13314 WDA_ProcessEXTScanGetCachedResultsReq(pWDA,
13315 (tSirEXTScanGetCachedResultsReqParams *)pMsg->bodyptr);
13316 break;
13317 }
13318 case WDA_EXTSCAN_SET_BSSID_HOTLIST_REQ:
13319 {
13320 WDA_ProcessEXTScanSetBSSIDHotlistReq(pWDA,
13321 (tSirEXTScanSetBssidHotListReqParams *)pMsg->bodyptr);
13322 break;
13323 }
13324 case WDA_EXTSCAN_RESET_BSSID_HOTLIST_REQ:
13325 {
13326 WDA_ProcessEXTScanResetBSSIDHotlistReq(pWDA,
13327 (tSirEXTScanResetBssidHotlistReqParams *)pMsg->bodyptr);
13328 break;
13329 }
13330 case WDA_EXTSCAN_SET_SIGNF_RSSI_CHANGE_REQ:
13331 {
13332 WDA_ProcessEXTScanSetSignfRSSIChangeReq(pWDA,
13333 (tSirEXTScanSetSignificantChangeReqParams *)pMsg->bodyptr);
13334 break;
13335 }
13336 case WDA_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_REQ:
13337 {
13338 WDA_ProcessEXTScanResetSignfRSSIChangeReq(pWDA,
13339 (tSirEXTScanResetSignificantChangeReqParams *)pMsg->bodyptr);
13340 break;
13341 }
13342#endif /* WLAN_FEATURE_EXTSCAN */
Jeff Johnson295189b2012-06-20 16:38:30 -070013343#ifdef WDA_UT
13344 case WDA_WDI_EVENT_MSG:
13345 {
13346 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
13347 break ;
13348 }
13349#endif
13350 case WDA_UPDATE_BEACON_IND:
13351 {
13352 WDA_ProcessUpdateBeaconParams(pWDA,
13353 (tUpdateBeaconParams *)pMsg->bodyptr);
13354 break;
13355 }
13356 case WDA_SEND_BEACON_REQ:
13357 {
13358 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
13359 break;
13360 }
13361 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
13362 {
13363 WDA_ProcessUpdateProbeRspTemplate(pWDA,
13364 (tSendProbeRespParams *)pMsg->bodyptr);
13365 break;
13366 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013367#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -070013368 case WDA_SET_MAX_TX_POWER_REQ:
13369 {
13370 WDA_ProcessSetMaxTxPowerReq(pWDA,
13371 (tMaxTxPowerParams *)pMsg->bodyptr);
13372 break;
13373 }
13374#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070013375 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
13376 {
13377 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
13378 pMsg->bodyptr);
13379 break;
13380 }
schang86c22c42013-03-13 18:41:24 -070013381 case WDA_SET_TX_POWER_REQ:
13382 {
13383 WDA_ProcessSetTxPowerReq(pWDA,
13384 (tSirSetTxPowerReq *)pMsg->bodyptr);
13385 break;
13386 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013387 case WDA_SET_P2P_GO_NOA_REQ:
13388 {
13389 WDA_ProcessSetP2PGONOAReq(pWDA,
13390 (tP2pPsParams *)pMsg->bodyptr);
13391 break;
13392 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013393 /* timer related messages */
13394 case WDA_TIMER_BA_ACTIVITY_REQ:
13395 {
13396 WDA_BaCheckActivity(pWDA) ;
13397 break ;
13398 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013399
13400 /* timer related messages */
13401 case WDA_TIMER_TRAFFIC_STATS_IND:
13402 {
13403 WDA_TimerTrafficStatsInd(pWDA);
13404 break;
13405 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013406#ifdef WLAN_FEATURE_VOWIFI_11R
13407 case WDA_AGGR_QOS_REQ:
13408 {
13409 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
13410 break;
13411 }
13412#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070013413 case WDA_FTM_CMD_REQ:
13414 {
13415 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
13416 break ;
13417 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013418#ifdef FEATURE_OEM_DATA_SUPPORT
13419 case WDA_START_OEM_DATA_REQ:
13420 {
13421 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
13422 break;
13423 }
13424#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070013425 /* Tx Complete Time out Indication */
13426 case WDA_TX_COMPLETE_TIMEOUT_IND:
13427 {
13428 WDA_ProcessTxCompleteTimeOutInd(pWDA);
13429 break;
13430 }
13431 case WDA_WLAN_SUSPEND_IND:
13432 {
13433 WDA_ProcessWlanSuspendInd(pWDA,
13434 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
13435 break;
13436 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013437 case WDA_WLAN_RESUME_REQ:
13438 {
13439 WDA_ProcessWlanResumeReq(pWDA,
13440 (tSirWlanResumeParam *)pMsg->bodyptr) ;
13441 break;
13442 }
13443
13444 case WDA_UPDATE_CF_IND:
13445 {
13446 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
13447 pMsg->bodyptr = NULL;
13448 break;
13449 }
13450#ifdef FEATURE_WLAN_SCAN_PNO
13451 case WDA_SET_PNO_REQ:
13452 {
13453 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
13454 break;
13455 }
13456 case WDA_UPDATE_SCAN_PARAMS_REQ:
13457 {
13458 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
13459 break;
13460 }
13461 case WDA_SET_RSSI_FILTER_REQ:
13462 {
13463 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
13464 break;
13465 }
13466#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013467#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013468 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013469 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013470 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013471 break;
13472 }
13473#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013474 case WDA_SET_TX_PER_TRACKING_REQ:
13475 {
13476 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
13477 break;
13478 }
13479
13480#ifdef WLAN_FEATURE_PACKET_FILTERING
13481 case WDA_8023_MULTICAST_LIST_REQ:
13482 {
13483 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
13484 break;
13485 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013486 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
13487 {
13488 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
13489 break;
13490 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013491 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
13492 {
13493 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
13494 break;
13495 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013496 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
13497 {
13498 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
13499 break;
13500 }
13501#endif // WLAN_FEATURE_PACKET_FILTERING
13502
13503
13504 case WDA_TRANSMISSION_CONTROL_IND:
13505 {
13506 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
13507 break;
13508 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013509 case WDA_SET_POWER_PARAMS_REQ:
13510 {
13511 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
13512 break;
13513 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013514#ifdef WLAN_FEATURE_GTK_OFFLOAD
13515 case WDA_GTK_OFFLOAD_REQ:
13516 {
13517 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
13518 break;
13519 }
13520
13521 case WDA_GTK_OFFLOAD_GETINFO_REQ:
13522 {
13523 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
13524 break;
13525 }
13526#endif //WLAN_FEATURE_GTK_OFFLOAD
13527
13528 case WDA_SET_TM_LEVEL_REQ:
13529 {
13530 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
13531 break;
13532 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053013533
Mohit Khanna4a70d262012-09-11 16:30:12 -070013534 case WDA_UPDATE_OP_MODE:
13535 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053013536 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
13537 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
13538 {
13539 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
13540 }
13541 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070013542 {
13543 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
13544 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
13545 else
13546 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013547 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070013548 }
13549 else
13550 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013551 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070013552 break;
13553 }
Chet Lanctot186b5732013-03-18 10:26:30 -070013554#ifdef WLAN_FEATURE_11W
13555 case WDA_EXCLUDE_UNENCRYPTED_IND:
13556 {
13557 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
13558 break;
13559 }
13560#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053013561#ifdef FEATURE_WLAN_TDLS
13562 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
13563 {
13564 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
13565 break;
13566 }
13567#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013568 case WDA_DHCP_START_IND:
13569 {
13570 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
13571 break;
13572 }
13573 case WDA_DHCP_STOP_IND:
13574 {
13575 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
13576 break;
13577 }
Leo Chang9056f462013-08-01 19:21:11 -070013578#ifdef FEATURE_WLAN_LPHB
13579 case WDA_LPHB_CONF_REQ:
13580 {
13581 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
13582 break;
13583 }
13584#endif
Yue Mab9c86f42013-08-14 15:59:08 -070013585 case WDA_ADD_PERIODIC_TX_PTRN_IND:
13586 {
13587 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
13588 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
13589 break;
13590 }
13591 case WDA_DEL_PERIODIC_TX_PTRN_IND:
13592 {
13593 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
13594 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
13595 break;
13596 }
13597
Rajeev79dbe4c2013-10-05 11:03:42 +053013598#ifdef FEATURE_WLAN_BATCH_SCAN
13599 case WDA_SET_BATCH_SCAN_REQ:
13600 {
13601 WDA_ProcessSetBatchScanReq(pWDA,
13602 (tSirSetBatchScanReq *)pMsg->bodyptr);
13603 break;
13604 }
Chittajit Mitraf5413a42013-10-18 14:20:08 -070013605 case WDA_RATE_UPDATE_IND:
13606 {
13607 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
13608 break;
13609 }
Rajeev79dbe4c2013-10-05 11:03:42 +053013610 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
13611 {
13612 WDA_ProcessTriggerBatchScanResultInd(pWDA,
13613 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
13614 break;
13615 }
13616 case WDA_STOP_BATCH_SCAN_IND:
13617 {
13618 WDA_ProcessStopBatchScanInd(pWDA,
13619 (tSirStopBatchScanInd *)pMsg->bodyptr);
13620 break;
13621 }
c_hpothu92367912014-05-01 15:18:17 +053013622 case WDA_GET_BCN_MISS_RATE_REQ:
13623 WDA_ProcessGetBcnMissRateReq(pWDA,
13624 (tSirBcnMissRateReq *)pMsg->bodyptr);
13625 break;
Rajeev79dbe4c2013-10-05 11:03:42 +053013626#endif
13627
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053013628 case WDA_HT40_OBSS_SCAN_IND:
13629 {
13630 WDA_ProcessHT40OBSSScanInd(pWDA,
13631 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
13632 break;
13633 }
13634 case WDA_HT40_OBSS_STOP_SCAN_IND:
13635 {
13636 WDA_ProcessHT40OBSSStopScanInd(pWDA,
13637 (tANI_U8*)pMsg->bodyptr);
13638 break;
13639 }
Atul Mittalc0f739f2014-07-31 13:47:47 +053013640// tdlsoffchan
13641#ifdef FEATURE_WLAN_TDLS
13642 case WDA_SET_TDLS_CHAN_SWITCH_REQ:
13643 {
13644 WDA_ProcessSetTdlsChanSwitchReq(pWDA, (tTdlsChanSwitchParams *)pMsg->bodyptr);
13645 break;
13646 }
13647#endif
Siddharth Bhal171788a2014-09-29 21:02:40 +053013648 case WDA_SPOOF_MAC_ADDR_REQ:
13649 {
13650 WDA_ProcessSetSpoofMacAddrReq(pWDA, (tpSpoofMacAddrReqParams)pMsg->bodyptr);
13651 break;
13652 }
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053013653 case WDA_ENCRYPT_MSG_REQ:
13654 {
13655 WDA_ProcessEncryptMsgReq(pWDA, (u8 *)pMsg->bodyptr);
13656 break;
13657 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013658 default:
13659 {
Agarwal Ashishbf98caf2014-03-25 13:29:11 +053013660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070013661 "No Handling for msg type %x in WDA "
13662 ,pMsg->type);
13663 /* Do Nothing? MSG Body should be freed at here */
13664 if(NULL != pMsg->bodyptr)
13665 {
13666 vos_mem_free(pMsg->bodyptr);
13667 }
13668 //WDA_VOS_ASSERT(0) ;
13669 }
13670 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013671 return status ;
13672}
13673
Jeff Johnson295189b2012-06-20 16:38:30 -070013674/*
13675 * FUNCTION: WDA_LowLevelIndCallback
13676 * IND API callback from WDI, send Ind to PE
13677 */
13678void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
13679 void* pUserData )
13680{
13681 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
13682#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
13683 tSirRSSINotification rssiNotification;
13684#endif
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013685 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070013686 {
13687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013688 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013689 VOS_ASSERT(0);
13690 return ;
13691 }
13692
13693 switch(wdiLowLevelInd->wdiIndicationType)
13694 {
13695 case WDI_RSSI_NOTIFICATION_IND:
13696 {
13697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13698 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013699#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
13700 rssiNotification.bReserved =
13701 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
13702 rssiNotification.bRssiThres1NegCross =
13703 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
13704 rssiNotification.bRssiThres1PosCross =
13705 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
13706 rssiNotification.bRssiThres2NegCross =
13707 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
13708 rssiNotification.bRssiThres2PosCross =
13709 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
13710 rssiNotification.bRssiThres3NegCross =
13711 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
13712 rssiNotification.bRssiThres3PosCross =
13713 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080013714 rssiNotification.avgRssi = (v_S7_t)
13715 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070013716 WLANTL_BMPSRSSIRegionChangedNotification(
13717 pWDA->pVosContext,
13718 &rssiNotification);
13719#endif
13720 break ;
13721 }
13722 case WDI_MISSED_BEACON_IND:
13723 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080013724 tpSirSmeMissedBeaconInd pMissBeacInd =
13725 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070013726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13727 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013728 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080013729 if(NULL == pMissBeacInd)
13730 {
13731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13732 "%s: VOS MEM Alloc Failure", __func__);
13733 break;
13734 }
13735 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
13736 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
13737 pMissBeacInd->bssIdx =
13738 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
13739 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013740 break ;
13741 }
13742 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
13743 {
13744 /* TODO: Decode Ind and send Ind to PE */
13745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13746 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
13747 break ;
13748 }
13749
13750 case WDI_MIC_FAILURE_IND:
13751 {
13752 tpSirSmeMicFailureInd pMicInd =
13753 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
13754
13755 if(NULL == pMicInd)
13756 {
13757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013758 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013759 break;
13760 }
13761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13762 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013763 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
13764 pMicInd->length = sizeof(tSirSmeMicFailureInd);
13765 vos_mem_copy(pMicInd->bssId,
13766 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
13767 sizeof(tSirMacAddr));
13768 vos_mem_copy(pMicInd->info.srcMacAddr,
13769 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
13770 sizeof(tSirMacAddr));
13771 vos_mem_copy(pMicInd->info.taMacAddr,
13772 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
13773 sizeof(tSirMacAddr));
13774 vos_mem_copy(pMicInd->info.dstMacAddr,
13775 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
13776 sizeof(tSirMacAddr));
13777 vos_mem_copy(pMicInd->info.rxMacAddr,
13778 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
13779 sizeof(tSirMacAddr));
13780 pMicInd->info.multicast =
13781 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
13782 pMicInd->info.keyId=
13783 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
13784 pMicInd->info.IV1=
13785 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
13786 vos_mem_copy(pMicInd->info.TSC,
13787 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070013788 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
13789 (void *)pMicInd , 0) ;
13790 break ;
13791 }
13792 case WDI_FATAL_ERROR_IND:
13793 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070013794 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070013795 /* TODO: Decode Ind and send Ind to PE */
13796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13797 "Received WDI_FATAL_ERROR_IND from WDI ");
13798 break ;
13799 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013800 case WDI_DEL_STA_IND:
13801 {
Jeff Johnson295189b2012-06-20 16:38:30 -070013802 tpDeleteStaContext pDelSTACtx =
13803 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
13804
13805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13806 "Received WDI_DEL_STA_IND from WDI ");
13807 if(NULL == pDelSTACtx)
13808 {
13809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013810 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013811 break;
13812 }
13813 vos_mem_copy(pDelSTACtx->addr2,
13814 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
13815 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013816 vos_mem_copy(pDelSTACtx->bssId,
13817 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
13818 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013819 pDelSTACtx->assocId =
13820 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
13821 pDelSTACtx->reasonCode =
13822 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
13823 pDelSTACtx->staId =
13824 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070013825 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
13826 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013827 break ;
13828 }
13829 case WDI_COEX_IND:
13830 {
13831 tANI_U32 index;
13832 vos_msg_t vosMsg;
c_hpothub3458992014-09-19 19:58:57 +053013833 tSirSmeCoexInd *pSmeCoexInd;
13834
13835 if (SIR_COEX_IND_TYPE_CXM_FEATURES_NOTIFICATION ==
13836 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType)
13837 {
13838 if(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData)
13839 {
13840 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13841 FL("Coex state: 0x%x coex feature: 0x%x"),
13842 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[0],
13843 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[1]);
13844
13845 if (wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2] << 16)
13846 {
13847 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, FL("power limit: 0x%x"),
13848 (tANI_U16)(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2]));
13849 }
13850 }
13851 break;
13852 }
13853
13854 pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070013855 if(NULL == pSmeCoexInd)
13856 {
13857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013858 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013859 break;
13860 }
13861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13862 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013863 /* Message Header */
13864 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
13865 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070013866 /* Info from WDI Indication */
13867 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
13868 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
13869 {
13870 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
13871 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013872 /* VOS message wrapper */
13873 vosMsg.type = eWNI_SME_COEX_IND;
13874 vosMsg.bodyptr = (void *)pSmeCoexInd;
13875 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013876 /* Send message to SME */
13877 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13878 {
13879 /* free the mem and return */
13880 vos_mem_free((v_VOID_t *)pSmeCoexInd);
13881 }
13882 else
13883 {
13884 /* DEBUG */
13885 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13886 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
13887 pSmeCoexInd->coexIndType,
13888 pSmeCoexInd->coexIndData[0],
13889 pSmeCoexInd->coexIndData[1],
13890 pSmeCoexInd->coexIndData[2],
13891 pSmeCoexInd->coexIndData[3]);
13892 }
13893 break;
13894 }
13895 case WDI_TX_COMPLETE_IND:
13896 {
13897 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
13898 /* Calling TxCompleteAck Indication from wda context*/
13899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13900 "Complete Indication received from HAL");
13901 if( pWDA->pAckTxCbFunc )
13902 {
13903 if( VOS_STATUS_SUCCESS !=
13904 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
13905 {
13906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13907 "Tx Complete timeout Timer Stop Failed ");
13908 }
13909 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
13910 pWDA->pAckTxCbFunc = NULL;
13911 }
13912 else
13913 {
13914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13915 "Tx Complete Indication is received after timeout ");
13916 }
13917 break;
13918 }
Viral Modid86bde22012-12-10 13:09:21 -080013919 case WDI_P2P_NOA_START_IND :
13920 {
13921 tSirP2PNoaStart *pP2pNoaStart =
13922 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
13923
13924 if (NULL == pP2pNoaStart)
13925 {
13926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13927 "Memory allocation failure, "
13928 "WDI_P2P_NOA_START_IND not forwarded");
13929 break;
13930 }
13931 pP2pNoaStart->status =
13932 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
13933 pP2pNoaStart->bssIdx =
13934 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
13935 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
13936 (void *)pP2pNoaStart , 0) ;
13937 break;
13938 }
13939
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053013940#ifdef FEATURE_WLAN_TDLS
13941 case WDI_TDLS_IND :
13942 {
13943 tSirTdlsInd *pTdlsInd =
13944 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
13945
13946 if (NULL == pTdlsInd)
13947 {
13948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13949 "Memory allocation failure, "
13950 "WDI_TDLS_IND not forwarded");
13951 break;
13952 }
13953 pTdlsInd->status =
13954 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
13955 pTdlsInd->assocId =
13956 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
13957 pTdlsInd->staIdx =
13958 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
13959 pTdlsInd->reasonCode =
13960 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
13961 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
13962 (void *)pTdlsInd , 0) ;
13963 break;
13964 }
13965#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013966 case WDI_P2P_NOA_ATTR_IND :
13967 {
13968 tSirP2PNoaAttr *pP2pNoaAttr =
13969 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13971 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070013972 if (NULL == pP2pNoaAttr)
13973 {
13974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13975 "Memory allocation failure, "
13976 "WDI_P2P_NOA_ATTR_IND not forwarded");
13977 break;
13978 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013979 pP2pNoaAttr->index =
13980 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
13981 pP2pNoaAttr->oppPsFlag =
13982 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
13983 pP2pNoaAttr->ctWin =
13984 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
13985
13986 pP2pNoaAttr->uNoa1IntervalCnt =
13987 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
13988 pP2pNoaAttr->uNoa1Duration =
13989 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
13990 pP2pNoaAttr->uNoa1Interval =
13991 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
13992 pP2pNoaAttr->uNoa1StartTime =
13993 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070013994 pP2pNoaAttr->uNoa2IntervalCnt =
13995 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
13996 pP2pNoaAttr->uNoa2Duration =
13997 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
13998 pP2pNoaAttr->uNoa2Interval =
13999 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
14000 pP2pNoaAttr->uNoa2StartTime =
14001 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070014002 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
14003 (void *)pP2pNoaAttr , 0) ;
14004 break;
14005 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014006#ifdef FEATURE_WLAN_SCAN_PNO
14007 case WDI_PREF_NETWORK_FOUND_IND:
14008 {
14009 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070014010 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
14011 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
14012 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
14013 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
14014
Jeff Johnson295189b2012-06-20 16:38:30 -070014015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14016 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070014017 if (NULL == pPrefNetworkFoundInd)
14018 {
14019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14020 "Memory allocation failure, "
14021 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053014022 if (NULL !=
14023 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
14024 {
14025 wpalMemoryFree(
14026 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
14027 );
14028 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
14029 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014030 break;
14031 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014032 /* Message Header */
14033 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070014034 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070014035
14036 /* Info from WDI Indication */
14037 pPrefNetworkFoundInd->ssId.length =
14038 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070014039 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070014040 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
14041 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
14042 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070014043 if (NULL !=
14044 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
14045 {
14046 pPrefNetworkFoundInd->frameLength =
14047 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
14048 vos_mem_copy( pPrefNetworkFoundInd->data,
14049 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
14050 pPrefNetworkFoundInd->frameLength);
14051 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
14052 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
14053 }
14054 else
14055 {
14056 pPrefNetworkFoundInd->frameLength = 0;
14057 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014058 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070014059 /* VOS message wrapper */
14060 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
14061 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
14062 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070014063 /* Send message to SME */
14064 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14065 {
14066 /* free the mem and return */
14067 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
14068 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014069 break;
14070 }
14071#endif // FEATURE_WLAN_SCAN_PNO
14072
14073#ifdef WLAN_WAKEUP_EVENTS
14074 case WDI_WAKE_REASON_IND:
14075 {
14076 vos_msg_t vosMsg;
14077 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
14078 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
14079 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
14080
14081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Sushant Kaushik1b645382014-10-13 16:39:36 +053014082 "[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 -070014083 wdiLowLevelInd->wdiIndicationType,
14084 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
14085 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
14086 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
14087
14088 if (NULL == pWakeReasonInd)
14089 {
14090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14091 "Memory allocation failure, "
14092 "WDI_WAKE_REASON_IND not forwarded");
14093 break;
14094 }
14095
14096 vos_mem_zero(pWakeReasonInd, allocSize);
14097
14098 /* Message Header */
14099 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
14100 pWakeReasonInd->mesgLen = allocSize;
14101
14102 /* Info from WDI Indication */
14103 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
14104 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
14105 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
14106 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
14107 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
14108 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
14109 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
14110 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
14111
14112 /* VOS message wrapper */
14113 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
14114 vosMsg.bodyptr = (void *) pWakeReasonInd;
14115 vosMsg.bodyval = 0;
14116
14117 /* Send message to SME */
14118 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14119 {
14120 /* free the mem and return */
14121 vos_mem_free((v_VOID_t *) pWakeReasonInd);
14122 }
14123
14124 break;
14125 }
14126#endif // WLAN_WAKEUP_EVENTS
14127
14128 case WDI_TX_PER_HIT_IND:
14129 {
14130 vos_msg_t vosMsg;
14131 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
14132 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
14133 /* VOS message wrapper */
14134 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
14135 vosMsg.bodyptr = NULL;
14136 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070014137 /* Send message to SME */
14138 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14139 {
14140 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
14141 }
14142 break;
14143 }
14144
Leo Chang9056f462013-08-01 19:21:11 -070014145#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070014146 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070014147 {
Leo Changd9df8aa2013-09-26 13:32:26 -070014148 vos_msg_t vosMsg;
14149 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070014150
Leo Changd9df8aa2013-09-26 13:32:26 -070014151 lphbInd =
14152 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
14153 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070014154 {
14155 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14156 "%s: LPHB IND buffer alloc Fail", __func__);
14157 return ;
14158 }
14159
Leo Changd9df8aa2013-09-26 13:32:26 -070014160 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070014161 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070014162 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070014163 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070014164 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070014165 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
14166
14167 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070014168 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070014169 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
14170
Leo Changd9df8aa2013-09-26 13:32:26 -070014171 vosMsg.type = eWNI_SME_LPHB_IND;
14172 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070014173 vosMsg.bodyval = 0;
14174 /* Send message to SME */
14175 if (VOS_STATUS_SUCCESS !=
14176 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14177 {
14178 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
14179 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070014180 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070014181 }
14182 break;
14183 }
14184#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070014185 case WDI_PERIODIC_TX_PTRN_FW_IND:
14186 {
14187 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14188 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
14189 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
14190 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
14191 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
14192 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
14193 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
14194
14195 break;
14196 }
Leo Chang9056f462013-08-01 19:21:11 -070014197
Ravi Joshid2ca7c42013-07-23 08:37:49 -070014198 case WDI_IBSS_PEER_INACTIVITY_IND:
14199 {
14200 tSirIbssPeerInactivityInd *pIbssInd =
14201 (tSirIbssPeerInactivityInd *)
14202 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
14203
14204 if (NULL == pIbssInd)
14205 {
14206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14207 "Memory allocation failure, "
14208 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
14209 break;
14210 }
14211
14212 pIbssInd->bssIdx =
14213 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
14214 pIbssInd->staIdx =
14215 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
14216 vos_mem_copy(pIbssInd->peerAddr,
14217 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
14218 sizeof(tSirMacAddr));
14219 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
14220 break;
14221 }
14222
Rajeev79dbe4c2013-10-05 11:03:42 +053014223#ifdef FEATURE_WLAN_BATCH_SCAN
14224 case WDI_BATCH_SCAN_RESULT_IND:
14225 {
14226 void *pBatchScanResult;
14227 void *pCallbackContext;
14228 tpAniSirGlobal pMac;
14229
14230 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14231 "Received WDI_BATCHSCAN_RESULT_IND from FW");
14232
14233 /*sanity check*/
Sunil Duttbd736ed2014-05-26 21:19:41 +053014234 if (NULL == pWDA)
Rajeev79dbe4c2013-10-05 11:03:42 +053014235 {
14236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14237 "%s:pWDA is NULL", __func__);
14238 VOS_ASSERT(0);
14239 return;
14240 }
14241
14242 pBatchScanResult =
14243 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
14244 if (NULL == pBatchScanResult)
14245 {
14246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14247 "%s:Batch scan result from FW is null can't invoke HDD callback",
14248 __func__);
14249 VOS_ASSERT(0);
14250 return;
14251 }
14252
14253 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14254 if (NULL == pMac)
14255 {
14256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14257 "%s:pMac is NULL", __func__);
14258 VOS_ASSERT(0);
14259 return;
14260 }
14261
14262 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
14263 /*call hdd callback with set batch scan response data*/
14264 if(pMac->pmc.batchScanResultCallback)
14265 {
14266 pMac->pmc.batchScanResultCallback(pCallbackContext,
14267 pBatchScanResult);
14268 }
14269 else
14270 {
14271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14272 "%s:HDD callback is null", __func__);
14273 VOS_ASSERT(0);
14274 }
14275 break;
14276 }
14277#endif
14278
Leo Chang0b0e45a2013-12-15 15:18:55 -080014279#ifdef FEATURE_WLAN_CH_AVOID
14280 case WDI_CH_AVOID_IND:
14281 {
14282 vos_msg_t vosMsg;
14283 tSirChAvoidIndType *chAvoidInd;
14284
14285 chAvoidInd =
14286 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
14287 if (NULL == chAvoidInd)
14288 {
14289 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14290 "%s: CH_AVOID IND buffer alloc Fail", __func__);
14291 return ;
14292 }
14293
14294 chAvoidInd->avoidRangeCount =
14295 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
14296 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
14297 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
14298 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
14299
14300 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14301 "%s : WDA CH avoid notification", __func__);
14302
14303 vosMsg.type = eWNI_SME_CH_AVOID_IND;
14304 vosMsg.bodyptr = chAvoidInd;
14305 vosMsg.bodyval = 0;
14306 /* Send message to SME */
14307 if (VOS_STATUS_SUCCESS !=
14308 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14309 {
14310 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14311 "post eWNI_SME_CH_AVOID_IND to SME Failed");
14312 vos_mem_free(chAvoidInd);
14313 }
14314 break;
14315 }
14316#endif /* FEATURE_WLAN_CH_AVOID */
14317
Sunil Duttbd736ed2014-05-26 21:19:41 +053014318#ifdef WLAN_FEATURE_LINK_LAYER_STATS
14319 case WDI_LL_STATS_RESULTS_IND:
14320 {
14321 void *pLinkLayerStatsInd;
Sunil Duttbd736ed2014-05-26 21:19:41 +053014322 tpAniSirGlobal pMac;
14323
14324 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14325 "Received WDI_LL_STATS_RESULTS_IND from FW");
14326
14327 /*sanity check*/
14328 if (NULL == pWDA)
14329 {
14330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14331 "%s:pWDA is NULL", __func__);
14332 VOS_ASSERT(0);
14333 return;
14334 }
14335
14336 pLinkLayerStatsInd =
Dino Mycled3d50022014-07-07 12:58:25 +053014337 (void *)wdiLowLevelInd->
14338 wdiIndicationData.wdiLinkLayerStatsResults.pLinkLayerStatsResults;
Sunil Duttbd736ed2014-05-26 21:19:41 +053014339 if (NULL == pLinkLayerStatsInd)
14340 {
14341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14342 "%s:Link Layer Statistics from FW is null can't invoke HDD callback",
14343 __func__);
14344 VOS_ASSERT(0);
14345 return;
14346 }
14347
14348 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14349 if (NULL == pMac)
14350 {
14351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14352 "%s:pMac is NULL", __func__);
14353 VOS_ASSERT(0);
14354 return;
14355 }
14356
Dino Mycled3d50022014-07-07 12:58:25 +053014357 /* call hdd callback with Link Layer Statistics.
14358 * vdev_id/ifacId in link_stats_results will be
14359 * used to retrieve the correct HDD context
14360 */
Sunil Duttbd736ed2014-05-26 21:19:41 +053014361 if (pMac->sme.pLinkLayerStatsIndCallback)
14362 {
Dino Mycled3d50022014-07-07 12:58:25 +053014363 pMac->sme.pLinkLayerStatsIndCallback(pMac->pAdapter,
Sunil Duttbd736ed2014-05-26 21:19:41 +053014364 WDA_LINK_LAYER_STATS_RESULTS_RSP,
Dino Mycled3d50022014-07-07 12:58:25 +053014365 pLinkLayerStatsInd,
14366 wdiLowLevelInd->
14367 wdiIndicationData.wdiLinkLayerStatsResults.macAddr);
Sunil Duttbd736ed2014-05-26 21:19:41 +053014368 }
14369 else
14370 {
14371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14372 "%s:HDD callback is null", __func__);
14373 }
14374 break;
14375 }
14376#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
14377
Dino Mycle41bdc942014-06-10 11:30:24 +053014378#ifdef WLAN_FEATURE_EXTSCAN
14379 case WDI_EXTSCAN_PROGRESS_IND:
14380 case WDI_EXTSCAN_SCAN_AVAILABLE_IND:
14381 case WDI_EXTSCAN_SCAN_RESULT_IND:
14382 case WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND:
14383 case WDI_EXTSCAN_SIGN_RSSI_RESULT_IND:
14384 {
14385 void *pEXTScanData;
14386 void *pCallbackContext;
14387 tpAniSirGlobal pMac;
14388 tANI_U16 indType;
14389
14390 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14391 "Received WDI_EXTSCAN Indications from FW");
14392 /*sanity check*/
14393 if (NULL == pWDA)
14394 {
14395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14396 "%s:pWDA is NULL", __func__);
14397 VOS_ASSERT(0);
14398 return;
14399 }
14400 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_PROGRESS_IND)
14401 {
14402 indType = WDA_EXTSCAN_PROGRESS_IND;
14403
14404 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14405 "WDI_EXTSCAN Indication is WDI_EXTSCAN_PROGRESS_IND");
14406 }
14407 if (wdiLowLevelInd->wdiIndicationType ==
14408 WDI_EXTSCAN_SCAN_AVAILABLE_IND)
14409 {
14410 indType = WDA_EXTSCAN_SCAN_AVAILABLE_IND;
14411
14412 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14413 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_AVAILABLE_IND");
14414 }
14415 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_SCAN_RESULT_IND)
14416 {
14417 indType = WDA_EXTSCAN_SCAN_RESULT_IND;
14418
14419 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14420 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_RESULT_IND");
14421 }
14422 if (wdiLowLevelInd->wdiIndicationType ==
14423 WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND)
14424 {
14425 indType = WDA_EXTSCAN_BSSID_HOTLIST_RESULT_IND;
14426
14427 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14428 "WDI_EXTSCAN Indication is WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND");
14429 }
14430 if (wdiLowLevelInd->wdiIndicationType ==
14431 WDI_EXTSCAN_SIGN_RSSI_RESULT_IND)
14432 {
14433 indType = WDA_EXTSCAN_SIGNF_RSSI_RESULT_IND;
14434
14435 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14436 "WDI_EXTSCAN Indication is WDA_EXTSCAN_SIGNF_RSSI_RESULT_IND");
14437 }
14438
14439 pEXTScanData =
14440 (void *)wdiLowLevelInd->wdiIndicationData.pEXTScanIndData;
14441 if (NULL == pEXTScanData)
14442 {
14443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14444 "%s: EXTSCAN Indication Data is null, can't invoke HDD callback",
14445 __func__);
14446 VOS_ASSERT(0);
14447 return;
14448 }
14449
14450 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14451 if (NULL == pMac)
14452 {
14453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14454 "%s:pMac is NULL", __func__);
14455 VOS_ASSERT(0);
14456 return;
14457 }
14458
14459 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
14460
14461 if(pMac->sme.pEXTScanIndCb)
14462 {
14463 pMac->sme.pEXTScanIndCb(pCallbackContext,
14464 indType,
14465 pEXTScanData);
14466 }
14467 else
14468 {
14469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14470 "%s:HDD callback is null", __func__);
14471 }
14472 break;
14473 }
14474#endif /* WLAN_FEATURE_EXTSCAN */
Abhishek Singh66c16762014-08-14 19:13:19 +053014475 case WDI_DEL_BA_IND:
14476 {
14477 tpBADeleteParams pDelBAInd =
14478 (tpBADeleteParams)vos_mem_malloc(sizeof(tpBADeleteParams));
14479
14480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14481 "Received WDI_DEL_BA_IND from WDI ");
14482 if(NULL == pDelBAInd)
14483 {
14484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14485 "%s: VOS MEM Alloc Failure", __func__);
14486 break;
14487 }
14488 vos_mem_copy(pDelBAInd->peerMacAddr,
14489 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.peerMacAddr,
14490 sizeof(tSirMacAddr));
14491 vos_mem_copy(pDelBAInd->bssId,
14492 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.bssId,
14493 sizeof(tSirMacAddr));
14494 pDelBAInd->staIdx =
14495 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.staIdx;
14496 pDelBAInd->baTID =
14497 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baTID;
14498 pDelBAInd->baDirection =
14499 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baDirection;
14500 pDelBAInd->reasonCode =
14501 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.reasonCode;
14502
14503 WDA_SendMsg(pWDA, SIR_LIM_DEL_BA_IND,
14504 (void *)pDelBAInd , 0) ;
14505 break;
14506 }
Dino Mycle41bdc942014-06-10 11:30:24 +053014507
Jeff Johnson295189b2012-06-20 16:38:30 -070014508 default:
14509 {
14510 /* TODO error */
14511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14512 "Received UNKNOWN Indication from WDI ");
14513 }
14514 }
14515 return ;
14516}
14517
Jeff Johnson295189b2012-06-20 16:38:30 -070014518/*
14519 * BA related processing in WDA.
14520 */
Jeff Johnson295189b2012-06-20 16:38:30 -070014521void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
14522 void* pUserData)
14523{
14524 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14525 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070014526 if(NULL == pWdaParams)
14527 {
14528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014529 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014530 VOS_ASSERT(0) ;
14531 return ;
14532 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014533 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070014534 vos_mem_free(pWdaParams->wdaMsgParam) ;
14535 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14536 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014538 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014539 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
14540 {
14541 tANI_U8 i = 0 ;
14542 tBaActivityInd *baActivityInd = NULL ;
14543 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
14544 tANI_U8 allocSize = sizeof(tBaActivityInd)
14545 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
14546 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
14547 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014548 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014549 if(NULL == baActivityInd)
14550 {
14551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014552 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014553 VOS_ASSERT(0) ;
14554 return;
14555 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014556 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
14557 sizeof(tSirMacAddr)) ;
14558 baActivityInd->baCandidateCnt = baCandidateCount ;
14559
14560 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
14561 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
14562
14563 for(i = 0 ; i < baCandidateCount ; i++)
14564 {
14565 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014566 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
14567 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014568 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
14569 {
14570 baCandidate->baInfo[tid].fBaEnable =
14571 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
14572 baCandidate->baInfo[tid].startingSeqNum =
14573 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
14574 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070014575 wdiBaCandidate++ ;
14576 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014577 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014578 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
14579 }
14580 else
14581 {
14582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14583 "BA Trigger RSP with Failure received ");
14584 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014585 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014586}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014587
14588
14589/*
14590 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
14591 * during MCC
14592 */
14593void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
14594{
14595 wpt_uint32 enabled;
14596 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
14597 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
14598 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
14599
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014600 if (NULL == pMac )
14601 {
14602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14603 "%s: Invoked with invalid MAC context ", __func__ );
14604 VOS_ASSERT(0);
14605 return;
14606 }
14607
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014608 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
14609 != eSIR_SUCCESS)
14610 {
14611 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14612 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
14613 return;
14614 }
14615
14616 if(!enabled)
14617 {
14618 return;
14619 }
14620
14621 if(NULL == pWDA)
14622 {
14623 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14624 "%s:WDA context is NULL", __func__);
14625 VOS_ASSERT(0);
14626 return;
14627 }
14628
14629 if(activate)
14630 {
14631 if( VOS_STATUS_SUCCESS !=
14632 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
14633 {
14634 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14635 "Traffic Stats Timer Start Failed ");
14636 return;
14637 }
14638 WDI_DS_ActivateTrafficStats();
14639 }
14640 else
14641 {
14642 WDI_DS_DeactivateTrafficStats();
14643 WDI_DS_ClearTrafficStats();
14644
14645 if( VOS_STATUS_SUCCESS !=
14646 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
14647 {
14648 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14649 "Traffic Stats Timer Stop Failed ");
14650 return;
14651 }
14652 }
14653}
14654
14655/*
14656 * Traffic Stats Timer handler
14657 */
14658void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
14659{
14660 WDI_Status wdiStatus;
14661 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
14662 WDI_TrafficStatsIndType trafficStatsIndParams;
14663 wpt_uint32 length, enabled;
14664 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14665
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014666 if (NULL == pMac )
14667 {
14668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14669 "%s: Invoked with invalid MAC context ", __func__ );
14670 VOS_ASSERT(0);
14671 return;
14672 }
14673
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014674 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
14675 != eSIR_SUCCESS)
14676 {
14677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14678 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
14679 return;
14680 }
14681
14682 if(!enabled)
14683 {
14684 WDI_DS_DeactivateTrafficStats();
14685 return;
14686 }
14687
14688 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
14689
14690 if(pWdiTrafficStats != NULL)
14691 {
14692 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
14693 trafficStatsIndParams.length = length;
14694 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080014695 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014696 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
14697 trafficStatsIndParams.pUserData = pWDA;
14698
14699 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
14700
14701 if(WDI_STATUS_PENDING == wdiStatus)
14702 {
14703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14704 "Pending received for %s:%d ",__func__,__LINE__ );
14705 }
14706 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
14707 {
14708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14709 "Failure in %s:%d ",__func__,__LINE__ );
14710 }
14711
14712 WDI_DS_ClearTrafficStats();
14713 }
14714 else
14715 {
14716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
14717 "pWdiTrafficStats is Null");
14718 }
14719
14720 if( VOS_STATUS_SUCCESS !=
14721 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
14722 {
14723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
14724 "Traffic Stats Timer Start Failed ");
14725 return;
14726 }
14727}
14728
Jeff Johnson295189b2012-06-20 16:38:30 -070014729/*
14730 * BA Activity check timer handler
14731 */
14732void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
14733{
14734 tANI_U8 curSta = 0 ;
14735 tANI_U8 tid = 0 ;
14736 tANI_U8 size = 0 ;
14737 tANI_U8 baCandidateCount = 0 ;
14738 tANI_U8 newBaCandidate = 0 ;
Abhishek Singh0644e482014-10-06 18:38:23 +053014739 tANI_U32 val;
Jeff Johnson295189b2012-06-20 16:38:30 -070014740 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
Abhishek Singh0644e482014-10-06 18:38:23 +053014741 tpAniSirGlobal pMac;
14742
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014743 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070014744 {
14745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014746 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014747 VOS_ASSERT(0);
14748 return ;
14749 }
14750 if(WDA_MAX_STA < pWDA->wdaMaxSta)
14751 {
14752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14753 "Inconsistent STA entries in WDA");
14754 VOS_ASSERT(0) ;
Abhishek Singh0644e482014-10-06 18:38:23 +053014755 }
14756 if(NULL == pWDA->pVosContext)
14757 {
14758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14759 "%s: pVosContext is NULL",__func__);
14760 VOS_ASSERT(0);
14761 return ;
14762 }
14763 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Abhishek Singh68883952014-10-14 11:59:05 +053014764 if(NULL == pMac)
14765 {
14766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14767 "%s: pMac is NULL",__func__);
14768 VOS_ASSERT(0);
14769 return ;
14770 }
14771
Abhishek Singh0644e482014-10-06 18:38:23 +053014772 if (wlan_cfgGetInt(pMac,
14773 WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC, &val) !=
14774 eSIR_SUCCESS)
14775 {
14776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14777 "Unable to get WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC");
14778 val = 0;
14779 }
14780
Jeff Johnson295189b2012-06-20 16:38:30 -070014781 /* walk through all STA entries and find out TX packet count */
14782 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
14783 {
Abhishek Singh0644e482014-10-06 18:38:23 +053014784 tANI_U32 currentOperChan = pWDA->wdaStaInfo[curSta].currentOperChan;
Gopichand Nakkala976e3252013-01-03 15:45:56 -080014785#ifdef WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053014786 // We can only do BA on "hard" STAs.
14787 if (!(IS_HWSTA_IDX(curSta)))
14788 {
14789 continue;
14790 }
Gopichand Nakkala976e3252013-01-03 15:45:56 -080014791#endif //WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053014792 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
14793 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070014794 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014795 tANI_U32 txPktCount = 0 ;
14796 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014797 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070014798 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
14799 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070014800 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
14801 curSta, tid, &txPktCount)))
14802 {
14803#if 0
14804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
14805 "************* %d:%d, %d ",curSta, txPktCount,
14806 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
14807#endif
Abhishek Singh0644e482014-10-06 18:38:23 +053014808 if(val && ( (currentOperChan >= SIR_11B_CHANNEL_BEGIN) &&
14809 (currentOperChan <= SIR_11B_CHANNEL_END)))
14810 {
14811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14812 "%s: BTC disabled aggregation - dont start "
14813 "TX ADDBA req",__func__);
14814 }
14815 else if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070014816 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Abhishek Singh424ae432014-12-05 11:54:54 +053014817 && (((eSYSTEM_STA_IN_IBSS_ROLE ==
14818 pWDA->wdaGlobalSystemRole) && txPktCount )
14819 || (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
14820 curSta, tid))))
Jeff Johnson295189b2012-06-20 16:38:30 -070014821 {
14822 /* get prepare for sending message to HAL */
14823 //baCandidate[baCandidateCount].staIdx = curSta ;
14824 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
14825 newBaCandidate = WDA_ENABLE_BA ;
14826 }
14827 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
14828 }
14829 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014830 /* fill the entry for all the sta with given TID's */
14831 if(WDA_ENABLE_BA == newBaCandidate)
14832 {
14833 /* move to next BA candidate */
14834 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
14835 size += sizeof(WDI_TriggerBAReqCandidateType) ;
14836 baCandidateCount++ ;
14837 newBaCandidate = WDA_DISABLE_BA ;
14838 }
14839 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014840 /* prepare and send message to hal */
14841 if( 0 < baCandidateCount)
14842 {
14843 WDI_Status status = WDI_STATUS_SUCCESS ;
14844 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
14845 tWDA_ReqParams *pWdaParams =
14846 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014847 if(NULL == pWdaParams)
14848 {
14849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014850 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014851 VOS_ASSERT(0) ;
14852 return;
14853 }
14854 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
14855 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
14856 if(NULL == wdiTriggerBaReq)
14857 {
14858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014859 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014860 VOS_ASSERT(0) ;
14861 vos_mem_free(pWdaParams);
14862 return;
14863 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014864 do
14865 {
14866 WDI_TriggerBAReqinfoType *triggerBaInfo =
14867 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
14868 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
14869 /* TEMP_FIX: Need to see if WDI need check for assoc session for
14870 * for each request */
14871 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
14872 triggerBaInfo->ucBASessionID = 0;
14873 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
14874 } while(0) ;
14875 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
14876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014877 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014878 pWdaParams->pWdaContext = pWDA;
14879 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
14880 pWdaParams->wdaMsgParam = NULL;
14881 status = WDI_TriggerBAReq(wdiTriggerBaReq,
14882 WDA_TriggerBaReqCallback, pWdaParams) ;
14883 if(IS_WDI_STATUS_FAILURE(status))
14884 {
14885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14886 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
14887 vos_mem_free(pWdaParams->wdaMsgParam) ;
14888 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14889 vos_mem_free(pWdaParams) ;
14890 }
14891 }
14892 else
14893 {
14894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
14895 "There is no TID for initiating BA");
14896 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014897 if( VOS_STATUS_SUCCESS !=
14898 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
14899 {
14900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14901 "BA Activity Timer Stop Failed ");
14902 return ;
14903 }
14904 if( VOS_STATUS_SUCCESS !=
14905 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
14906 {
14907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14908 "BA Activity Timer Start Failed ");
14909 return;
14910 }
14911 return ;
14912}
Jeff Johnson295189b2012-06-20 16:38:30 -070014913/*
14914 * WDA common routine to create timer used by WDA.
14915 */
14916static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
14917{
Jeff Johnson295189b2012-06-20 16:38:30 -070014918 VOS_STATUS status = VOS_STATUS_SUCCESS ;
14919 tANI_U32 val = 0 ;
14920 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14921
14922 if(NULL == pMac)
14923 {
14924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014925 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014926 VOS_ASSERT(0);
14927 return VOS_STATUS_E_FAILURE;
14928 }
14929 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
14930 != eSIR_SUCCESS)
14931 {
14932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14933 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
14934 return VOS_STATUS_E_FAILURE;
14935 }
14936 val = SYS_MS_TO_TICKS(val) ;
14937
14938 /* BA activity check timer */
14939 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
14940 "BA Activity Check timer", WDA_TimerHandler,
14941 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
14942 if(status != TX_SUCCESS)
14943 {
14944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14945 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014946 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014947 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014948 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014949 /* Tx Complete Timeout timer */
14950 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
14951 "Tx Complete Check timer", WDA_TimerHandler,
14952 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014953 if(status != TX_SUCCESS)
14954 {
14955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14956 "Unable to create Tx Complete Timeout timer");
14957 /* Destroy timer of BA activity check timer */
14958 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
14959 if(status != TX_SUCCESS)
14960 {
14961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14962 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014963 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014964 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014965 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014966 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014967
14968 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
14969
14970 /* Traffic Stats timer */
14971 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
14972 "Traffic Stats timer", WDA_TimerHandler,
14973 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
14974 if(status != TX_SUCCESS)
14975 {
14976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14977 "Unable to create traffic stats timer");
14978 /* Destroy timer of BA activity check timer */
14979 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
14980 if(status != TX_SUCCESS)
14981 {
14982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14983 "Unable to Destroy BA activity timer");
14984 }
14985 /* Destroy timer of tx complete timer */
14986 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
14987 if(status != TX_SUCCESS)
14988 {
14989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14990 "Unable to Tx complete timer");
14991 }
14992 return VOS_STATUS_E_FAILURE ;
14993 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014994 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014995}
Jeff Johnson295189b2012-06-20 16:38:30 -070014996/*
14997 * WDA common routine to destroy timer used by WDA.
14998 */
14999static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
15000{
15001 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015002 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
15003 if(status != TX_SUCCESS)
15004 {
15005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15006 "Unable to Destroy Tx Complete Timeout timer");
15007 return eSIR_FAILURE ;
15008 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015009 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
15010 if(status != TX_SUCCESS)
15011 {
15012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15013 "Unable to Destroy BA activity timer");
15014 return eSIR_FAILURE ;
15015 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015016 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
15017 if(status != TX_SUCCESS)
15018 {
15019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15020 "Unable to Destroy traffic stats timer");
15021 return eSIR_FAILURE ;
15022 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015023 return eSIR_SUCCESS ;
15024}
Jeff Johnson295189b2012-06-20 16:38:30 -070015025/*
15026 * WDA timer handler.
15027 */
15028void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
15029{
15030 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
15031 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015032 /*
15033 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
15034 */
15035 wdaMsg.type = timerInfo ;
15036 wdaMsg.bodyptr = NULL;
15037 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070015038 /* post the message.. */
15039 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
15040 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
15041 {
15042 vosStatus = VOS_STATUS_E_BADMSG;
15043 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015044}
Jeff Johnson295189b2012-06-20 16:38:30 -070015045/*
15046 * WDA Tx Complete timeout Indication.
15047 */
15048void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
15049{
15050 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015051 if( pWDA->pAckTxCbFunc )
15052 {
15053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015054 "TxComplete timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070015055 pWDA->pAckTxCbFunc( pMac, 0);
15056 pWDA->pAckTxCbFunc = NULL;
15057 }
15058 else
15059 {
15060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015061 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070015062 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015063}
Jeff Johnson295189b2012-06-20 16:38:30 -070015064/*
15065 * WDA Set REG Domain to VOS NV
15066 */
Abhishek Singha306a442013-11-07 18:39:01 +053015067eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
15068 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070015069{
Abhishek Singha306a442013-11-07 18:39:01 +053015070 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070015071 {
15072 return eHAL_STATUS_INVALID_PARAMETER;
15073 }
15074 return eHAL_STATUS_SUCCESS;
15075}
Jeff Johnson295189b2012-06-20 16:38:30 -070015076
Jeff Johnson295189b2012-06-20 16:38:30 -070015077#ifdef FEATURE_WLAN_SCAN_PNO
15078/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015079 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015080 *
15081 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015082void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015083{
15084 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015085 tSirPNOScanReq *pPNOScanReqParams;
15086
Jeff Johnson295189b2012-06-20 16:38:30 -070015087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015088 "<------ %s, wdiStatus: %d",__func__, status);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015089 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070015090 {
15091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015092 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015093 VOS_ASSERT(0) ;
15094 return ;
15095 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015096
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015097 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
15098 if(pPNOScanReqParams->statusCallback)
15099 {
15100 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
15101 (status == WDI_STATUS_SUCCESS) ?
15102 VOS_STATUS_SUCCESS : VOS_STATUS_E_FAILURE);
15103 }
15104
Yue Ma7f44bbe2013-04-12 11:47:39 -070015105 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15106 vos_mem_free(pWdaParams->wdaMsgParam);
15107 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015108
15109 return ;
15110}
Jeff Johnson295189b2012-06-20 16:38:30 -070015111/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015112 * FUNCTION: WDA_PNOScanReqCallback
15113 * Free memory.
15114 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
15115 */
15116void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015117{
Yue Ma7f44bbe2013-04-12 11:47:39 -070015118 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015119 tSirPNOScanReq *pPNOScanReqParams;
Yue Ma7f44bbe2013-04-12 11:47:39 -070015120
15121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15122 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15123
15124 if(NULL == pWdaParams)
15125 {
15126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15127 "%s: pWdaParams received NULL", __func__);
15128 VOS_ASSERT(0);
15129 return;
15130 }
15131
15132 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15133 {
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015134 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
15135 if(pPNOScanReqParams->statusCallback)
15136 {
15137 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
15138 VOS_STATUS_E_FAILURE);
15139 }
15140
Yue Ma7f44bbe2013-04-12 11:47:39 -070015141 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15142 vos_mem_free(pWdaParams->wdaMsgParam);
15143 vos_mem_free(pWdaParams);
15144 }
15145
15146 return;
15147}
15148/*
15149 * FUNCTION: WDA_UpdateScanParamsRespCallback
15150 *
15151 */
15152void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
15153{
15154 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070015155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015156 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015157 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070015158 {
15159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015160 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015161 VOS_ASSERT(0) ;
15162 return ;
15163 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015164
15165 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15166 vos_mem_free(pWdaParams->wdaMsgParam);
15167 vos_mem_free(pWdaParams);
15168
Jeff Johnson295189b2012-06-20 16:38:30 -070015169 return ;
15170}
Jeff Johnson295189b2012-06-20 16:38:30 -070015171/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015172 * FUNCTION: WDA_UpdateScanParamsReqCallback
15173 * Free memory.
15174 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
15175 */
15176void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
15177{
15178 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15179
15180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15181 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15182
15183 if(NULL == pWdaParams)
15184 {
15185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15186 "%s: pWdaParams received NULL", __func__);
15187 VOS_ASSERT(0);
15188 return;
15189 }
15190
15191 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15192 {
15193 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15194 vos_mem_free(pWdaParams->wdaMsgParam);
15195 vos_mem_free(pWdaParams);
15196 }
15197
15198 return;
15199}
15200/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015201 * FUNCTION: WDA_ProcessSetPreferredNetworkList
15202 * Request to WDI to set Preferred Network List.Offload
15203 */
15204VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
15205 tSirPNOScanReq *pPNOScanReqParams)
15206{
Jeff Johnson43971f52012-07-17 12:26:56 -070015207 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015208 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
15209 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
15210 tWDA_ReqParams *pWdaParams ;
15211 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070015212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015213 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015214 if(NULL == pwdiPNOScanReqInfo)
15215 {
15216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015217 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015218 VOS_ASSERT(0);
15219 return VOS_STATUS_E_NOMEM;
15220 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015221 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15222 if(NULL == pWdaParams)
15223 {
15224 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015225 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015226 VOS_ASSERT(0);
15227 vos_mem_free(pwdiPNOScanReqInfo);
15228 return VOS_STATUS_E_NOMEM;
15229 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015230 //
15231 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
15232 //
15233 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
15234 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070015235 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
15236 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
15237 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015238 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
15239 {
15240 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
15241 &pPNOScanReqParams->aNetworks[i],
15242 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
15243 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015244 /*Scan timer intervals*/
15245 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
15246 &pPNOScanReqParams->scanTimers,
15247 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070015248 /*Probe template for 2.4GHz band*/
15249 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
15250 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15251 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015252 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
15253 pPNOScanReqParams->p24GProbeTemplate,
15254 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070015255 /*Probe template for 5GHz band*/
15256 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
15257 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15258 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015259 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
15260 pPNOScanReqParams->p5GProbeTemplate,
15261 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015262 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
15263 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015264
Jeff Johnson295189b2012-06-20 16:38:30 -070015265 /* Store Params pass it to WDI */
15266 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
15267 pWdaParams->pWdaContext = pWDA;
15268 /* Store param pointer as passed in by caller */
15269 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015270 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015271 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015272 if(IS_WDI_STATUS_FAILURE(status))
15273 {
15274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15275 "Failure in Set PNO REQ WDI API, free all the memory " );
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015276 if(pPNOScanReqParams->statusCallback)
15277 {
15278 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
15279 VOS_STATUS_E_FAILURE);
15280 }
15281
Jeff Johnson295189b2012-06-20 16:38:30 -070015282 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15283 vos_mem_free(pWdaParams->wdaMsgParam);
15284 pWdaParams->wdaWdiApiMsgParam = NULL;
15285 pWdaParams->wdaMsgParam = NULL;
15286 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015287 return CONVERT_WDI2VOS_STATUS(status) ;
15288}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015289
15290#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
15291
15292void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
15293{
15294 /*Convert the CSR Auth types to WDI Auth types */
15295 switch (csrAuthType)
15296 {
15297 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
15298 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
15299 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015300#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015301 case eCSR_AUTH_TYPE_CCKM_WPA:
15302 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
15303 break;
15304#endif
15305 case eCSR_AUTH_TYPE_WPA:
15306 *AuthType = eWDA_AUTH_TYPE_WPA;
15307 break;
15308 case eCSR_AUTH_TYPE_WPA_PSK:
15309 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
15310 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015311#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015312 case eCSR_AUTH_TYPE_CCKM_RSN:
15313 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
15314 break;
15315#endif
15316 case eCSR_AUTH_TYPE_RSN:
15317 *AuthType = eWDA_AUTH_TYPE_RSN;
15318 break;
15319 case eCSR_AUTH_TYPE_RSN_PSK:
15320 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
15321 break;
15322#if defined WLAN_FEATURE_VOWIFI_11R
15323 case eCSR_AUTH_TYPE_FT_RSN:
15324 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
15325 break;
15326 case eCSR_AUTH_TYPE_FT_RSN_PSK:
15327 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
15328 break;
15329#endif
15330#ifdef FEATURE_WLAN_WAPI
15331 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
15332 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
15333 break;
15334 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
15335 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
15336 break;
15337#endif /* FEATURE_WLAN_WAPI */
15338 case eCSR_AUTH_TYPE_SHARED_KEY:
15339 case eCSR_AUTH_TYPE_AUTOSWITCH:
15340 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
15341 break;
15342#if 0
15343 case eCSR_AUTH_TYPE_SHARED_KEY:
15344 *AuthType = eWDA_AUTH_TYPE_SHARED_KEY;
15345 break;
15346 case eCSR_AUTH_TYPE_AUTOSWITCH:
15347 *AuthType = eWDA_AUTH_TYPE_AUTOSWITCH;
15348#endif
15349 default:
Deepthi Gowribfd17132014-11-14 17:59:04 +053015350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015351 "%s: Unknown Auth Type", __func__);
15352 break;
15353 }
15354}
15355void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
15356{
15357 switch (csrEncrType)
15358 {
15359 case eCSR_ENCRYPT_TYPE_NONE:
15360 *EncrType = WDI_ED_NONE;
15361 break;
15362 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
15363 case eCSR_ENCRYPT_TYPE_WEP40:
15364 *EncrType = WDI_ED_WEP40;
15365 break;
15366 case eCSR_ENCRYPT_TYPE_WEP104:
15367 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
15368 *EncrType = WDI_ED_WEP104;
15369 break;
15370 case eCSR_ENCRYPT_TYPE_TKIP:
15371 *EncrType = WDI_ED_TKIP;
15372 break;
15373 case eCSR_ENCRYPT_TYPE_AES:
15374 *EncrType = WDI_ED_CCMP;
15375 break;
15376#ifdef WLAN_FEATURE_11W
15377 case eCSR_ENCRYPT_TYPE_AES_CMAC:
15378 *EncrType = WDI_ED_AES_128_CMAC;
15379 break;
15380#endif
15381#ifdef FEATURE_WLAN_WAPI
15382 case eCSR_ENCRYPT_TYPE_WPI:
15383 *EncrType = WDI_ED_WPI;
15384 break;
15385#endif
15386 case eCSR_ENCRYPT_TYPE_ANY:
15387 *EncrType = WDI_ED_ANY;
15388 break;
15389
15390 default:
15391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15392 "%s: Unknown Encryption Type", __func__);
15393 break;
15394 }
15395}
15396
15397/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015398 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015399 * Request to WDI to set Roam Offload Scan
15400 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015401VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015402 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
15403{
15404 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015405 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
15406 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015407 tWDA_ReqParams *pWdaParams ;
15408 v_U8_t csrAuthType;
15409 WDI_RoamNetworkType *pwdiRoamNetworkType;
15410 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
15411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15412 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015413 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015414 {
15415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15416 "%s: VOS MEM Alloc Failure", __func__);
15417 VOS_ASSERT(0);
15418 return VOS_STATUS_E_NOMEM;
15419 }
15420 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15421 if (NULL == pWdaParams)
15422 {
15423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15424 "%s: VOS MEM Alloc Failure", __func__);
15425 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015426 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015427 return VOS_STATUS_E_NOMEM;
15428 }
15429
15430 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015431 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015432 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015433 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
15434 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015435 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
15436 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
15437 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
15438 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
15439 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
15440 sizeof(pwdiRoamNetworkType->currAPbssid));
15441 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
15442 csrAuthType);
15443 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
15444 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
15445 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
15446 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
15447 pwdiRoamOffloadScanInfo->LookupThreshold =
15448 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080015449 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
15450 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015451 pwdiRoamOffloadScanInfo->RoamRssiDiff =
15452 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080015453 pwdiRoamOffloadScanInfo->MAWCEnabled =
15454 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015455 pwdiRoamOffloadScanInfo->Command =
15456 pRoamOffloadScanReqParams->Command ;
15457 pwdiRoamOffloadScanInfo->StartScanReason =
15458 pRoamOffloadScanReqParams->StartScanReason ;
15459 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
15460 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
15461 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
15462 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
15463 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
15464 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
15465 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
15466 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
15467 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
15468 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015469 pwdiRoamOffloadScanInfo->IsESEEnabled =
15470 pRoamOffloadScanReqParams->IsESEEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015471 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
15472 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
15473 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
15474 pwdiRoamNetworkType->ssId.ucLength =
15475 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
15476 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
15477 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
15478 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
15479 pwdiRoamNetworkType->ChannelCount =
15480 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
15481 pwdiRoamOffloadScanInfo->ChannelCacheType =
15482 pRoamOffloadScanReqParams->ChannelCacheType;
15483 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
15484 pRoamOffloadScanReqParams->ValidChannelList,
15485 pRoamOffloadScanReqParams->ValidChannelCount);
15486 pwdiRoamOffloadScanInfo->ValidChannelCount =
15487 pRoamOffloadScanReqParams->ValidChannelCount;
15488 pwdiRoamOffloadScanInfo->us24GProbeSize =
15489 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15490 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
15491 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
15492 pRoamOffloadScanReqParams->p24GProbeTemplate,
15493 pwdiRoamOffloadScanInfo->us24GProbeSize);
15494 pwdiRoamOffloadScanInfo->us5GProbeSize =
15495 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15496 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
15497 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
15498 pRoamOffloadScanReqParams->p5GProbeTemplate,
15499 pwdiRoamOffloadScanInfo->us5GProbeSize);
15500 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
15501 pRoamOffloadScanReqParams->MDID.mdiePresent;
15502 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
15503 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015504 pwdiRoamOffloadScanInfo->nProbes =
15505 pRoamOffloadScanReqParams->nProbes;
15506 pwdiRoamOffloadScanInfo->HomeAwayTime =
15507 pRoamOffloadScanReqParams->HomeAwayTime;
15508 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015509 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015510 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015511 pWdaParams->pWdaContext = pWDA;
15512 /* Store param pointer as passed in by caller */
15513 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015514 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015515 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
15516 if(IS_WDI_STATUS_FAILURE(status))
15517 {
15518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15519 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
15520 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15521 vos_mem_free(pWdaParams->wdaMsgParam);
15522 pWdaParams->wdaWdiApiMsgParam = NULL;
15523 pWdaParams->wdaMsgParam = NULL;
15524 }
15525 return CONVERT_WDI2VOS_STATUS(status) ;
15526}
15527#endif
15528
Jeff Johnson295189b2012-06-20 16:38:30 -070015529/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015530 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015531 *
15532 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015533void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015534{
15535 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15536
15537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015538 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015539
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015540 if(NULL == pWdaParams)
15541 {
15542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015543 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015544 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015545 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015546 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015547
Jeff Johnson295189b2012-06-20 16:38:30 -070015548 vos_mem_free(pWdaParams->wdaMsgParam) ;
15549 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15550 vos_mem_free(pWdaParams) ;
15551
15552 return ;
15553}
15554/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015555 * FUNCTION: WDA_RssiFilterReqCallback
15556 * Free memory.
15557 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
15558 */
15559void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
15560{
15561 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15562
15563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15564 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15565
15566 if(NULL == pWdaParams)
15567 {
15568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15569 "%s: pWdaParams received NULL", __func__);
15570 VOS_ASSERT(0);
15571 return;
15572 }
15573
15574 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15575 {
15576 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15577 vos_mem_free(pWdaParams->wdaMsgParam);
15578 vos_mem_free(pWdaParams);
15579 }
15580
15581 return;
15582}
15583/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015584 * FUNCTION: WDA_ProcessSetPreferredNetworkList
15585 * Request to WDI to set Preferred Network List.Offload
15586 */
15587VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
15588 tSirSetRSSIFilterReq* pRssiFilterParams)
15589{
Jeff Johnson43971f52012-07-17 12:26:56 -070015590 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015591 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
15592 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
15593 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015595 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015596 if(NULL == pwdiSetRssiFilterReqInfo)
15597 {
15598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015599 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015600 VOS_ASSERT(0);
15601 return VOS_STATUS_E_NOMEM;
15602 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015603 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15604 if(NULL == pWdaParams)
15605 {
15606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015607 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015608 VOS_ASSERT(0);
15609 vos_mem_free(pwdiSetRssiFilterReqInfo);
15610 return VOS_STATUS_E_NOMEM;
15611 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015612 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070015613 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
15614 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015615
Jeff Johnson295189b2012-06-20 16:38:30 -070015616 /* Store Params pass it to WDI */
15617 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
15618 pWdaParams->pWdaContext = pWDA;
15619 /* Store param pointer as passed in by caller */
15620 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015621 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015622 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015623 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015624 if(IS_WDI_STATUS_FAILURE(status))
15625 {
15626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15627 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
15628 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15629 vos_mem_free(pWdaParams->wdaMsgParam);
15630 pWdaParams->wdaWdiApiMsgParam = NULL;
15631 pWdaParams->wdaMsgParam = NULL;
15632 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015633 return CONVERT_WDI2VOS_STATUS(status) ;
15634}
15635
Jeff Johnson295189b2012-06-20 16:38:30 -070015636/*
15637 * FUNCTION: WDA_ProcessUpdateScanParams
15638 * Request to WDI to update Scan Parameters
15639 */
15640VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
15641 tSirUpdateScanParams *pUpdateScanParams)
15642{
Jeff Johnson43971f52012-07-17 12:26:56 -070015643 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015644 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
15645 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
15646 sizeof(WDI_UpdateScanParamsInfoType)) ;
15647 tWDA_ReqParams *pWdaParams ;
15648 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070015649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015650 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015651 if(NULL == wdiUpdateScanParamsInfoType)
15652 {
15653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015654 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015655 VOS_ASSERT(0);
15656 return VOS_STATUS_E_NOMEM;
15657 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015658 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15659 if ( NULL == pWdaParams )
15660 {
15661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015662 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015663 VOS_ASSERT(0);
15664 vos_mem_free(wdiUpdateScanParamsInfoType);
15665 return VOS_STATUS_E_NOMEM;
15666 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015667 //
15668 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
15669 //
Jeff Johnson295189b2012-06-20 16:38:30 -070015670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15671 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
15672 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
15673 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080015674 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070015675 pUpdateScanParams->b11dEnabled,
15676 pUpdateScanParams->b11dResolved,
15677 pUpdateScanParams->ucChannelCount,
15678 pUpdateScanParams->usPassiveMinChTime,
15679 pUpdateScanParams->usPassiveMaxChTime,
15680 pUpdateScanParams->usActiveMinChTime,
15681 pUpdateScanParams->usActiveMaxChTime,
15682 sizeof(tSirUpdateScanParams),
15683 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
15684
Jeff Johnson295189b2012-06-20 16:38:30 -070015685 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
15686 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070015687 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
15688 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070015689 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
15690 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070015691 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
15692 pUpdateScanParams->usActiveMaxChTime;
15693 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
15694 pUpdateScanParams->usActiveMinChTime;
15695 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
15696 pUpdateScanParams->usPassiveMaxChTime;
15697 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
15698 pUpdateScanParams->usPassiveMinChTime;
15699
Jeff Johnson295189b2012-06-20 16:38:30 -070015700 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053015701 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
15702 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070015703
Jeff Johnson295189b2012-06-20 16:38:30 -070015704 for ( i = 0; i <
15705 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
15706 i++)
15707 {
15708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15709 "Update Scan Parameters channel: %d",
15710 pUpdateScanParams->aChannels[i]);
15711
15712 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
15713 pUpdateScanParams->aChannels[i];
15714 }
15715
Yue Ma7f44bbe2013-04-12 11:47:39 -070015716 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
15717 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015718
Jeff Johnson295189b2012-06-20 16:38:30 -070015719 /* Store Params pass it to WDI */
15720 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
15721 pWdaParams->pWdaContext = pWDA;
15722 /* Store param pointer as passed in by caller */
15723 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070015724
Jeff Johnson295189b2012-06-20 16:38:30 -070015725
15726
15727 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015728 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015729 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015730 if(IS_WDI_STATUS_FAILURE(status))
15731 {
15732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15733 "Failure in Update Scan Params EQ WDI API, free all the memory " );
15734 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15735 vos_mem_free(pWdaParams->wdaMsgParam);
15736 vos_mem_free(pWdaParams);
15737 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015738 return CONVERT_WDI2VOS_STATUS(status) ;
15739}
15740#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015741
15742#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
15743/*
15744 * FUNCTION: WDA_RoamOffloadScanReqCallback
15745 *
15746 */
15747void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
15748{
15749 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070015750 vos_msg_t vosMsg;
15751 wpt_uint8 reason = 0;
15752
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070015753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015754 "<------ %s " ,__func__);
15755 if (NULL == pWdaParams)
15756 {
15757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15758 "%s: pWdaParams received NULL", __func__);
15759 VOS_ASSERT(0) ;
15760 return ;
15761 }
15762 if ( pWdaParams != NULL )
15763 {
15764 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
15765 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070015766 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015767 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15768 }
15769 if ( pWdaParams->wdaMsgParam != NULL)
15770 {
15771 vos_mem_free(pWdaParams->wdaMsgParam);
15772 }
15773
15774 vos_mem_free(pWdaParams) ;
15775 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070015776 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
15777 vosMsg.bodyptr = NULL;
15778 if (WDI_STATUS_SUCCESS != status)
15779 {
15780 reason = 0;
15781 }
15782 vosMsg.bodyval = reason;
15783 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15784 {
15785 /* free the mem and return */
15786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070015787 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070015788 }
15789
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015790 return ;
15791}
15792#endif
15793
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015794/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015795 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015796 *
15797 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015798void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015799{
15800 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15801
15802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15803 "<------ %s " ,__func__);
15804
15805 if(NULL == pWdaParams)
15806 {
15807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15808 "%s: pWdaParams received NULL", __func__);
15809 VOS_ASSERT(0);
15810 return;
15811 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015812
15813 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15814 vos_mem_free(pWdaParams->wdaMsgParam);
15815 vos_mem_free(pWdaParams);
15816
15817 return;
15818}
15819/*
15820 * FUNCTION: WDA_SetPowerParamsReqCallback
15821 * Free memory.
15822 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
15823 */
15824void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
15825{
15826 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15827
15828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15829 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15830
15831 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015832 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070015833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15834 "%s: pWdaParams received NULL", __func__);
15835 VOS_ASSERT(0);
15836 return;
15837 }
15838
15839 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15840 {
15841 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15842 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015843 vos_mem_free(pWdaParams);
15844 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015845
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015846 return;
15847}
15848
Jeff Johnson295189b2012-06-20 16:38:30 -070015849#ifdef WLAN_FEATURE_PACKET_FILTERING
15850/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015851 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015852 *
15853 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015854void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015855 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
15856 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015857{
15858 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070015859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015860 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015861 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: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015865 VOS_ASSERT(0) ;
15866 return ;
15867 }
15868
15869 vos_mem_free(pWdaParams->wdaMsgParam) ;
15870 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15871 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015872 //print a msg, nothing else to do
15873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015874 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070015875 return ;
15876}
Jeff Johnson295189b2012-06-20 16:38:30 -070015877/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015878 * FUNCTION: WDA_8023MulticastListReqCallback
15879 * Free memory.
15880 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
15881 */
15882void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
15883{
15884 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15885
15886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15887 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15888
15889 if(NULL == pWdaParams)
15890 {
15891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15892 "%s: pWdaParams received NULL", __func__);
15893 VOS_ASSERT(0);
15894 return;
15895 }
15896
15897 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15898 {
15899 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15900 vos_mem_free(pWdaParams->wdaMsgParam);
15901 vos_mem_free(pWdaParams);
15902 }
15903
15904 return;
15905}
15906/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015907 * FUNCTION: WDA_Process8023MulticastListReq
15908 * Request to WDI to add 8023 Multicast List
15909 */
15910VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
15911 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
15912{
Jeff Johnson43971f52012-07-17 12:26:56 -070015913 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015914 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
15915 tWDA_ReqParams *pWdaParams ;
15916 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070015917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015918 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015919 pwdiFltPktSetMcListReqParamsType =
15920 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
15921 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
15922 ) ;
15923 if(NULL == pwdiFltPktSetMcListReqParamsType)
15924 {
15925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015926 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015927 return VOS_STATUS_E_NOMEM;
15928 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015929 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15930 if(NULL == pWdaParams)
15931 {
15932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015933 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015934 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
15935 return VOS_STATUS_E_NOMEM;
15936 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015937
Jeff Johnson295189b2012-06-20 16:38:30 -070015938 //
15939 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
15940 //
15941 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070015942 pRcvFltMcAddrList->ulMulticastAddrCnt;
15943
15944 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
15945 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
15946 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
15947 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
15948
Jeff Johnson295189b2012-06-20 16:38:30 -070015949 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
15950 {
15951 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
15952 &(pRcvFltMcAddrList->multicastAddr[i]),
15953 sizeof(tSirMacAddr));
15954 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015955 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
15956 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015957
Jeff Johnson295189b2012-06-20 16:38:30 -070015958 /* Store Params pass it to WDI */
15959 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
15960 pWdaParams->pWdaContext = pWDA;
15961 /* Store param pointer as passed in by caller */
15962 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070015963 status = WDI_8023MulticastListReq(
15964 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015965 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015966 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015967 if(IS_WDI_STATUS_FAILURE(status))
15968 {
15969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15970 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
15971 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15972 vos_mem_free(pWdaParams->wdaMsgParam);
15973 vos_mem_free(pWdaParams);
15974 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015975 return CONVERT_WDI2VOS_STATUS(status) ;
15976}
Jeff Johnson295189b2012-06-20 16:38:30 -070015977/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015978 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015979 *
15980 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015981void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015982 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
15983 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015984{
15985 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070015986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015987 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015988 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070015989 if(NULL == pWdaParams)
15990 {
15991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015992 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015993 VOS_ASSERT(0) ;
15994 return ;
15995 }
15996
15997 vos_mem_free(pWdaParams->wdaMsgParam) ;
15998 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15999 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016000 //print a msg, nothing else to do
16001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016002 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070016003 return ;
16004}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016005
16006/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016007 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
16008 * Free memory.
16009 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016010 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016011void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016012 void* pUserData)
16013{
16014 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16015
16016 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16017 "<------ %s, wdiStatus: %d",
16018 __func__, wdiStatus);
16019
16020 if (NULL == pWdaParams)
16021 {
16022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16023 "%s: Invalid pWdaParams pointer", __func__);
16024 VOS_ASSERT(0);
16025 return;
16026 }
16027
16028 if (IS_WDI_STATUS_FAILURE(wdiStatus))
16029 {
16030 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16031 vos_mem_free(pWdaParams->wdaMsgParam);
16032 vos_mem_free(pWdaParams);
16033 }
16034
16035 return;
16036}
16037
Jeff Johnson295189b2012-06-20 16:38:30 -070016038/*
16039 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
16040 * Request to WDI to set Receive Filters
16041 */
16042VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
16043 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
16044{
Jeff Johnson43971f52012-07-17 12:26:56 -070016045 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016046 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
16047 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
16048 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
16049 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
16050 tWDA_ReqParams *pWdaParams ;
16051 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070016052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016053 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016054 if(NULL == pwdiSetRcvPktFilterReqParamsType)
16055 {
16056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016057 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016058 VOS_ASSERT(0);
16059 return VOS_STATUS_E_NOMEM;
16060 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016061 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16062 if(NULL == pWdaParams)
16063 {
16064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016065 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016066 VOS_ASSERT(0);
16067 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
16068 return VOS_STATUS_E_NOMEM;
16069 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016070 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
16071 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
16072 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
16073 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070016074 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
16075 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
16076
16077 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
16078 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016079
16080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16081 "FID %d FT %d NParams %d CT %d",
16082 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
16083 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
16084 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
16085 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070016086 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
16087 {
16088 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
16089 &pRcvPktFilterCfg->paramsData[i],
16090 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070016091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016092 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070016093 pwdiSetRcvPktFilterReqParamsType->
16094 wdiPktFilterCfg.paramsData[i].protocolLayer,
16095 pwdiSetRcvPktFilterReqParamsType->
16096 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070016097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016098 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070016099 pwdiSetRcvPktFilterReqParamsType->
16100 wdiPktFilterCfg.paramsData[i].dataOffset,
16101 pwdiSetRcvPktFilterReqParamsType->
16102 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070016103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016104 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070016105 pwdiSetRcvPktFilterReqParamsType->
16106 wdiPktFilterCfg.paramsData[i].compareData[0],
16107 pwdiSetRcvPktFilterReqParamsType->
16108 wdiPktFilterCfg.paramsData[i].compareData[1],
16109 pwdiSetRcvPktFilterReqParamsType->
16110 wdiPktFilterCfg.paramsData[i].compareData[2],
16111 pwdiSetRcvPktFilterReqParamsType->
16112 wdiPktFilterCfg.paramsData[i].compareData[3],
16113 pwdiSetRcvPktFilterReqParamsType->
16114 wdiPktFilterCfg.paramsData[i].compareData[4],
16115 pwdiSetRcvPktFilterReqParamsType->
16116 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070016117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016118 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070016119 pwdiSetRcvPktFilterReqParamsType->
16120 wdiPktFilterCfg.paramsData[i].dataMask[0],
16121 pwdiSetRcvPktFilterReqParamsType->
16122 wdiPktFilterCfg.paramsData[i].dataMask[1],
16123 pwdiSetRcvPktFilterReqParamsType->
16124 wdiPktFilterCfg.paramsData[i].dataMask[2],
16125 pwdiSetRcvPktFilterReqParamsType->
16126 wdiPktFilterCfg.paramsData[i].dataMask[3],
16127 pwdiSetRcvPktFilterReqParamsType->
16128 wdiPktFilterCfg.paramsData[i].dataMask[4],
16129 pwdiSetRcvPktFilterReqParamsType->
16130 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070016131 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016132 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016133 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016134 /* Store Params pass it to WDI */
16135 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
16136 pWdaParams->pWdaContext = pWDA;
16137 /* Store param pointer as passed in by caller */
16138 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070016139 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016140 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016141 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016142 if(IS_WDI_STATUS_FAILURE(status))
16143 {
16144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16145 "Failure in SetFilter(),free all the memory,status %d ",status);
16146 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16147 vos_mem_free(pWdaParams->wdaMsgParam);
16148 vos_mem_free(pWdaParams);
16149 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016150 return CONVERT_WDI2VOS_STATUS(status) ;
16151}
Jeff Johnson295189b2012-06-20 16:38:30 -070016152/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016153 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016154 *
16155 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016156void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016157 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
16158 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016159{
16160 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16161 tWDA_CbContext *pWDA;
16162 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
16163 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
16164 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
16165 tANI_U8 i;
16166 vos_msg_t vosMsg;
16167
16168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016169 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016170 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
16171
Jeff Johnsone7245742012-09-05 17:12:55 -070016172 if(NULL == pRcvFltPktMatchCntRsp)
16173 {
16174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016175 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070016176 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016177 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070016178 return ;
16179 }
16180
Jeff Johnson295189b2012-06-20 16:38:30 -070016181 if(NULL == pWdaParams)
16182 {
16183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016184 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016185 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016186 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070016187 return ;
16188 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016189 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
16190 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070016191 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
16192 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
16193
16194 /* Message Header */
16195 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
16196 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
16197
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016198 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070016199
16200 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
16201 {
16202 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
16203 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
16204 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016205 /* VOS message wrapper */
16206 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
16207 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
16208 vosMsg.bodyval = 0;
16209 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16210 {
16211 /* free the mem and return */
16212 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
16213 }
16214
16215 vos_mem_free(pWdaParams->wdaMsgParam) ;
16216 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16217 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070016218
16219 return;
16220}
16221/*
16222 * FUNCTION: WDA_FilterMatchCountReqCallback
16223 * Free memory and send RSP back to SME.
16224 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
16225 */
16226void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
16227{
16228 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16229 vos_msg_t vosMsg;
16230
16231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16232 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16233
16234 if(NULL == pWdaParams)
16235 {
16236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16237 "%s: pWdaParams received NULL", __func__);
16238 VOS_ASSERT(0);
16239 return;
16240 }
16241
16242 /* VOS message wrapper */
16243 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
16244 vosMsg.bodyptr = NULL;
16245 vosMsg.bodyval = 0;
16246
16247 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16248 {
16249 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16250 vos_mem_free(pWdaParams->wdaMsgParam);
16251 vos_mem_free(pWdaParams);
16252 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
16253 }
16254
16255 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070016256}
Jeff Johnson295189b2012-06-20 16:38:30 -070016257/*
16258 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
16259 * Request to WDI to get PC Filter Match Count
16260 */
16261VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
16262{
Jeff Johnson43971f52012-07-17 12:26:56 -070016263 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016264 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
16265 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
16266 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016268 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016269 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
16270 {
16271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016272 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016273 VOS_ASSERT(0);
16274 return VOS_STATUS_E_NOMEM;
16275 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016276 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16277 if(NULL == pWdaParams)
16278 {
16279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016280 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016281 VOS_ASSERT(0);
16282 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
16283 return VOS_STATUS_E_NOMEM;
16284 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016285
Yue Ma7f44bbe2013-04-12 11:47:39 -070016286 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
16287 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016288
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016289 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
16290 pRcvFltPktMatchRsp->bssId,
16291 sizeof(wpt_macAddr));
16292
Jeff Johnson295189b2012-06-20 16:38:30 -070016293 /* Store Params pass it to WDI */
16294 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
16295 pWdaParams->pWdaContext = pWDA;
16296 /* Store param pointer as passed in by caller */
16297 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070016298 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016299 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016300 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016301 if(IS_WDI_STATUS_FAILURE(status))
16302 {
16303 /* failure returned by WDI API */
16304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16305 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
16306 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16307 vos_mem_free(pWdaParams) ;
16308 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
16309 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
16310 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016311 return CONVERT_WDI2VOS_STATUS(status) ;
16312}
Jeff Johnson295189b2012-06-20 16:38:30 -070016313/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016314 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016315 *
16316 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016317void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016318 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
16319 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016320{
16321 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070016322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016323 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016324/* WDA_VOS_ASSERT(NULL != pWdaParams); */
16325 if(NULL == pWdaParams)
16326 {
16327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016328 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016329 VOS_ASSERT(0) ;
16330 return ;
16331 }
16332
16333 vos_mem_free(pWdaParams->wdaMsgParam) ;
16334 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16335 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016336 //print a msg, nothing else to do
16337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016338 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070016339 return ;
16340}
Jeff Johnson295189b2012-06-20 16:38:30 -070016341/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016342 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
16343 * Free memory.
16344 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
16345 */
16346void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
16347{
16348 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16349
16350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16351 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16352
16353 if(NULL == pWdaParams)
16354 {
16355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16356 "%s: Invalid pWdaParams pointer", __func__);
16357 VOS_ASSERT(0);
16358 return;
16359 }
16360
16361 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16362 {
16363 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16364 vos_mem_free(pWdaParams->wdaMsgParam);
16365 vos_mem_free(pWdaParams);
16366 }
16367
16368 return;
16369}
16370/*
Jeff Johnson295189b2012-06-20 16:38:30 -070016371 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
16372 * Request to WDI to clear Receive Filters
16373 */
16374VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
16375 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
16376{
Jeff Johnson43971f52012-07-17 12:26:56 -070016377 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016378 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
16379 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
16380 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016382 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016383 if(NULL == pwdiRcvFltPktClearReqParamsType)
16384 {
16385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016386 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016387 VOS_ASSERT(0);
16388 return VOS_STATUS_E_NOMEM;
16389 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016390 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16391 if(NULL == pWdaParams)
16392 {
16393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016394 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016395 VOS_ASSERT(0);
16396 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
16397 return VOS_STATUS_E_NOMEM;
16398 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016399 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
16400 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070016401 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
16402 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
16403 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
16404 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016405
Yue Ma7f44bbe2013-04-12 11:47:39 -070016406 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016407 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016408 /* Store Params pass it to WDI */
16409 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
16410 pWdaParams->pWdaContext = pWDA;
16411 /* Store param pointer as passed in by caller */
16412 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070016413 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016414 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016415 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016416 if(IS_WDI_STATUS_FAILURE(status))
16417 {
16418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16419 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
16420 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080016421 vos_mem_free(pWdaParams->wdaMsgParam);
16422 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016423 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016424 return CONVERT_WDI2VOS_STATUS(status) ;
16425}
16426#endif // WLAN_FEATURE_PACKET_FILTERING
16427
Jeff Johnson295189b2012-06-20 16:38:30 -070016428/*
16429 * FUNCTION: WDA_ProcessSetPowerParamsReq
16430 * Request to WDI to set power params
16431 */
16432VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
16433 tSirSetPowerParamsReq *pPowerParams)
16434{
Jeff Johnson43971f52012-07-17 12:26:56 -070016435 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016436 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
16437 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016438 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016440 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016441 if(NULL == pwdiSetPowerParamsReqInfo)
16442 {
16443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016444 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016445 VOS_ASSERT(0);
16446 return VOS_STATUS_E_NOMEM;
16447 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016448 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16449 if(NULL == pWdaParams)
16450 {
16451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016452 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016453 VOS_ASSERT(0);
16454 vos_mem_free(pwdiSetPowerParamsReqInfo);
16455 return VOS_STATUS_E_NOMEM;
16456 }
Jeff Johnsone7245742012-09-05 17:12:55 -070016457
Jeff Johnson295189b2012-06-20 16:38:30 -070016458
16459 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
16460 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070016461 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
16462 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070016463 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
16464 pPowerParams->uListenInterval;
16465 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
16466 pPowerParams->uBcastMcastFilter;
16467 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
16468 pPowerParams->uEnableBET;
16469 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
16470 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070016471 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
16472 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070016473 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
16474 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016475
Jeff Johnson295189b2012-06-20 16:38:30 -070016476 /* Store Params pass it to WDI */
16477 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
16478 pWdaParams->pWdaContext = pWDA;
16479 /* Store param pointer as passed in by caller */
16480 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016481 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016482 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016483 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016484 if(IS_WDI_STATUS_FAILURE(status))
16485 {
16486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16487 "Failure in Set power params REQ WDI API, free all the memory " );
16488 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16489 vos_mem_free(pWdaParams->wdaMsgParam);
16490 pWdaParams->wdaWdiApiMsgParam = NULL;
16491 pWdaParams->wdaMsgParam = NULL;
16492 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016493 return CONVERT_WDI2VOS_STATUS(status) ;
16494}
16495
16496/*
16497 * FUNCTION: WDA_SetTmLevelRspCallback
16498 * Set TM Level response
16499 */
16500void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
16501{
16502 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16503
16504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016505 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016506
16507 if(NULL == pWdaParams)
16508 {
16509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016510 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016511 VOS_ASSERT(0) ;
16512 return ;
16513 }
16514
16515 /* Dose not need to send notification to upper layer
16516 * Just free allocated resources */
16517 if( pWdaParams != NULL )
16518 {
16519 if( pWdaParams->wdaWdiApiMsgParam != NULL )
16520 {
16521 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16522 }
16523 vos_mem_free(pWdaParams->wdaMsgParam) ;
16524 vos_mem_free(pWdaParams) ;
16525 }
16526}
16527
16528/*
16529 * FUNCTION: WDA_ProcessSetTmLevelReq
16530 * Set TM Level request
16531 */
16532VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
16533 tAniSetTmLevelReq *setTmLevelReq)
16534{
16535 WDI_Status status = WDI_STATUS_SUCCESS ;
16536 tWDA_ReqParams *pWdaParams ;
16537 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
16538 (WDI_SetTmLevelReqType *)vos_mem_malloc(
16539 sizeof(WDI_SetTmLevelReqType)) ;
16540 if(NULL == wdiSetTmLevelReq)
16541 {
16542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016543 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016544 VOS_ASSERT(0);
16545 return VOS_STATUS_E_NOMEM;
16546 }
16547
16548 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16549 if(NULL == pWdaParams)
16550 {
16551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016552 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016553 VOS_ASSERT(0);
16554 vos_mem_free(wdiSetTmLevelReq);
16555 return VOS_STATUS_E_NOMEM;
16556 }
16557
16558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016559 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016560
16561 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
16562 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
16563
16564 pWdaParams->pWdaContext = pWDA;
16565 pWdaParams->wdaMsgParam = setTmLevelReq;
16566 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
16567
16568 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
16569 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
16570
16571 if(IS_WDI_STATUS_FAILURE(status))
16572 {
16573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080016574 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070016575 vos_mem_free(pWdaParams->wdaMsgParam) ;
16576 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16577 vos_mem_free(pWdaParams) ;
16578 }
16579
16580 return CONVERT_WDI2VOS_STATUS(status) ;
16581}
16582
16583VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
16584 tpTxControlParams pTxCtrlParam)
16585{
16586 VOS_STATUS wdaStatus;
16587
16588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016589 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016590 if( pTxCtrlParam == NULL )
16591 {
16592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016593 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016594 return VOS_STATUS_E_FAILURE;
16595 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016596 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
16597 {
16598 wdaStatus = WDA_SuspendDataTx(pWDA);
16599 }
16600 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
16601 {
16602 wdaStatus = WDA_ResumeDataTx(pWDA);
16603 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016604 return wdaStatus;
16605}
16606
16607 /* FUNCTION WDA_featureCapsExchange
16608 * WDA API to invoke capability exchange between host and FW.
16609 */
16610void WDA_featureCapsExchange(v_PVOID_t pVosContext)
16611{
16612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016613 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070016614 WDI_featureCapsExchangeReq( NULL, pVosContext);
16615}
16616
Yathish9f22e662012-12-10 14:21:35 -080016617/* FUNCTION WDA_disableCapablityFeature
16618 * WDA API to diable Active mode offload in host.
16619 */
16620void WDA_disableCapablityFeature(tANI_U8 feature_index)
16621{
16622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16623 "%s:enter", __func__ );
16624 WDI_disableCapablityFeature(feature_index);
16625}
16626
Jeff Johnson295189b2012-06-20 16:38:30 -070016627 /* FUNCTION WDA_getHostWlanFeatCaps
16628 * Wrapper for WDI API, that will return if the feature (enum value).passed
16629 * to this API is supported or not in Host
16630 * return value
16631 * 0 - implies feature is NOT Supported
16632 * any non zero value - implies feature is SUPPORTED
16633 */
16634tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
16635{
16636 return WDI_getHostWlanFeatCaps(featEnumValue);
16637}
16638
16639 /* FUNCTION WDA_getFwWlanFeatCaps
16640 * Wrapper for WDI API, that will return if the feature (enum value).passed
16641 * to this API is supported or not in FW
16642 * return value
16643 * 0 - implies feature is NOT Supported
16644 * any non zero value - implies feature is SUPPORTED
16645 */
16646tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
16647{
16648 return WDI_getFwWlanFeatCaps(featEnumValue);
16649}
16650
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053016651
Jeff Johnson295189b2012-06-20 16:38:30 -070016652/*
16653 * FUNCTION: WDA_shutdown
16654 * Shutdown WDA/WDI without handshaking with Riva.
16655 * Synchronous function.
16656 */
16657VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
16658{
16659 WDI_Status wdiStatus;
16660 //tANI_U8 eventIdx = 0;
16661 VOS_STATUS status = VOS_STATUS_SUCCESS;
16662 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070016663 if (NULL == pWDA)
16664 {
16665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016666 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070016667 VOS_ASSERT(0);
16668 return VOS_STATUS_E_FAILURE;
16669 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016670 /* FTM mode stay START_STATE */
16671 if( (WDA_READY_STATE != pWDA->wdaState) &&
16672 (WDA_INIT_STATE != pWDA->wdaState) &&
16673 (WDA_START_STATE != pWDA->wdaState) )
16674 {
16675 VOS_ASSERT(0);
16676 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016677
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080016678 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
16679 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070016680 {
16681 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080016682 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070016683 }
Leo Chang9d76f622013-08-23 16:34:52 -070016684 else
16685 {
16686 vos_event_destroy(&pWDA->ftmStopDoneEvent);
16687 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016688
Jeff Johnson295189b2012-06-20 16:38:30 -070016689 /* call WDI shutdown */
16690 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070016691 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
16692 {
16693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16694 "error in WDA Stop" );
16695 status = VOS_STATUS_E_FAILURE;
16696 }
16697 /* WDI stop is synchrnous, shutdown is complete when it returns */
16698 pWDA->wdaState = WDA_STOP_STATE;
16699
Jeff Johnson295189b2012-06-20 16:38:30 -070016700 /* shutdown should perform the stop & close actions. */
16701 /* Destroy the event */
16702 status = vos_event_destroy(&pWDA->txFrameEvent);
16703 if(!VOS_IS_STATUS_SUCCESS(status))
16704 {
16705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016706 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070016707 status = VOS_STATUS_E_FAILURE;
16708 }
16709 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
16710 if(!VOS_IS_STATUS_SUCCESS(status))
16711 {
16712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016713 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070016714 status = VOS_STATUS_E_FAILURE;
16715 }
16716 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
16717 if(!VOS_IS_STATUS_SUCCESS(status))
16718 {
16719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016720 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070016721 status = VOS_STATUS_E_FAILURE;
16722 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016723 /* free WDA context */
16724 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
16725 if ( !VOS_IS_STATUS_SUCCESS(status) )
16726 {
16727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16728 "error in WDA close " );
16729 status = VOS_STATUS_E_FAILURE;
16730 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016731 return status;
16732}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080016733
Jeff Johnsone7245742012-09-05 17:12:55 -070016734/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080016735 * FUNCTION: WDA_setNeedShutdown
16736 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070016737 */
16738
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080016739void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070016740{
16741 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070016742 if(pWDA == NULL)
16743 {
16744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16745 "Could not get the WDA Context pointer" );
16746 return;
16747 }
Jeff Johnsone7245742012-09-05 17:12:55 -070016748 pWDA->needShutdown = TRUE;
16749}
16750/*
16751 * FUNCTION: WDA_needShutdown
16752 * WDA needs a shutdown
16753 */
16754
16755v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
16756{
16757 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070016758 if(pWDA == NULL)
16759 {
16760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16761 "Could not get the WDA Context pointer" );
16762 return 0;
16763 }
16764 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070016765}
16766
Mohit Khanna4a70d262012-09-11 16:30:12 -070016767#ifdef WLAN_FEATURE_11AC
16768/*
16769 * FUNCTION: WDA_SetBeaconFilterReqCallback
16770 *
16771 */
16772void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
16773{
16774 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016776 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016777 if(NULL == pWdaParams)
16778 {
16779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016780 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016781 VOS_ASSERT(0) ;
16782 return ;
16783 }
Jeff Johnsone7245742012-09-05 17:12:55 -070016784
Mohit Khanna4a70d262012-09-11 16:30:12 -070016785 vos_mem_free(pWdaParams->wdaMsgParam) ;
16786 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16787 vos_mem_free(pWdaParams) ;
16788 /*
16789 * No respone required for SetBeaconFilter req so just free the request
16790 * param here
16791 */
16792
16793 return ;
16794}
16795
16796VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
16797 tUpdateVHTOpMode *pData)
16798{
16799 WDI_Status status = WDI_STATUS_SUCCESS ;
16800 tWDA_ReqParams *pWdaParams ;
16801 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
16802 sizeof(WDI_UpdateVHTOpMode)) ;
16803 if(NULL == wdiTemp)
16804 {
16805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016806 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016807 VOS_ASSERT(0);
16808 return VOS_STATUS_E_NOMEM;
16809 }
16810 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16811 if(NULL == pWdaParams)
16812 {
16813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016814 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016815 VOS_ASSERT(0);
16816 vos_mem_free(wdiTemp);
16817 return VOS_STATUS_E_NOMEM;
16818 }
Abhishek Singhdf8eb312014-11-15 00:49:28 +053016819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16820 "------> %s Opmode = %d and staid = %d" ,
16821 __func__, pData->opMode, pData->staId);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016822 wdiTemp->opMode = pData->opMode;
16823 wdiTemp->staId = pData->staId;
16824
16825 pWdaParams->pWdaContext = pWDA;
16826 /* Store Req pointer, as this will be used for response */
16827 pWdaParams->wdaMsgParam = (void *)pData;
16828 /* store Params pass it to WDI */
16829 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
16830
16831 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
16832
16833 if(IS_WDI_STATUS_FAILURE(status))
16834 {
16835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16836 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
16837 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16838 vos_mem_free(pWdaParams->wdaMsgParam);
16839 vos_mem_free(pWdaParams);
16840 }
16841 return CONVERT_WDI2VOS_STATUS(status) ;
16842}
16843#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016844
16845/*==========================================================================
16846 FUNCTION WDA_TransportChannelDebug
16847
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070016848 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016849 Display Transport Channel debugging information
16850 User may request to display DXE channel snapshot
16851 Or if host driver detects any abnormal stcuk may display
16852
16853 PARAMETERS
schang6295e542013-03-12 15:31:23 -070016854 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080016855 displaySnapshot : Display DXE snapshot option
Mihir Shete40a55652014-03-02 14:14:47 +053016856 debugFlags : Enable stall detect features
16857 defined by WPAL_DeviceDebugFlags
16858 These features may effect
16859 data performance.
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016860
16861 RETURN VALUE
16862 NONE
16863
16864===========================================================================*/
16865void WDA_TransportChannelDebug
16866(
schang6295e542013-03-12 15:31:23 -070016867 tpAniSirGlobal pMac,
16868 v_BOOL_t displaySnapshot,
Mihir Shete40a55652014-03-02 14:14:47 +053016869 v_U8_t debugFlags
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016870)
16871{
Mihir Shete40a55652014-03-02 14:14:47 +053016872 WDI_TransportChannelDebug(displaySnapshot, debugFlags);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016873 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070016874}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070016875
16876/*==========================================================================
16877 FUNCTION WDA_SetEnableSSR
16878
16879 DESCRIPTION
16880 API to enable/disable SSR on WDI timeout
16881
16882 PARAMETERS
16883 enableSSR : enable/disable SSR
16884
16885 RETURN VALUE
16886 NONE
16887
16888===========================================================================*/
16889void WDA_SetEnableSSR(v_BOOL_t enableSSR)
16890{
16891 WDI_SetEnableSSR(enableSSR);
16892}
Leo Chang9056f462013-08-01 19:21:11 -070016893
16894#ifdef FEATURE_WLAN_LPHB
16895/*
16896 * FUNCTION: WDA_LPHBconfRspCallback
16897 *
16898 */
16899void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
16900{
16901 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16902
16903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16904 "<------ %s " ,__func__);
16905 if (NULL == pWdaParams)
16906 {
16907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16908 "%s: pWdaParams received NULL", __func__);
16909 VOS_ASSERT(0) ;
16910 return ;
16911 }
16912
16913 /* Do not need to send notification to upper layer
16914 * Just free allocated resources */
16915 if (pWdaParams != NULL)
16916 {
16917 if (pWdaParams->wdaWdiApiMsgParam != NULL)
16918 {
16919 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16920 }
16921 vos_mem_free(pWdaParams->wdaMsgParam) ;
16922 vos_mem_free(pWdaParams) ;
16923 }
16924
16925 return;
16926}
16927
16928/*
16929 * FUNCTION: WDA_ProcessLPHBConfReq
16930 *
16931 */
16932VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
16933 tSirLPHBReq *pData)
16934{
16935 WDI_Status wdiStatus;
16936 tWDA_ReqParams *pWdaParams ;
16937
16938 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16939 "------> %s " , __func__);
16940
16941 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16942 if (NULL == pWdaParams)
16943 {
16944 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16945 "%s: VOS MEM Alloc Failure", __func__);
16946 VOS_ASSERT(0);
16947 vos_mem_free(pData);
16948 return VOS_STATUS_E_NOMEM;
16949 }
16950
16951 pWdaParams->pWdaContext = pWDA;
16952 pWdaParams->wdaMsgParam = (void *)pData;
16953 pWdaParams->wdaWdiApiMsgParam = NULL;
16954
16955 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
16956 if (WDI_STATUS_PENDING == wdiStatus)
16957 {
16958 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16959 "Pending received for %s:%d ", __func__, __LINE__);
16960 }
16961 else if (WDI_STATUS_SUCCESS != wdiStatus)
16962 {
16963 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16964 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
16965 vos_mem_free(pWdaParams->wdaMsgParam);
16966 vos_mem_free(pWdaParams);
16967 }
16968
16969 return CONVERT_WDI2VOS_STATUS(wdiStatus);
16970}
16971#endif /* FEATURE_WLAN_LPHB */
16972
c_hpothu92367912014-05-01 15:18:17 +053016973void WDA_GetBcnMissRateCallback(tANI_U8 status, tANI_U32 bcnMissRate,
16974 void* pUserData)
16975{
16976 tSirBcnMissRateInfo *pBcnMissRateInfo = (tSirBcnMissRateInfo *)pUserData;
16977
16978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16979 "<------ %s " ,__func__);
16980 if (NULL == pBcnMissRateInfo)
16981 {
16982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16983 "%s: pWdaParams received NULL", __func__);
16984 VOS_ASSERT(0) ;
16985 return ;
16986 }
16987 if (pBcnMissRateInfo->callback)
16988 {
16989 pBcnMissRateInfo->callback(status, bcnMissRate,
16990 pBcnMissRateInfo->data);
16991 }
16992 vos_mem_free(pUserData);
16993
16994 return;
16995}
16996
16997v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
16998 tSirBcnMissRateReq *pData)
16999{
17000 WDI_Status wdiStatus;
17001 tSirBcnMissRateInfo *pBcnMissRateInfo;
17002
17003 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17004 "------> %s " , __func__);
17005
17006 pBcnMissRateInfo =
17007 (tSirBcnMissRateInfo *)vos_mem_malloc(sizeof(tSirBcnMissRateInfo));
17008 if (NULL == pBcnMissRateInfo)
17009 {
17010 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17011 "%s: VOS MEM Alloc Failure", __func__);
17012 VOS_ASSERT(0);
17013 vos_mem_free(pData);
17014 return;
17015 }
17016
17017 pBcnMissRateInfo->callback = (pGetBcnMissRateCB)(pData->callback);
17018 pBcnMissRateInfo->data = pData->data;
17019
17020 wdiStatus = WDI_GetBcnMissRate(pBcnMissRateInfo,
17021 WDA_GetBcnMissRateCallback,
17022 pData->bssid);
17023 if (WDI_STATUS_PENDING == wdiStatus)
17024 {
17025 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17026 "Pending received for %s:%d ", __func__, __LINE__);
17027 }
17028 else if (WDI_STATUS_SUCCESS != wdiStatus)
17029 {
17030 if (pBcnMissRateInfo->callback)
17031 {
17032 pBcnMissRateInfo->callback(VOS_STATUS_E_FAILURE,
17033 -1, pBcnMissRateInfo->data);
17034 }
17035 }
17036 vos_mem_free(pData);
17037}
Dino Mycle41bdc942014-06-10 11:30:24 +053017038
17039#ifdef WLAN_FEATURE_EXTSCAN
17040
17041/*==========================================================================
17042 FUNCTION WDA_EXTScanStartRspCallback
17043
17044 DESCRIPTION
17045 API to send EXTScan Start Response to HDD
17046
17047 PARAMETERS
17048 pEventData: Response from FW
17049 pUserData:
17050===========================================================================*/
17051void WDA_EXTScanStartRspCallback(void *pEventData, void* pUserData)
17052{
17053 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17054 tWDA_CbContext *pWDA = NULL;
17055 void *pCallbackContext;
17056 tpAniSirGlobal pMac;
17057
17058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17059 "%s:", __func__);
17060 if (NULL == pWdaParams)
17061 {
17062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17063 "%s: pWdaParams received NULL", __func__);
17064 VOS_ASSERT(0);
17065 return;
17066 }
17067
17068 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17069
17070 if (NULL == pWDA)
17071 {
17072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17073 "%s: pWDA received NULL", __func__);
17074 VOS_ASSERT(0);
17075 goto error;
17076 }
17077
17078 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17079 if (NULL == pMac)
17080 {
17081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17082 "%s:pMac is NULL", __func__);
17083 VOS_ASSERT(0);
17084 goto error;
17085 }
17086
17087 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17088
17089 if (pMac->sme.pEXTScanIndCb)
17090 {
17091 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_START_RSP,
17092 pEventData);
17093 }
17094 else
17095 {
17096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17097 "%s:HDD callback is null", __func__);
17098 VOS_ASSERT(0);
17099 }
17100
17101error:
17102
17103 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17104 {
17105 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17106 }
17107 if (pWdaParams->wdaMsgParam != NULL)
17108 {
17109 vos_mem_free(pWdaParams->wdaMsgParam);
17110 }
17111 vos_mem_free(pWdaParams) ;
17112
17113 return;
17114}
17115
17116/*==========================================================================
17117 FUNCTION WDA_EXTScanStopRspCallback
17118
17119 DESCRIPTION
17120 API to send EXTScan Stop Response to HDD
17121
17122 PARAMETERS
17123 pEventData: Response from FW
17124 pUserData:
17125===========================================================================*/
17126void WDA_EXTScanStopRspCallback(void *pEventData, void* pUserData)
17127{
17128 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17129 tWDA_CbContext *pWDA = NULL;
17130 void *pCallbackContext;
17131 tpAniSirGlobal pMac;
17132
17133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17134 "%s:", __func__);
17135 if (NULL == pWdaParams)
17136 {
17137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17138 "%s: pWdaParams received NULL", __func__);
17139 VOS_ASSERT(0);
17140 return;
17141 }
17142
17143 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17144
17145 if (NULL == pWDA)
17146 {
17147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17148 "%s: pWDA received NULL", __func__);
17149 VOS_ASSERT(0);
17150 goto error;
17151 }
17152
17153 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17154 if (NULL == pMac)
17155 {
17156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17157 "%s:pMac is NULL", __func__);
17158 VOS_ASSERT(0);
17159 goto error;
17160 }
17161 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17162
17163 if (pMac->sme.pEXTScanIndCb)
17164 {
17165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17166 "%s:HDD call back function called", __func__);
17167 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_STOP_RSP,
17168 pEventData);
17169 }
17170 else
17171 {
17172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17173 "%s:HDD callback is null", __func__);
17174 VOS_ASSERT(0);
17175 }
17176
17177error:
17178
17179 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17180 {
17181 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17182 }
17183 if (pWdaParams->wdaMsgParam != NULL)
17184 {
17185 vos_mem_free(pWdaParams->wdaMsgParam);
17186 }
17187 vos_mem_free(pWdaParams) ;
17188
17189
17190 return;
17191}
17192
17193/*==========================================================================
17194 FUNCTION WDA_EXTScanGetCachedResultsRspCallback
17195
17196 DESCRIPTION
17197 API to send EXTScan Get Cached Results Response to HDD
17198
17199 PARAMETERS
17200 pEventData: Response from FW
17201 pUserData:
17202===========================================================================*/
17203void WDA_EXTScanGetCachedResultsRspCallback(void *pEventData, void* pUserData)
17204{
17205 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17206 tWDA_CbContext *pWDA = NULL;
17207 void *pCallbackContext;
17208 tpAniSirGlobal pMac;
17209
17210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17211 "%s: ", __func__);
17212 if (NULL == pWdaParams)
17213 {
17214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17215 "%s: pWdaParams received NULL", __func__);
17216 VOS_ASSERT(0);
17217 return;
17218 }
17219
17220 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17221
17222 if (NULL == pWDA)
17223 {
17224 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17225 "%s: pWDA received NULL", __func__);
17226 VOS_ASSERT(0);
17227 goto error;
17228 }
17229
17230 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17231 if (NULL == pMac)
17232 {
17233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17234 "%s:pMac is NULL", __func__);
17235 VOS_ASSERT(0);
17236 goto error;
17237 }
17238
17239 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17240
17241 if (pMac->sme.pEXTScanIndCb)
17242 {
17243 pMac->sme.pEXTScanIndCb(pCallbackContext,
17244 WDA_EXTSCAN_GET_CACHED_RESULTS_RSP,
17245 pEventData);
17246 }
17247 else
17248 {
17249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17250 "%s:HDD callback is null", __func__);
17251 VOS_ASSERT(0);
17252 }
17253
17254
17255error:
17256
17257 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17258 {
17259 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17260 }
17261 if (pWdaParams->wdaMsgParam != NULL)
17262 {
17263 vos_mem_free(pWdaParams->wdaMsgParam);
17264 }
17265 vos_mem_free(pWdaParams) ;
17266
17267 return;
17268}
17269
17270/*==========================================================================
17271 FUNCTION WDA_EXTScanGetCapabilitiesRspCallback
17272
17273 DESCRIPTION
17274 API to send EXTScan Get Capabilities Response to HDD
17275
17276 PARAMETERS
17277 pEventData: Response from FW
17278 pUserData:
17279===========================================================================*/
17280void WDA_EXTScanGetCapabilitiesRspCallback(void *pEventData, void* pUserData)
17281{
17282 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17283 tWDA_CbContext *pWDA = NULL;
17284 void *pCallbackContext;
17285 tpAniSirGlobal pMac;
17286
17287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17288 "%s:", __func__);
17289 if (NULL == pWdaParams)
17290 {
17291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17292 "%s: pWdaParams received NULL", __func__);
17293 VOS_ASSERT(0);
17294 return;
17295 }
17296
17297 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17298
17299 if (NULL == pWDA)
17300 {
17301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17302 "%s: pWDA received NULL", __func__);
17303 VOS_ASSERT(0);
17304 goto error;
17305 }
17306
17307 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17308 if (NULL == pMac)
17309 {
17310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17311 "%s:pMac is NULL", __func__);
17312 VOS_ASSERT(0);
17313 goto error;
17314 }
17315
17316 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17317
17318 if (pMac->sme.pEXTScanIndCb)
17319 {
17320 pMac->sme.pEXTScanIndCb(pCallbackContext,
17321 WDA_EXTSCAN_GET_CAPABILITIES_RSP,
17322 pEventData);
17323 }
17324 else
17325 {
17326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17327 "%s:HDD callback is null", __func__);
17328 VOS_ASSERT(0);
17329 }
17330
17331
17332error:
17333
17334 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17335 {
17336 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17337 }
17338 if (pWdaParams->wdaMsgParam != NULL)
17339 {
17340 vos_mem_free(pWdaParams->wdaMsgParam);
17341 }
17342 vos_mem_free(pWdaParams) ;
17343
17344 return;
17345}
17346
17347/*==========================================================================
17348 FUNCTION WDA_EXTScanSetBSSIDHotlistRspCallback
17349
17350 DESCRIPTION
17351 API to send EXTScan Set BSSID Hotlist Response to HDD
17352
17353 PARAMETERS
17354 pEventData: Response from FW
17355 pUserData:
17356===========================================================================*/
17357void WDA_EXTScanSetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
17358{
17359 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17360 tWDA_CbContext *pWDA = NULL;
17361 void *pCallbackContext;
17362 tpAniSirGlobal pMac;
17363
17364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17365 "%s: ", __func__);
17366 if (NULL == pWdaParams)
17367 {
17368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17369 "%s: pWdaParams received NULL", __func__);
17370 VOS_ASSERT(0) ;
17371 return;
17372 }
17373
17374 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17375
17376 if (NULL == pWDA)
17377 {
17378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17379 "%s: pWDA received NULL", __func__);
17380 VOS_ASSERT(0);
17381 goto error;
17382 }
17383
17384 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17385 if (NULL == pMac)
17386 {
17387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17388 "%s:pMac is NULL", __func__);
17389 VOS_ASSERT(0);
17390 goto error;
17391 }
17392
17393 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17394
17395 if (pMac->sme.pEXTScanIndCb)
17396 {
17397 pMac->sme.pEXTScanIndCb(pCallbackContext,
17398 WDA_EXTSCAN_SET_BSSID_HOTLIST_RSP,
17399 pEventData);
17400 }
17401 else
17402 {
17403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17404 "%s:HDD callback is null", __func__);
17405 VOS_ASSERT(0);
17406 }
17407
17408
17409error:
17410
17411 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17412 {
17413 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17414 }
17415 if (pWdaParams->wdaMsgParam != NULL)
17416 {
17417 vos_mem_free(pWdaParams->wdaMsgParam);
17418 }
17419 vos_mem_free(pWdaParams) ;
17420
17421 return;
17422}
17423
17424/*==========================================================================
17425 FUNCTION WDA_EXTScanResetBSSIDHotlistRspCallback
17426
17427 DESCRIPTION
17428 API to send EXTScan ReSet BSSID Hotlist Response to HDD
17429
17430 PARAMETERS
17431 pEventData: Response from FW
17432 pUserData:
17433===========================================================================*/
17434void WDA_EXTScanResetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
17435{
17436 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17437 tWDA_CbContext *pWDA = NULL;
17438 void *pCallbackContext;
17439 tpAniSirGlobal pMac;
17440
17441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17442 "%s:", __func__);
17443 if (NULL == pWdaParams)
17444 {
17445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17446 "%s: pWdaParams received NULL", __func__);
17447 VOS_ASSERT(0) ;
17448 return;
17449 }
17450
17451 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17452
17453 if (NULL == pWDA)
17454 {
17455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17456 "%s: pWDA received NULL", __func__);
17457 VOS_ASSERT(0);
17458 goto error;
17459 }
17460
17461 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17462 if (NULL == pMac)
17463 {
17464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17465 "%s:pMac is NULL", __func__);
17466 VOS_ASSERT(0);
17467 goto error;
17468 }
17469
17470 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17471
17472 if (pMac->sme.pEXTScanIndCb)
17473 {
17474 pMac->sme.pEXTScanIndCb(pCallbackContext,
17475 WDA_EXTSCAN_RESET_BSSID_HOTLIST_RSP,
17476 pEventData);
17477 }
17478 else
17479 {
17480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17481 "%s:HDD callback is null", __func__);
17482 VOS_ASSERT(0);
17483 }
17484
17485
17486error:
17487
17488 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17489 {
17490 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17491 }
17492 if (pWdaParams->wdaMsgParam != NULL)
17493 {
17494 vos_mem_free(pWdaParams->wdaMsgParam);
17495 }
17496 vos_mem_free(pWdaParams) ;
17497
17498 return;
17499}
17500
17501/*==========================================================================
17502 FUNCTION WDA_EXTScanSetSignfRSSIChangeRspCallback
17503
17504 DESCRIPTION
17505 API to send EXTScan Set Significant RSSI Change RSP to HDD
17506
17507 PARAMETERS
17508 pEventData: Response from FW
17509 pUserData:
17510===========================================================================*/
17511void WDA_EXTScanSetSignfRSSIChangeRspCallback(void *pEventData, void* pUserData)
17512{
17513 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17514 tWDA_CbContext *pWDA = NULL;
17515 void *pCallbackContext;
17516 tpAniSirGlobal pMac;
17517
17518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17519 "%s:", __func__);
17520 if (NULL == pWdaParams)
17521 {
17522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17523 "%s: pWdaParams received NULL", __func__);
17524 VOS_ASSERT(0) ;
17525 return;
17526 }
17527
17528 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17529
17530 if (NULL == pWDA)
17531 {
17532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17533 "%s: pWDA received NULL", __func__);
17534 VOS_ASSERT(0);
17535 goto error;
17536 }
17537
17538 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17539 if (NULL == pMac)
17540 {
17541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17542 "%s:pMac is NULL", __func__);
17543 VOS_ASSERT(0);
17544 goto error;
17545 }
17546
17547 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17548
17549 if (pMac->sme.pEXTScanIndCb)
17550 {
17551 pMac->sme.pEXTScanIndCb(pCallbackContext,
17552 WDA_EXTSCAN_SET_SIGNF_RSSI_CHANGE_RSP,
17553 pEventData);
17554 }
17555 else
17556 {
17557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17558 "%s:HDD callback is null", __func__);
17559 VOS_ASSERT(0);
17560 }
17561
17562
17563error:
17564
17565 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17566 {
17567 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17568 }
17569 if (pWdaParams->wdaMsgParam != NULL)
17570 {
17571 vos_mem_free(pWdaParams->wdaMsgParam);
17572 }
17573 vos_mem_free(pWdaParams) ;
17574
17575 return;
17576}
17577
17578/*==========================================================================
17579 FUNCTION WDA_EXTScanResetSignfRSSIChangeRspCallback
17580
17581 DESCRIPTION
17582 API to send EXTScan Set Significant RSSI Change RSP to HDD
17583
17584 PARAMETERS
17585 pEventData: Response from FW
17586 pUserData:
17587===========================================================================*/
17588void WDA_EXTScanResetSignfRSSIChangeRspCallback(void *pEventData,
17589 void* pUserData)
17590{
17591 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17592 tWDA_CbContext *pWDA = NULL;
17593 void *pCallbackContext;
17594 tpAniSirGlobal pMac;
17595
17596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17597 "%s:", __func__);
17598 if (NULL == pWdaParams)
17599 {
17600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17601 "%s: pWdaParams received NULL", __func__);
17602 VOS_ASSERT(0) ;
17603 return;
17604 }
17605
17606 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17607
17608 if (NULL == pWDA)
17609 {
17610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17611 "%s: pWDA received NULL", __func__);
17612 VOS_ASSERT(0);
17613 goto error;
17614 }
17615
17616 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17617 if (NULL == pMac)
17618 {
17619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17620 "%s:pMac is NULL", __func__);
17621 VOS_ASSERT(0);
17622 goto error;
17623 }
17624
17625 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17626
17627 if (pMac->sme.pEXTScanIndCb)
17628 {
17629 pMac->sme.pEXTScanIndCb(pCallbackContext,
17630 WDA_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_RSP,
17631 pEventData);
17632 }
17633 else
17634 {
17635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17636 "%s:HDD callback is null", __func__);
17637 VOS_ASSERT(0);
17638 }
17639
17640
17641error:
17642
17643 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17644 {
17645 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17646 }
17647 if (pWdaParams->wdaMsgParam != NULL)
17648 {
17649 vos_mem_free(pWdaParams->wdaMsgParam);
17650 }
17651 vos_mem_free(pWdaParams) ;
17652
17653 return;
17654}
17655
17656/*==========================================================================
17657 FUNCTION WDA_ProcessEXTScanStartReq
17658
17659 DESCRIPTION
17660 API to send EXTScan Start Request to WDI
17661
17662 PARAMETERS
17663 pWDA: Pointer to WDA context
17664 wdaRequest: Pointer to EXTScan req parameters
17665===========================================================================*/
17666VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
17667 tSirEXTScanStartReqParams *wdaRequest)
17668{
17669 WDI_Status status = WDI_STATUS_SUCCESS;
17670 tWDA_ReqParams *pWdaParams;
17671
17672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17673 "%s: ", __func__);
17674 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17675 if (NULL == pWdaParams)
17676 {
17677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17678 "%s: VOS MEM Alloc Failure", __func__);
17679 VOS_ASSERT(0);
17680 return VOS_STATUS_E_NOMEM;
17681 }
17682 pWdaParams->pWdaContext = pWDA;
17683 pWdaParams->wdaMsgParam = wdaRequest;
17684 pWdaParams->wdaWdiApiMsgParam = NULL;
17685
17686 status = WDI_EXTScanStartReq((void *)wdaRequest,
17687 (WDI_EXTScanStartRspCb)WDA_EXTScanStartRspCallback,
17688 (void *)pWdaParams);
17689 if (IS_WDI_STATUS_FAILURE(status))
17690 {
17691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17692 "Failure to request. Free all the memory " );
17693 vos_mem_free(pWdaParams->wdaMsgParam);
17694 vos_mem_free(pWdaParams);
17695 }
17696 return CONVERT_WDI2VOS_STATUS(status);
17697}
17698
17699/*==========================================================================
17700 FUNCTION WDA_ProcessEXTScanStopReq
17701
17702 DESCRIPTION
17703 API to send EXTScan Start Request to WDI
17704
17705 PARAMETERS
17706 pWDA: Pointer to WDA context
17707 wdaRequest: Pointer to EXTScan req parameters
17708===========================================================================*/
17709VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
17710 tSirEXTScanStopReqParams *wdaRequest)
17711{
17712 WDI_Status status = WDI_STATUS_SUCCESS;
17713 tWDA_ReqParams *pWdaParams;
17714
17715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17716 "%s:", __func__);
17717 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17718 if (NULL == pWdaParams)
17719 {
17720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17721 "%s: VOS MEM Alloc Failure", __func__);
17722 VOS_ASSERT(0);
17723 return VOS_STATUS_E_NOMEM;
17724 }
17725 pWdaParams->pWdaContext = pWDA;
17726 pWdaParams->wdaMsgParam = wdaRequest;
17727 pWdaParams->wdaWdiApiMsgParam = NULL;
17728
17729 status = WDI_EXTScanStopReq((void *)wdaRequest,
17730 (WDI_EXTScanStopRspCb)WDA_EXTScanStopRspCallback,
17731 (void *)pWdaParams);
17732 if (IS_WDI_STATUS_FAILURE(status))
17733 {
17734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17735 "Failure to request. Free all the memory " );
17736 vos_mem_free(pWdaParams->wdaMsgParam);
17737 vos_mem_free(pWdaParams);
17738 }
17739 return CONVERT_WDI2VOS_STATUS(status);
17740}
17741
17742/*==========================================================================
17743 FUNCTION WDA_ProcessEXTScanGetCachedResultsReq
17744
17745 DESCRIPTION
17746 API to send EXTScan Get Cached Results Request to WDI
17747
17748 PARAMETERS
17749 pWDA: Pointer to WDA context
17750 wdaRequest: Pointer to EXTScan req parameters
17751===========================================================================*/
17752VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
17753 tSirEXTScanGetCachedResultsReqParams *wdaRequest)
17754{
17755 WDI_Status status = WDI_STATUS_SUCCESS;
17756 tWDA_ReqParams *pWdaParams;
17757
17758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17759 "%s: ", __func__);
17760 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17761 if (NULL == pWdaParams)
17762 {
17763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17764 "%s: VOS MEM Alloc Failure", __func__);
17765 VOS_ASSERT(0);
17766 return VOS_STATUS_E_NOMEM;
17767 }
17768 pWdaParams->pWdaContext = pWDA;
17769 pWdaParams->wdaMsgParam = wdaRequest;
17770 pWdaParams->wdaWdiApiMsgParam = NULL;
17771
17772 status = WDI_EXTScanGetCachedResultsReq((void *)wdaRequest,
17773 (WDI_EXTScanGetCachedResultsRspCb)WDA_EXTScanGetCachedResultsRspCallback,
17774 (void *)pWdaParams);
17775 if (IS_WDI_STATUS_FAILURE(status))
17776 {
17777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17778 "Failure to request. Free all the memory " );
17779 vos_mem_free(pWdaParams->wdaMsgParam);
17780 vos_mem_free(pWdaParams);
17781 }
17782 return CONVERT_WDI2VOS_STATUS(status);
17783}
17784
17785/*==========================================================================
17786 FUNCTION WDA_ProcessEXTScanGetCapabilitiesReq
17787
17788 DESCRIPTION
17789 API to send EXTScan Get Capabilities Request to WDI
17790
17791 PARAMETERS
17792 pWDA: Pointer to WDA context
17793 wdaRequest: Pointer to EXTScan req parameters
17794===========================================================================*/
17795VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
17796 tSirGetEXTScanCapabilitiesReqParams *wdaRequest)
17797{
17798 WDI_Status status = WDI_STATUS_SUCCESS;
17799 tWDA_ReqParams *pWdaParams;
17800
17801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17802 "%s:", __func__);
17803 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17804 if (NULL == pWdaParams)
17805 {
17806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17807 "%s: VOS MEM Alloc Failure", __func__);
17808 VOS_ASSERT(0);
17809 return VOS_STATUS_E_NOMEM;
17810 }
17811 pWdaParams->pWdaContext = pWDA;
17812 pWdaParams->wdaMsgParam = wdaRequest;
17813 pWdaParams->wdaWdiApiMsgParam = NULL;
17814
17815 status = WDI_EXTScanGetCapabilitiesReq((void *)wdaRequest,
17816 (WDI_EXTScanGetCapabilitiesRspCb)WDA_EXTScanGetCapabilitiesRspCallback,
17817 (void *)pWdaParams);
17818 if (IS_WDI_STATUS_FAILURE(status))
17819 {
17820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17821 "Failure to request. Free all the memory " );
17822 vos_mem_free(pWdaParams->wdaMsgParam);
17823 vos_mem_free(pWdaParams);
17824 }
17825 return CONVERT_WDI2VOS_STATUS(status);
17826}
17827
17828/*==========================================================================
17829 FUNCTION WDA_ProcessEXTScanSetBSSIDHotlistReq
17830
17831 DESCRIPTION
17832 API to send Set BSSID Hotlist Request to WDI
17833
17834 PARAMETERS
17835 pWDA: Pointer to WDA context
17836 wdaRequest: Pointer to EXTScan req parameters
17837===========================================================================*/
17838VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
17839 tSirEXTScanSetBssidHotListReqParams *wdaRequest)
17840{
17841 WDI_Status status = WDI_STATUS_SUCCESS;
17842 tWDA_ReqParams *pWdaParams;
17843
17844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17845 "%s: ", __func__);
17846 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17847 if (NULL == pWdaParams)
17848 {
17849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17850 "%s: VOS MEM Alloc Failure", __func__);
17851 VOS_ASSERT(0);
17852 return VOS_STATUS_E_NOMEM;
17853 }
17854 pWdaParams->pWdaContext = pWDA;
17855 pWdaParams->wdaMsgParam = wdaRequest;
17856 pWdaParams->wdaWdiApiMsgParam = NULL;
17857
17858 status = WDI_EXTScanSetBSSIDHotlistReq((void *)wdaRequest,
17859 (WDI_EXTScanSetBSSIDHotlistRspCb)WDA_EXTScanSetBSSIDHotlistRspCallback,
17860 (void *)pWdaParams);
17861 if (IS_WDI_STATUS_FAILURE(status))
17862 {
17863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17864 "Failure to request. Free all the memory " );
17865 vos_mem_free(pWdaParams->wdaMsgParam);
17866 vos_mem_free(pWdaParams);
17867 }
17868 return CONVERT_WDI2VOS_STATUS(status);
17869}
17870
17871/*==========================================================================
17872 FUNCTION WDA_ProcessEXTScanReSetBSSIDHotlistReq
17873
17874 DESCRIPTION
17875 API to send Reset BSSID Hotlist Request to WDI
17876
17877 PARAMETERS
17878 pWDA: Pointer to WDA context
17879 wdaRequest: Pointer to EXTScan req parameters
17880===========================================================================*/
17881VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
17882 tSirEXTScanResetBssidHotlistReqParams *wdaRequest)
17883{
17884 WDI_Status status = WDI_STATUS_SUCCESS;
17885 tWDA_ReqParams *pWdaParams;
17886
17887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17888 "%s:", __func__);
17889 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17890 if (NULL == pWdaParams)
17891 {
17892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17893 "%s: VOS MEM Alloc Failure", __func__);
17894 VOS_ASSERT(0);
17895 return VOS_STATUS_E_NOMEM;
17896 }
17897 pWdaParams->pWdaContext = pWDA;
17898 pWdaParams->wdaMsgParam = wdaRequest;
17899 pWdaParams->wdaWdiApiMsgParam = NULL;
17900
17901 status = WDI_EXTScanResetBSSIDHotlistReq((void *)wdaRequest,
17902 (WDI_EXTScanResetBSSIDHotlistRspCb)WDA_EXTScanResetBSSIDHotlistRspCallback,
17903 (void *)pWdaParams);
17904 if (IS_WDI_STATUS_FAILURE(status))
17905 {
17906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17907 "Failure to request. Free all the memory " );
17908 vos_mem_free(pWdaParams->wdaMsgParam);
17909 vos_mem_free(pWdaParams);
17910 }
17911 return CONVERT_WDI2VOS_STATUS(status);
17912}
17913
17914/*==========================================================================
17915 FUNCTION WDA_ProcessEXTScanSetSignfRSSIChangeReq
17916
17917 DESCRIPTION
17918 API to send Set Significant RSSI Change Request to WDI
17919
17920 PARAMETERS
17921 pWDA: Pointer to WDA context
17922 wdaRequest: Pointer to EXTScan req parameters
17923===========================================================================*/
17924VOS_STATUS WDA_ProcessEXTScanSetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
17925 tSirEXTScanSetSignificantChangeReqParams *wdaRequest)
17926{
17927 WDI_Status status = WDI_STATUS_SUCCESS;
17928 tWDA_ReqParams *pWdaParams;
17929
17930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17931 "%s: ", __func__);
17932 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17933 if (NULL == pWdaParams)
17934 {
17935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17936 "%s: VOS MEM Alloc Failure", __func__);
17937 VOS_ASSERT(0);
17938 return VOS_STATUS_E_NOMEM;
17939 }
17940 pWdaParams->pWdaContext = pWDA;
17941 pWdaParams->wdaMsgParam = wdaRequest;
17942 pWdaParams->wdaWdiApiMsgParam = NULL;
17943
17944 status = WDI_EXTScanSetSignfRSSIChangeReq((void *)wdaRequest,
17945 (WDI_EXTScanSetSignfRSSIChangeRspCb)WDA_EXTScanSetSignfRSSIChangeRspCallback,
17946 (void *)pWdaParams);
17947 if (IS_WDI_STATUS_FAILURE(status))
17948 {
17949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17950 "Failure to request. Free all the memory " );
17951 vos_mem_free(pWdaParams->wdaMsgParam);
17952 vos_mem_free(pWdaParams);
17953 }
17954 return CONVERT_WDI2VOS_STATUS(status);
17955}
17956
17957/*==========================================================================
17958 FUNCTION WDA_ProcessEXTScanResetSignfRSSIChangeReq
17959
17960 DESCRIPTION
17961 API to send Reset Significant RSSI Change Request to WDI
17962
17963 PARAMETERS
17964 pWDA: Pointer to WDA context
17965 wdaRequest: Pointer to EXTScan req parameters
17966===========================================================================*/
17967VOS_STATUS WDA_ProcessEXTScanResetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
17968 tSirEXTScanResetSignificantChangeReqParams *wdaRequest)
17969{
17970 WDI_Status status = WDI_STATUS_SUCCESS;
17971 tWDA_ReqParams *pWdaParams;
17972
17973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17974 "%s:", __func__);
17975 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17976 if (NULL == pWdaParams)
17977 {
17978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17979 "%s: VOS MEM Alloc Failure", __func__);
17980 VOS_ASSERT(0);
17981 return VOS_STATUS_E_NOMEM;
17982 }
17983 pWdaParams->pWdaContext = pWDA;
17984 pWdaParams->wdaMsgParam = wdaRequest;
17985 pWdaParams->wdaWdiApiMsgParam = NULL;
17986
17987 status = WDI_EXTScanResetSignfRSSIChangeReq((void *)wdaRequest,
17988 (WDI_EXTScanResetSignfRSSIChangeRspCb)
17989 WDA_EXTScanResetSignfRSSIChangeRspCallback,
17990 (void *)pWdaParams);
17991 if (IS_WDI_STATUS_FAILURE(status))
17992 {
17993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17994 "Failure to request. Free all the memory " );
17995 vos_mem_free(pWdaParams->wdaMsgParam);
17996 vos_mem_free(pWdaParams);
17997 }
17998 return CONVERT_WDI2VOS_STATUS(status);
17999}
18000#endif /* WLAN_FEATURE_EXTSCAN */
18001
Sunil Duttbd736ed2014-05-26 21:19:41 +053018002#ifdef WLAN_FEATURE_LINK_LAYER_STATS
18003
18004/*==========================================================================
18005 FUNCTION WDA_LLStatsSetRspCallback
18006
18007 DESCRIPTION
18008 API to process set link layer statistics response from FW
18009
18010 PARAMETERS
18011 pRsp: Pointer to set link layer statistics response
18012 pUserData: Pointer to user data
18013
18014 RETURN VALUE
18015 NONE
18016
18017===========================================================================*/
18018void WDA_LLStatsSetRspCallback(void *pEventData, void* pUserData)
18019{
18020 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18021
18022
18023 if (NULL == pWdaParams)
18024 {
18025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18026 "%s: pWdaParams received NULL", __func__);
18027 VOS_ASSERT(0) ;
18028 return ;
18029 }
18030
18031 /* Do not need to send notification to upper layer
18032 * Just free allocated resources */
18033 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18034 {
18035 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18036 }
18037 if (pWdaParams->wdaMsgParam != NULL)
18038 {
18039 vos_mem_free(pWdaParams->wdaMsgParam);
18040 }
18041 vos_mem_free(pWdaParams) ;
18042
18043 return;
18044}
18045
18046/*==========================================================================
18047 FUNCTION WDA_ProcessLLStatsSetReq
18048
18049 DESCRIPTION
18050 API to send Set Link Layer Stats request to WDI
18051
18052 PARAMETERS
18053 pWDA: Pointer to WDA context
18054 wdaRequest: Pointer to set Link Layer Stats req parameters
18055===========================================================================*/
18056VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
18057 tSirLLStatsSetReq *wdaRequest)
18058{
18059 WDI_Status status = WDI_STATUS_SUCCESS;
18060 tWDA_ReqParams *pWdaParams;
18061
18062 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18063 if (NULL == pWdaParams)
18064 {
18065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18066 "%s: VOS MEM Alloc Failure", __func__);
18067 VOS_ASSERT(0);
18068 return VOS_STATUS_E_NOMEM;
18069 }
18070 pWdaParams->pWdaContext = pWDA;
18071 pWdaParams->wdaMsgParam = wdaRequest;
18072 pWdaParams->wdaWdiApiMsgParam = NULL;
18073
18074 status = WDI_LLStatsSetReq((void *)wdaRequest,
18075 (WDI_LLStatsSetRspCb)WDA_LLStatsSetRspCallback,
18076 (void *)pWdaParams);
18077 if (IS_WDI_STATUS_FAILURE(status))
18078 {
18079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18080 "Failure to request. Free all the memory " );
18081 vos_mem_free(pWdaParams->wdaMsgParam);
18082 vos_mem_free(pWdaParams);
18083 }
18084 return CONVERT_WDI2VOS_STATUS(status);
18085}
18086
18087/*==========================================================================
18088 FUNCTION WDA_LLStatsGetRspCallback
18089
18090 DESCRIPTION
18091 API to process get link layer statistics response from FW
18092
18093 PARAMETERS
18094 pRsp: Pointer to get link layer statistics response
18095 pUserData: Pointer to user data
18096
18097 RETURN VALUE
18098 NONE
18099
18100===========================================================================*/
18101void WDA_LLStatsGetRspCallback(void *pEventData, void* pUserData)
18102{
18103 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18104
18105 if (NULL == pWdaParams)
18106 {
18107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18108 "%s: pWdaParams received NULL", __func__);
18109 VOS_ASSERT(0) ;
18110 return ;
18111 }
18112
18113 /* Do not need to send notification to upper layer
18114 * Just free allocated resources */
18115 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18116 {
18117 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18118 }
18119 if (pWdaParams->wdaMsgParam != NULL)
18120 {
18121 vos_mem_free(pWdaParams->wdaMsgParam);
18122 }
18123 vos_mem_free(pWdaParams) ;
18124
18125 return;
18126}
18127
18128/*==========================================================================
18129 FUNCTION WDA_ProcessLLStatsGetReq
18130
18131 DESCRIPTION
18132 API to send Get Link Layer Stats request to WDI
18133
18134 PARAMETERS
18135 pWDA: Pointer to WDA context
18136 wdaRequest: Pointer to get Link Layer Stats req parameters
18137===========================================================================*/
18138VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
18139 tSirLLStatsGetReq *wdaRequest)
18140{
18141 WDI_Status status = WDI_STATUS_SUCCESS;
18142 tWDA_ReqParams *pWdaParams;
18143
18144 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18145 if (NULL == pWdaParams)
18146 {
18147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18148 "%s: VOS MEM Alloc Failure", __func__);
18149 VOS_ASSERT(0);
18150 return VOS_STATUS_E_NOMEM;
18151 }
18152 pWdaParams->pWdaContext = pWDA;
18153 pWdaParams->wdaMsgParam = wdaRequest;
18154 pWdaParams->wdaWdiApiMsgParam = NULL;
18155
18156 status = WDI_LLStatsGetReq((void *) wdaRequest,
18157 (WDI_LLStatsGetRspCb)WDA_LLStatsGetRspCallback,
18158 (void *)pWdaParams);
18159 if (IS_WDI_STATUS_FAILURE(status))
18160 {
18161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18162 "Failure to request. Free all the memory " );
18163 vos_mem_free(pWdaParams->wdaMsgParam);
18164 vos_mem_free(pWdaParams);
18165 }
18166 return CONVERT_WDI2VOS_STATUS(status);
18167}
18168
18169/*==========================================================================
18170 FUNCTION WDA_LLStatsClearRspCallback
18171
18172 DESCRIPTION
18173 API to process clear link layer statistics response from FW
18174
18175 PARAMETERS
18176 pRsp: Pointer to clear link layer statistics response
18177 pUserData: Pointer to user data
18178
18179 RETURN VALUE
18180 NONE
18181
18182===========================================================================*/
18183void WDA_LLStatsClearRspCallback(void *pEventData, void* pUserData)
18184{
18185 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18186
18187
18188 if (NULL == pWdaParams)
18189 {
18190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18191 "%s: pWdaParams received NULL", __func__);
18192 VOS_ASSERT(0) ;
18193 return ;
18194 }
18195 /* Do not need to send notification to upper layer
18196 * Just free allocated resources */
18197 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18198 {
18199 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18200 }
18201 if (pWdaParams->wdaMsgParam != NULL)
18202 {
18203 vos_mem_free(pWdaParams->wdaMsgParam);
18204 }
18205 vos_mem_free(pWdaParams) ;
18206 return;
18207}
18208
18209/*==========================================================================
18210 FUNCTION WDA_ProcessLLStatsClearReq
18211
18212 DESCRIPTION
18213 API to send Clear Link Layer Stats request to WDI
18214
18215 PARAMETERS
18216 pWDA: Pointer to WDA context
18217 wdaRequest: Pointer to earLink Layer Stats req
18218===========================================================================*/
18219VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
18220 tSirLLStatsClearReq *wdaRequest)
18221{
18222 WDI_Status status = WDI_STATUS_SUCCESS;
18223 tWDA_ReqParams *pWdaParams;
18224
18225 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18226 if (NULL == pWdaParams)
18227 {
18228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18229 "%s: VOS MEM Alloc Failure", __func__);
18230 VOS_ASSERT(0);
18231 return VOS_STATUS_E_NOMEM;
18232 }
18233 pWdaParams->pWdaContext = pWDA;
18234 pWdaParams->wdaMsgParam = wdaRequest;
18235 pWdaParams->wdaWdiApiMsgParam = NULL;
18236
18237 status = WDI_LLStatsClearReq((void *) wdaRequest,
18238 (WDI_LLStatsClearRspCb)WDA_LLStatsClearRspCallback,
18239 (void *)pWdaParams);
18240 if (IS_WDI_STATUS_FAILURE(status))
18241 {
18242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18243 "Failure to request. Free all the memory " );
18244 vos_mem_free(pWdaParams->wdaMsgParam);
18245 vos_mem_free(pWdaParams);
18246 }
18247 return CONVERT_WDI2VOS_STATUS(status);
18248}
18249
18250#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +053018251
Abhishek Singh85b74712014-10-08 11:38:19 +053018252void WDA_FWStatsGetRspCallback(WDI_Status status,void *fwStatsResp,void *pUserData)
18253{
18254 tSirFWStatsInfo *fwStatsinfo = (tSirFWStatsInfo *)pUserData;
18255
18256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18257 "<------ %s " ,__func__);
18258 if (NULL == fwStatsinfo)
18259 {
18260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18261 "%s: pWdaParams received NULL", __func__);
18262 VOS_ASSERT(0);
18263 return;
18264 }
18265
18266 if(fwStatsinfo->callback)
18267 fwStatsinfo->callback(status, fwStatsResp, fwStatsinfo->data);
18268
18269 vos_mem_free(pUserData);
18270 return;
18271}
18272
18273
18274v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
18275 tSirFWStatsGetReq *pData)
18276{
18277
18278 WDI_Status wdiStatus;
18279 tSirFWStatsInfo *fwStatsinfo;
18280
18281 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18282 "------> %s" , __func__);
18283
18284 fwStatsinfo =
18285 (tSirFWStatsInfo *)vos_mem_malloc(sizeof(tSirFWStatsInfo));
18286 if (NULL == fwStatsinfo)
18287 {
18288 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18289 "%s: VOS MEM Alloc Failure", __func__);
18290 VOS_ASSERT(0);
18291 vos_mem_free(pData);
18292 return;
18293 }
18294
18295 fwStatsinfo->callback = (tSirFWStatsCallback)(pData->callback);
18296 fwStatsinfo->data = pData->data;
18297
18298 wdiStatus = WDI_FWStatsGetReq(fwStatsinfo,
18299 WDA_FWStatsGetRspCallback,
18300 pData->stats);
18301 if (WDI_STATUS_PENDING == wdiStatus)
18302 {
18303 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18304 "Pending received for %s:%d ", __func__, __LINE__);
18305 }
18306 else if (WDI_STATUS_SUCCESS != wdiStatus)
18307 {
18308 if (fwStatsinfo->callback)
18309 {
18310 fwStatsinfo->callback(WDI_STATUS_E_FAILURE, NULL ,fwStatsinfo->data);
18311 }
18312 vos_mem_free(fwStatsinfo);
18313 }
18314 vos_mem_free(pData);
18315}
18316
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053018317/*==========================================================================
18318 FUNCTION WDA_EncryptMsgRspCallback
18319
18320 DESCRIPTION
18321 API to send Encrypt message response to HDD
18322
18323 PARAMETERS
18324 pEventData: Response from FW
18325 pUserData: Data sent to firmware as part of request
18326===========================================================================*/
18327void WDA_EncryptMsgRspCallback(WDI_Status status, void *pEventData,
18328 void* pUserData)
18329{
18330 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18331 tWDA_CbContext *pWDA = NULL;
18332 tpAniSirGlobal pMac;
18333 vos_msg_t vosMsg;
18334 tpSirEncryptedDataRspParams pEncRspParams;
18335 tpSetEncryptedDataRspParams pEncryptedDataRsp;
18336
18337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18338 FL("%s:"), __func__);
18339 if (NULL == pWdaParams)
18340 {
18341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18342 FL("%s: pWdaParams received NULL"), __func__);
18343 VOS_ASSERT(0);
18344 return;
18345 }
18346
18347 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
18348
18349 if (NULL == pWDA)
18350 {
18351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18352 FL("%s: pWDA received NULL"), __func__);
18353 VOS_ASSERT(0);
18354 goto error;
18355 }
18356
18357 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18358 if (NULL == pMac)
18359 {
18360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18361 FL("%s:pMac is NULL"), __func__);
18362 VOS_ASSERT(0);
18363 goto error;
18364 }
18365
18366 pEncryptedDataRsp = (tpSetEncryptedDataRspParams) pEventData;
18367
18368 pEncRspParams = vos_mem_malloc(sizeof(tSirEncryptedDataRspParams));
18369 if (NULL == pEncRspParams)
18370 {
18371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18372 FL("%s: VOS MEM Alloc Failure"), __func__);
18373 VOS_ASSERT(0);
18374 goto error;
18375 }
18376
18377 /* Message Header */
18378 pEncRspParams->mesgType = eWNI_SME_ENCRYPT_MSG_RSP;
18379 pEncRspParams->mesgLen = sizeof(tSirEncryptedDataRspParams);
18380 pEncRspParams->encryptedDataRsp.encryptedPayload.length =
18381 pEncryptedDataRsp->encryptedPayload.length;
18382 vos_mem_copy(pEncRspParams->encryptedDataRsp.encryptedPayload.data,
18383 pEncryptedDataRsp->encryptedPayload.data,
18384 pEncryptedDataRsp->encryptedPayload.length);
18385
18386 /* VOS message wrapper */
18387 vosMsg.type = eWNI_SME_ENCRYPT_MSG_RSP;
18388 vosMsg.bodyptr = (void *)pEncRspParams;
18389 vosMsg.bodyval = 0;
18390
18391 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
18392 {
18393 /* free the mem */
18394 vos_mem_free((v_VOID_t *) pEncRspParams);
18395 }
18396
18397error:
18398
18399 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18400 {
18401 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18402 }
18403 if (pWdaParams->wdaMsgParam != NULL)
18404 {
18405 vos_mem_free(pWdaParams->wdaMsgParam);
18406 }
18407 vos_mem_free(pWdaParams) ;
18408
18409 return;
18410}
18411/*==========================================================================
18412 FUNCTION WDA_ProcessEncryptMsgReq
18413
18414 DESCRIPTION
18415 API to send Encrypt message Request to WDI
18416
18417 PARAMETERS
18418 pWDA: Pointer to WDA context
18419 wdaRequest: Pointer to Encrypt_msg req parameters
18420===========================================================================*/
18421VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
18422 u8 *wdaRequest)
18423{
18424 WDI_Status status = WDI_STATUS_SUCCESS;
18425 tWDA_ReqParams *pWdaParams;
18426
18427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18428 FL("%s: "), __func__);
18429 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18430 if (NULL == pWdaParams)
18431 {
18432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18433 FL("%s: VOS MEM Alloc Failure"), __func__);
18434 VOS_ASSERT(0);
18435 return VOS_STATUS_E_NOMEM;
18436 }
18437 pWdaParams->pWdaContext = pWDA;
18438 pWdaParams->wdaMsgParam = wdaRequest;
18439 pWdaParams->wdaWdiApiMsgParam = NULL;
18440
18441 status = WDI_EncryptMsgReq((void *)wdaRequest,
18442 (WDI_EncryptMsgRspCb)WDA_EncryptMsgRspCallback,
18443 (void *)pWdaParams);
18444 if (IS_WDI_STATUS_FAILURE(status))
18445 {
18446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18447 FL("Failure to request. Free all the memory " ));
18448 vos_mem_free(pWdaParams->wdaMsgParam);
18449 vos_mem_free(pWdaParams);
18450 }
18451 return CONVERT_WDI2VOS_STATUS(status);
18452}