blob: a46bf1937979192734bff376fe0a409a3df9a92b [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
Naresh Jayaramf5bbe3f2014-12-29 18:32:47 +05302077 /* QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF */
2078 tlvStruct->type = QWLAN_HAL_CFG_BTC_FAST_WLAN_CONN_PREF ;
2079 tlvStruct->length = sizeof(tANI_U32);
2080 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2081
2082 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FAST_WLAN_CONN_PREF,
2083 configDataValue ) != eSIR_SUCCESS)
2084 {
2085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2086 "Failed to get value for WNI_CFG_BTC_FAST_WLAN_CONN_PREF");
2087 goto handle_failure;
2088 }
2089 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2090 + sizeof(tHalCfg) + tlvStruct->length) ;
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302091
Jeff Johnson295189b2012-06-20 16:38:30 -07002092 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002093#ifdef WLAN_DEBUG
2094 {
2095 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07002096 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2097 "****** Dumping CFG TLV ***** ");
2098 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
2099 {
2100 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2101 "%02x %02x %02x %02x %02x %02x %02x %02x",
2102 tlvStructStart[i],
2103 tlvStructStart[i+1],
2104 tlvStructStart[i+2],
2105 tlvStructStart[i+3],
2106 tlvStructStart[i+4],
2107 tlvStructStart[i+5],
2108 tlvStructStart[i+6],
2109 tlvStructStart[i+7]);
2110 }
2111 /* Dump the bytes in the last line*/
2112 for (; i < wdiStartParams->usConfigBufferLen; i++)
2113 {
2114 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2115 "%02x ",tlvStructStart[i]);
2116 }
2117 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2118 "**************************** ");
2119 }
2120#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002121 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002122handle_failure:
2123 vos_mem_free(configParam);
2124 return VOS_STATUS_E_FAILURE;
2125}
Jeff Johnson295189b2012-06-20 16:38:30 -07002126/*
2127 * FUNCTION: WDA_wdiCompleteCB
2128 * call the voss call back function
2129 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002130void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07002131{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002132 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2133 tWDA_CbContext *wdaContext;
2134
2135 if(NULL == pWdaParams)
2136 {
2137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002138 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002139 VOS_ASSERT(0) ;
2140 return ;
2141 }
2142
2143 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
2144
Jeff Johnson295189b2012-06-20 16:38:30 -07002145 if (NULL == wdaContext)
2146 {
2147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002148 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002149 return ;
2150 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002151
Jeff Johnson295189b2012-06-20 16:38:30 -07002152 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002153 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07002154 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002155 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002156 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002157 vos_mem_free(pWdaParams);
2158
Jeff Johnson295189b2012-06-20 16:38:30 -07002159 if(WDI_STATUS_SUCCESS != status)
2160 {
2161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2162 "WDI stop callback returned failure" );
2163 VOS_ASSERT(0) ;
2164 }
2165 else
2166 {
2167 wdaContext->wdaState = WDA_STOP_STATE;
2168 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002169
Leo Chang9d76f622013-08-23 16:34:52 -07002170 /* FTM Driver stop procedure should be synced.
2171 * Stop and Close will happen on same context */
2172 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
2173 {
2174 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
2175 {
2176 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2177 "%s: FTM Stop Event Set Fail", __func__);
2178 VOS_ASSERT(0);
2179 }
2180 }
2181
Jeff Johnson295189b2012-06-20 16:38:30 -07002182 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002183 vos_WDAComplete_cback(wdaContext->pVosContext);
2184
Jeff Johnson295189b2012-06-20 16:38:30 -07002185 return ;
2186}
Jeff Johnson295189b2012-06-20 16:38:30 -07002187/*
2188 * FUNCTION: WDA_stop
2189 * call WDI_stop
2190 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002191VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
2192{
2193 WDI_Status wdiStatus;
2194 VOS_STATUS status = VOS_STATUS_SUCCESS;
2195 WDI_StopReqParamsType *wdiStopReq;
2196 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002197 tWDA_ReqParams *pWdaParams ;
2198
Jeff Johnson295189b2012-06-20 16:38:30 -07002199 if (NULL == pWDA)
2200 {
2201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002202 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002203 VOS_ASSERT(0);
2204 return VOS_STATUS_E_FAILURE;
2205 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002206 if (pWDA->wdiFailed == true)
2207 {
2208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002209 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002210 return VOS_STATUS_E_ALREADY;
2211 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002212
Jeff Johnson295189b2012-06-20 16:38:30 -07002213 /* FTM mode stay START_STATE */
2214 if( (WDA_READY_STATE != pWDA->wdaState) &&
2215 (WDA_INIT_STATE != pWDA->wdaState) &&
2216 (WDA_START_STATE != pWDA->wdaState) )
2217 {
2218 VOS_ASSERT(0);
2219 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002220 wdiStopReq = (WDI_StopReqParamsType *)
2221 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
2222 if(NULL == wdiStopReq)
2223 {
2224 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002225 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002226 VOS_ASSERT(0);
2227 return VOS_STATUS_E_NOMEM;
2228 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002229
Jeff Johnson295189b2012-06-20 16:38:30 -07002230 wdiStopReq->wdiStopReason = reason;
2231 wdiStopReq->wdiReqStatusCB = NULL;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302232
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002233 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2234 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07002235 {
2236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002237 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002238 VOS_ASSERT(0);
2239 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002240 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07002241 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002242
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002243 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
2244 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07002245 {
2246 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002247 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002248 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002249
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002250 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
2251 pWdaParams->wdaMsgParam = NULL;
2252 pWdaParams->pWdaContext = pWDA;
2253
Jeff Johnson295189b2012-06-20 16:38:30 -07002254 /* call WDI stop */
2255 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002256 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
2257
Jeff Johnson295189b2012-06-20 16:38:30 -07002258 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
2259 {
2260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2261 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002262 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2263 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002264 status = VOS_STATUS_E_FAILURE;
2265 }
Leo Chang9d76f622013-08-23 16:34:52 -07002266
2267 /* FTM Driver stop procedure should be synced.
2268 * Stop and Close will happen on same context */
2269 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
2270 {
2271 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
2272 WDI_RESPONSE_TIMEOUT);
2273 if (status != VOS_STATUS_SUCCESS)
2274 {
2275 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2276 "%s: FTM Stop Timepoout", __func__);
2277 VOS_ASSERT(0);
Leo Chang9d76f622013-08-23 16:34:52 -07002278 }
c_hpothu0d36bc42014-07-03 17:43:45 +05302279 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Leo Chang9d76f622013-08-23 16:34:52 -07002280 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002281 return status;
2282}
Jeff Johnson295189b2012-06-20 16:38:30 -07002283/*
2284 * FUNCTION: WDA_close
2285 * call WDI_close and free the WDA context
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302286 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002287VOS_STATUS WDA_close(v_PVOID_t pVosContext)
2288{
Jeff Johnson43971f52012-07-17 12:26:56 -07002289 VOS_STATUS status = VOS_STATUS_SUCCESS;
2290 WDI_Status wstatus;
2291 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002292 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002293 if (NULL == wdaContext)
2294 {
2295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002296 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002297 return VOS_STATUS_E_FAILURE;
2298 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002299 if((WDA_INIT_STATE != wdaContext->wdaState) &&
2300 (WDA_STOP_STATE != wdaContext->wdaState))
2301 {
2302 VOS_ASSERT(0);
2303 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002304 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07002305 wstatus = WDI_Close();
2306 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07002307 {
2308 status = VOS_STATUS_E_FAILURE;
2309 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002310 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002311 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07002312 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
2313 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002314 {
2315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002316 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002317 status = VOS_STATUS_E_FAILURE;
2318 }
2319
Jeff Johnson43971f52012-07-17 12:26:56 -07002320 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
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 Johnson43971f52012-07-17 12:26:56 -07002327 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002328 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002329 {
2330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002331 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002332 status = VOS_STATUS_E_FAILURE;
2333 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002334 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07002335 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002336 {
2337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002338 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002339 status = VOS_STATUS_E_FAILURE;
2340 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002341 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07002342 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07002343 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07002344 {
2345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2346 "error in WDA close " );
2347 status = VOS_STATUS_E_FAILURE;
2348 }
2349 return status;
2350}
Jeff Johnson295189b2012-06-20 16:38:30 -07002351/*
2352 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
2353 * returns 1 if the compiled version is greater than or equal to the input version
2354 */
2355
2356uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2357{
2358 VOS_STATUS status = VOS_STATUS_SUCCESS;
2359 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2360 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002361 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002362 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
2363 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
2364 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
2365 (compiledVersion.revision >= revision)))
2366 return 1;
2367 else
2368 return 0;
2369}
Jeff Johnson295189b2012-06-20 16:38:30 -07002370/*
2371 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
2372 * returns 1 if the compiled version is greater than or equal to the input version
2373 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002374uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2375{
2376 VOS_STATUS status = VOS_STATUS_SUCCESS;
2377 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2378 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002379 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002380 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
2381 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
2382 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
2383 (reportedVersion.revision >= revision)))
2384 return 1;
2385 else
2386 return 0;
2387}
Jeff Johnson295189b2012-06-20 16:38:30 -07002388/*
2389 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
2390 * Returns the version of the WCNSS WLAN API with which the HOST
2391 * device driver was compiled
2392 */
2393VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
2394 tSirVersionType *pVersion)
2395{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302396 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002397 if ((NULL == pvosGCtx) || (NULL == pVersion))
2398 {
2399 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002400 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002401 VOS_ASSERT(0);
2402 return VOS_STATUS_E_FAILURE;
2403 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002404 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2405 if (NULL == pWDA )
2406 {
2407 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002408 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002409 VOS_ASSERT(0);
2410 return VOS_STATUS_E_FAILURE;
2411 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002412 *pVersion = pWDA->wcnssWlanCompiledVersion;
2413 return VOS_STATUS_SUCCESS;
2414}
Jeff Johnson295189b2012-06-20 16:38:30 -07002415/*
2416 * FUNCTION: WDA_GetWcnssWlanReportedVersion
2417 * Returns the version of the WCNSS WLAN API with which the WCNSS
2418 * device driver was compiled
2419 */
2420VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
2421 tSirVersionType *pVersion)
2422{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302423 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002424 if ((NULL == pvosGCtx) || (NULL == pVersion))
2425 {
2426 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002427 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002428 VOS_ASSERT(0);
2429 return VOS_STATUS_E_FAILURE;
2430 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002431 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2432 if (NULL == pWDA )
2433 {
2434 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002435 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002436 VOS_ASSERT(0);
2437 return VOS_STATUS_E_FAILURE;
2438 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002439 *pVersion = pWDA->wcnssWlanReportedVersion;
2440 return VOS_STATUS_SUCCESS;
2441}
Jeff Johnson295189b2012-06-20 16:38:30 -07002442/*
2443 * FUNCTION: WDA_GetWcnssSoftwareVersion
2444 * Returns the WCNSS Software version string
2445 */
2446VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
2447 tANI_U8 *pVersion,
2448 tANI_U32 versionBufferSize)
2449{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302450 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002451 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002452 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002453 if ((NULL == pvosGCtx) || (NULL == pVersion))
2454 {
2455 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002456 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002457 VOS_ASSERT(0);
2458 return VOS_STATUS_E_FAILURE;
2459 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002460 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2461 if (NULL == pWDA )
2462 {
2463 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002464 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002465 VOS_ASSERT(0);
2466 return VOS_STATUS_E_FAILURE;
2467 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002468 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
2469 return VOS_STATUS_SUCCESS;
2470}
Jeff Johnson295189b2012-06-20 16:38:30 -07002471/*
2472 * FUNCTION: WDA_GetWcnssHardwareVersion
2473 * Returns the WCNSS Hardware version string
2474 */
2475VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
2476 tANI_U8 *pVersion,
2477 tANI_U32 versionBufferSize)
2478{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302479 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002480 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002481 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002482 if ((NULL == pvosGCtx) || (NULL == pVersion))
2483 {
2484 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002485 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002486 VOS_ASSERT(0);
2487 return VOS_STATUS_E_FAILURE;
2488 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002489 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2490 if (NULL == pWDA )
2491 {
2492 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002493 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002494 VOS_ASSERT(0);
2495 return VOS_STATUS_E_FAILURE;
2496 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002497 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
2498 return VOS_STATUS_SUCCESS;
2499}
Jeff Johnson295189b2012-06-20 16:38:30 -07002500/*
2501 * FUNCTION: WDA_WniCfgDnld
2502 * Trigger CFG Download
2503 */
2504VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
2505{
2506 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302507 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnsonab81a082013-04-03 16:00:31 -07002508
Jeff Johnson295189b2012-06-20 16:38:30 -07002509 if (NULL == pMac )
2510 {
2511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002512 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002513 VOS_ASSERT(0);
2514 return VOS_STATUS_E_FAILURE;
2515 }
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302516 processCfgDownloadReq(pMac);
Jeff Johnson295189b2012-06-20 16:38:30 -07002517 return vosStatus;
2518}
Jeff Johnson295189b2012-06-20 16:38:30 -07002519/* -----------------------------------------------------------------
2520 * WDI interface
2521 * -----------------------------------------------------------------
2522 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002523/*
2524 * FUNCTION: WDA_suspendDataTxCallback
2525 * call back function called from TL after suspend Transmission
2526 */
2527VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2528 v_U8_t* ucSTAId,
2529 VOS_STATUS vosStatus)
2530{
2531 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002533 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002534 if (NULL == pWDA )
2535 {
2536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002537 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002538 VOS_ASSERT(0);
2539 return VOS_STATUS_E_FAILURE;
2540 }
2541 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2542 {
2543 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2544 }
2545 else
2546 {
2547 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2548 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002549 /* Trigger the event to bring the WDA TL suspend function to come
2550 * out of wait*/
2551 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2552 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2553 {
2554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002555 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002556 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002557 /* If TL suspended had timedout before this callback was called, resume back
2558 * TL.*/
2559 if (pWDA->txSuspendTimedOut)
2560 {
2561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002562 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07002563 WDA_ResumeDataTx(pWDA);
2564 pWDA->txSuspendTimedOut = FALSE;
2565 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002566 return VOS_STATUS_SUCCESS;
2567}
Jeff Johnson295189b2012-06-20 16:38:30 -07002568/*
2569 * FUNCTION: WDA_suspendDataTx
2570 * Update TL to suspend the data Transmission
2571 */
2572VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2573{
2574 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2575 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002576
2577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002578 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002579 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002580 if (pWDA->txSuspendTimedOut)
2581 {
2582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002583 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07002584 return status;
2585 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002586 /* Reset the event to be not signalled */
2587 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2588 if(!VOS_IS_STATUS_SUCCESS(status))
2589 {
2590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002591 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002592 return VOS_STATUS_E_FAILURE;
2593 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002594 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002595 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002596 WDA_SuspendDataTxCallback);
2597 if(status != VOS_STATUS_SUCCESS)
2598 {
2599 return status;
2600 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002601 /* Wait for the event to be set by the TL, to get the response of
2602 * suspending the TX queues, this event should be set by the Callback
2603 * function called by TL*/
2604 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2605 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2606 if(!VOS_IS_STATUS_SUCCESS(status))
2607 {
2608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2609 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002610 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002611 /* Set this flag to true when TL suspend times out, so that when TL
2612 * suspend eventually happens and calls the callback, TL can be resumed
2613 * right away by looking at this flag when true.*/
2614 pWDA->txSuspendTimedOut = TRUE;
2615 }
2616 else
2617 {
2618 pWDA->txSuspendTimedOut = FALSE;
2619 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002620 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2621 {
2622 status = VOS_STATUS_SUCCESS;
2623 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002624 return status;
2625}
Jeff Johnson295189b2012-06-20 16:38:30 -07002626/*
2627 * FUNCTION: WDA_resumeDataTx
2628 * Update TL to resume the data Transmission
2629 */
2630VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2631{
2632 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002633
2634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002635 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002636
2637 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002638 return status;
2639}
Jeff Johnson295189b2012-06-20 16:38:30 -07002640/*
2641 * FUNCTION: WDA_InitScanReqCallback
2642 * Trigger Init SCAN callback
2643 */
2644void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2645{
2646 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2647 tWDA_CbContext *pWDA;
2648 tInitScanParams *pWDA_ScanParam ;
2649 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002651 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002652 if(NULL == pWdaParams)
2653 {
2654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002655 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002656 VOS_ASSERT(0) ;
2657 return ;
2658 }
2659 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2660 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002661 if(NULL == pWDA_ScanParam)
2662 {
2663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002664 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002665 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002666 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2667 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002668 return ;
2669 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002670 if(WDI_STATUS_SUCCESS != wdiStatus)
2671 {
2672 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002673 if(VOS_STATUS_SUCCESS != status)
2674 {
2675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002676 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002677 }
2678 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002679 /* free WDI command buffer */
2680 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002681 vos_mem_free(pWdaParams) ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05302682
2683
Jeff Johnson295189b2012-06-20 16:38:30 -07002684 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002685 /* without converting the Status to Failure or Success Just
2686 pass the same status to lim */
2687 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002688 /* send SCAN RSP message back to PE */
2689 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002690 return ;
2691}
2692
2693/*
2694 * FUNCTION: WDA_ProcessInitScanReq
2695 * Trigger Init SCAN in DAL
2696 */
2697VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2698 tInitScanParams *initScanParams)
2699{
2700 WDI_Status status = WDI_STATUS_SUCCESS ;
2701 WDI_InitScanReqParamsType *wdiInitScanParam =
2702 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2703 sizeof(WDI_InitScanReqParamsType)) ;
2704 tWDA_ReqParams *pWdaParams;
2705 tANI_U8 i = 0;
2706
2707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002708 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002709 if(NULL == wdiInitScanParam)
2710 {
2711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002712 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002713 VOS_ASSERT(0);
2714 return VOS_STATUS_E_NOMEM;
2715 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002716 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2717 if(NULL == pWdaParams)
2718 {
2719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002720 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002721 VOS_ASSERT(0);
2722 vos_mem_free(wdiInitScanParam);
2723 return VOS_STATUS_E_NOMEM;
2724 }
2725
2726 /* Copy init Scan params to WDI structure */
2727 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2728 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2729 sizeof(tSirMacAddr)) ;
2730 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2731 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2732 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002733 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2734 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07002735 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2736 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002737 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2738 {
2739 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2740 initScanParams->scanEntry.bssIdx[i] ;
2741 }
2742
2743 /* if Frame length, copy macMgmtHdr or WDI structure */
2744 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2745 {
2746 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2747 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2748 }
2749 wdiInitScanParam->wdiReqStatusCB = NULL ;
2750
Jeff Johnson295189b2012-06-20 16:38:30 -07002751 /* Store Init Req pointer, as this will be used for response */
2752 pWdaParams->pWdaContext = pWDA;
2753 pWdaParams->wdaMsgParam = initScanParams;
2754 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002755 /* first try to suspend TX */
2756 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002757 if(WDI_STATUS_SUCCESS != status)
2758 {
2759 goto handleWdiFailure;
2760 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002761 /* call DAL API to pass init scan request to DAL */
2762 status = WDI_InitScanReq(wdiInitScanParam,
2763 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002764 if(IS_WDI_STATUS_FAILURE(status))
2765 {
2766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2767 "error in WDA Init Scan, Resume Tx " );
2768 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002769 VOS_ASSERT(0) ;
2770
2771 goto handleWdiFailure;
2772 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002773 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002774handleWdiFailure:
2775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2776 "Failure in WDI Api, free all the memory " );
2777 /* free WDI command buffer */
2778 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2779 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002780 /* send Failure to PE */
2781 initScanParams->status = eSIR_FAILURE ;
2782 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002783 return CONVERT_WDI2VOS_STATUS(status) ;
2784}
2785
Jeff Johnson295189b2012-06-20 16:38:30 -07002786/*
2787 * FUNCTION: WDA_StartScanReqCallback
2788 * send Start SCAN RSP back to PE
2789 */
2790void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2791 void* pUserData)
2792{
2793 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2794 tWDA_CbContext *pWDA;
2795 tStartScanParams *pWDA_ScanParam;
2796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002797 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002798 if(NULL == pWdaParams)
2799 {
2800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002801 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002802 VOS_ASSERT(0) ;
2803 return ;
2804 }
2805 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2806 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002807 if(NULL == pWDA_ScanParam)
2808 {
2809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002810 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002811 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002812 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002813 return ;
2814 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002815 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2816 {
2817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002818 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002819 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002820 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002821 return ;
2822 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002823 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2824 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002825
Jeff Johnson295189b2012-06-20 16:38:30 -07002826
2827 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002828 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002829 /* send SCAN RSP message back to PE */
2830 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002831 return ;
2832}
2833
Jeff Johnson295189b2012-06-20 16:38:30 -07002834/*
2835 * FUNCTION: WDA_ProcessStartScanReq
2836 * Trigger start SCAN in WDI
2837 */
2838VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2839 tStartScanParams *startScanParams)
2840{
2841 WDI_Status status = WDI_STATUS_SUCCESS;
2842 WDI_StartScanReqParamsType *wdiStartScanParams =
2843 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2844 sizeof(WDI_StartScanReqParamsType)) ;
2845 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002847 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002848 if(NULL == wdiStartScanParams)
2849 {
2850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002851 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002852 VOS_ASSERT(0);
2853 return VOS_STATUS_E_NOMEM;
2854 }
2855 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2856 if(NULL == pWdaParams)
2857 {
2858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002859 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002860 VOS_ASSERT(0);
2861 vos_mem_free(wdiStartScanParams);
2862 return VOS_STATUS_E_NOMEM;
2863 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002864 /* Copy init Scan params to WDI structure */
2865 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2866 wdiStartScanParams->wdiReqStatusCB = NULL ;
2867
Jeff Johnson295189b2012-06-20 16:38:30 -07002868 /* Store Init Req pointer, as this will be used for response */
2869 /* store Params pass it to WDI */
2870 pWdaParams->pWdaContext = pWDA;
2871 pWdaParams->wdaMsgParam = startScanParams;
2872 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002873 /* call DAL API to pass init scan request to DAL */
2874 status = WDI_StartScanReq(wdiStartScanParams,
2875 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002876 /* failure returned by WDI API */
2877 if(IS_WDI_STATUS_FAILURE(status))
2878 {
2879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2880 "Failure in Start Scan WDI API, free all the memory "
2881 "It should be due to previous abort scan." );
2882 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2883 vos_mem_free(pWdaParams) ;
2884 startScanParams->status = eSIR_FAILURE ;
2885 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2886 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002887 return CONVERT_WDI2VOS_STATUS(status) ;
2888}
Jeff Johnson295189b2012-06-20 16:38:30 -07002889/*
2890 * FUNCTION: WDA_EndScanReqCallback
2891 * END SCAN callback
2892 */
2893void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2894{
2895 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2896 tWDA_CbContext *pWDA;
2897 tEndScanParams *endScanParam;
2898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002899 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002900 if(NULL == pWdaParams)
2901 {
2902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002903 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002904 VOS_ASSERT(0) ;
2905 return ;
2906 }
2907 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2908 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002909 if(NULL == endScanParam)
2910 {
2911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002912 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002913 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002914 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2915 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002916 return ;
2917 }
2918
2919 /* Free WDI command buffer */
2920 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2921 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002922 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002923 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002924 /* send response back to PE */
2925 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2926 return ;
2927}
2928
Jeff Johnson295189b2012-06-20 16:38:30 -07002929/*
2930 * FUNCTION: WDA_ProcessEndScanReq
2931 * Trigger END SCAN in WDI
2932 */
2933VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2934 tEndScanParams *endScanParams)
2935{
2936 WDI_Status status = WDI_STATUS_SUCCESS;
2937 WDI_EndScanReqParamsType *wdiEndScanParams =
2938 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2939 sizeof(WDI_EndScanReqParamsType)) ;
2940 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002942 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002943 if(NULL == wdiEndScanParams)
2944 {
2945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002946 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002947 VOS_ASSERT(0);
2948 return VOS_STATUS_E_NOMEM;
2949 }
2950 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2951 if(NULL == pWdaParams)
2952 {
2953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002954 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002955 VOS_ASSERT(0);
2956 vos_mem_free(wdiEndScanParams);
2957 return VOS_STATUS_E_NOMEM;
2958 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002959 /* Copy init Scan params to WDI structure */
2960 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2961 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002962 /* Store Init Req pointer, as this will be used for response */
2963 /* store Params pass it to WDI */
2964 pWdaParams->pWdaContext = pWDA;
2965 pWdaParams->wdaMsgParam = endScanParams;
2966 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002967 /* call DAL API to pass init scan request to DAL */
2968 status = WDI_EndScanReq(wdiEndScanParams,
2969 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002970 if(IS_WDI_STATUS_FAILURE(status))
2971 {
2972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2973 "Failure in End Scan WDI API, free all the memory "
2974 "It should be due to previous abort scan." );
2975 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2976 vos_mem_free(pWdaParams) ;
2977 endScanParams->status = eSIR_FAILURE ;
2978 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2979 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002980 return CONVERT_WDI2VOS_STATUS(status) ;
2981}
Jeff Johnson295189b2012-06-20 16:38:30 -07002982/*
2983 * FUNCTION: WDA_FinishScanReqCallback
2984 * Trigger Finish SCAN callback
2985 */
2986void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2987{
2988 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2989 tWDA_CbContext *pWDA;
2990 tFinishScanParams *finishScanParam;
2991 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002993 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002994 if(NULL == pWdaParams)
2995 {
2996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002997 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002998 VOS_ASSERT(0) ;
2999 return ;
3000 }
3001
3002 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3003 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003004 if(NULL == finishScanParam)
3005 {
3006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003007 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003008 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07003009 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3010 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003011 return ;
3012 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003013 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3014 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003015 /*
3016 * Now Resume TX, if we reached here means, TX is already suspended, we
3017 * have to resume it unconditionaly
3018 */
3019 status = WDA_ResumeDataTx(pWDA) ;
3020
3021 if(VOS_STATUS_SUCCESS != status)
3022 {
3023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003024 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003025 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003026 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003027 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
3028 return ;
3029}
Jeff Johnson295189b2012-06-20 16:38:30 -07003030/*
3031 * FUNCTION: WDA_ProcessFinshScanReq
3032 * Trigger Finish SCAN in WDI
3033 */
3034VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
3035 tFinishScanParams *finishScanParams)
3036{
3037 WDI_Status status = WDI_STATUS_SUCCESS;
3038 WDI_FinishScanReqParamsType *wdiFinishScanParams =
3039 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
3040 sizeof(WDI_FinishScanReqParamsType)) ;
3041 tWDA_ReqParams *pWdaParams ;
3042 tANI_U8 i = 0;
3043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003044 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003045 if(NULL == wdiFinishScanParams)
3046 {
3047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003048 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003049 VOS_ASSERT(0);
3050 return VOS_STATUS_E_NOMEM;
3051 }
3052 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3053 if(NULL == pWdaParams)
3054 {
3055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003056 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003057 VOS_ASSERT(0);
3058 vos_mem_free(wdiFinishScanParams);
3059 return VOS_STATUS_E_NOMEM;
3060 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003061 /* Copy init Scan params to WDI structure */
3062 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
3063 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
3064 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003065 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
3066 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
3067 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
3068 finishScanParams->frameLength ;
3069 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
3070 finishScanParams->currentOperChannel ;
3071 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
3072 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
3073 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003074 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
3075 {
3076 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3077 finishScanParams->scanEntry.bssIdx[i] ;
3078 }
3079
3080
Jeff Johnson295189b2012-06-20 16:38:30 -07003081 /* if Frame length, copy macMgmtHdr ro WDI structure */
3082 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
3083 {
3084 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
3085 &finishScanParams->macMgmtHdr,
3086 sizeof(WDI_MacMgmtHdr)) ;
3087 }
3088 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003089 /* Store Init Req pointer, as this will be used for response */
3090 /* store Params pass it to WDI */
3091 pWdaParams->pWdaContext = pWDA;
3092 pWdaParams->wdaMsgParam = finishScanParams;
3093 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003094 /* call DAL API to pass init scan request to DAL */
3095 status = WDI_FinishScanReq(wdiFinishScanParams,
3096 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003097
Jeff Johnson295189b2012-06-20 16:38:30 -07003098
3099 /*
3100 * WDI API returns failure..
3101 */
3102 if(IS_WDI_STATUS_FAILURE( status))
3103 {
3104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3105 "Failure in Finish Scan WDI API, free all the memory " );
3106 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3107 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003108 finishScanParams->status = eSIR_FAILURE ;
3109 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
3110 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003111 return CONVERT_WDI2VOS_STATUS(status) ;
3112}
Jeff Johnson295189b2012-06-20 16:38:30 -07003113/*---------------------------------------------------------------------
3114 * ASSOC API's
3115 *---------------------------------------------------------------------
3116 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003117/*
Sachin Ahuja935eda782014-07-30 14:57:41 +05303118 * FUNCTION: WDA_JoinRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003119 * Trigger Init SCAN callback
3120 */
Sachin Ahuja935eda782014-07-30 14:57:41 +05303121void WDA_JoinRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07003122{
3123 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3124 tWDA_CbContext *pWDA;
3125 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003127 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003128 if(NULL == pWdaParams)
3129 {
3130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003131 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003132 VOS_ASSERT(0) ;
3133 return ;
3134 }
3135 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3136 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003137 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3138 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003139 /* reset macBSSID */
3140 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07003141 /* reset macSTASelf */
3142 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003143 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003144 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003145 return ;
3146}
Sachin Ahuja935eda782014-07-30 14:57:41 +05303147
3148/*
3149 * FUNCTION: WDA_JoinReqCallback
3150 * Free memory and send SWITCH CHANNEL RSP back to PE.
3151 * Invoked when Enter JOIN REQ failed in WDI and no RSP callback is generated.
3152 */
3153void WDA_JoinReqCallback(WDI_Status wdiStatus, void* pUserData)
3154{
3155 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3156 tWDA_CbContext *pWDA;
3157 tSwitchChannelParams *joinReqParam;
3158
3159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3160 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
3161
3162 if(NULL == pWdaParams)
3163 {
3164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3165 "%s: pWdaParams received NULL", __func__);
3166 VOS_ASSERT(0);
3167 return;
3168 }
3169
3170 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3171 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3172 joinReqParam->status = wdiStatus;
3173
3174 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3175 {
3176 /* reset macBSSID */
3177 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
3178 /* reset macSTASelf */
3179 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
3180
3181 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3182 vos_mem_free(pWdaParams);
3183 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
3184 }
3185
3186 return;
3187}
3188
Jeff Johnson295189b2012-06-20 16:38:30 -07003189/*
3190 * FUNCTION: WDA_ProcessJoinReq
3191 * Trigger Join REQ in WDI
3192 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003193VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
3194 tSwitchChannelParams* joinReqParam)
3195{
3196 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003197 WDI_JoinReqParamsType *wdiJoinReqParam =
3198 (WDI_JoinReqParamsType *)vos_mem_malloc(
3199 sizeof(WDI_JoinReqParamsType)) ;
3200 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003202 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003203 if(NULL == wdiJoinReqParam)
3204 {
3205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003206 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003207 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003208 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003209 return VOS_STATUS_E_NOMEM;
3210 }
3211 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3212 if(NULL == pWdaParams)
3213 {
3214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003215 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003216 VOS_ASSERT(0);
3217 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003218 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003219 return VOS_STATUS_E_NOMEM;
3220 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003221
3222 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
3223 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
3224 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
3225 {
3226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3227 "%s: received join request when BSSID or self-STA is NULL "
3228 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003229 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003230 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
3231 VOS_ASSERT(0);
3232 vos_mem_free(wdiJoinReqParam);
3233 vos_mem_free(pWdaParams);
3234 joinReqParam->status = eSIR_FAILURE ;
3235 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3236 return VOS_STATUS_E_INVAL;
3237 }
3238
Jeff Johnson295189b2012-06-20 16:38:30 -07003239 /* copy the BSSID for pWDA */
3240 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
3241 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003242 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
3243 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003244 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
3245 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07003246#ifdef WLAN_FEATURE_VOWIFI
3247 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
3248 joinReqParam->maxTxPower ;
3249#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003250 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
3251 joinReqParam->localPowerConstraint ;
3252#endif
3253 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
3254 joinReqParam->secondaryChannelOffset ;
3255 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
3256
Sachin Ahuja935eda782014-07-30 14:57:41 +05303257 wdiJoinReqParam->wdiReqStatusCB = WDA_JoinReqCallback;
3258 wdiJoinReqParam->pUserData = pWdaParams;
3259
Jeff Johnson295189b2012-06-20 16:38:30 -07003260 /* Store Init Req pointer, as this will be used for response */
3261 /* store Params pass it to WDI */
3262 pWdaParams->pWdaContext = pWDA;
3263 pWdaParams->wdaMsgParam = joinReqParam;
3264 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003265 status = WDI_JoinReq(wdiJoinReqParam,
Sachin Ahuja935eda782014-07-30 14:57:41 +05303266 (WDI_JoinRspCb )WDA_JoinRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003267 if(IS_WDI_STATUS_FAILURE(status))
3268 {
3269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3270 "Failure in Join WDI API, free all the memory " );
3271 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3272 vos_mem_free(pWdaParams) ;
3273 joinReqParam->status = eSIR_FAILURE ;
3274 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3275 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003276 return CONVERT_WDI2VOS_STATUS(status) ;
3277}
Jeff Johnson295189b2012-06-20 16:38:30 -07003278/*
3279 * FUNCTION: WDA_SwitchChannelReqCallback
3280 * send Switch channel RSP back to PE
3281 */
3282void WDA_SwitchChannelReqCallback(
3283 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
3284{
3285 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3286 tWDA_CbContext *pWDA;
3287 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003289 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003290 if(NULL == pWdaParams)
3291 {
3292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003293 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003294 VOS_ASSERT(0) ;
3295 return ;
3296 }
3297 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3298 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3299
3300#ifdef WLAN_FEATURE_VOWIFI
3301 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
3302#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003303 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3304 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003305 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003306 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003307 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003308 return ;
3309}
Jeff Johnson295189b2012-06-20 16:38:30 -07003310/*
3311 * FUNCTION: WDA_ProcessChannelSwitchReq
3312 * Request to WDI to switch channel REQ params.
3313 */
3314VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
3315 tSwitchChannelParams *pSwitchChanParams)
3316{
3317 WDI_Status status = WDI_STATUS_SUCCESS ;
3318 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
3319 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
3320 sizeof(WDI_SwitchChReqParamsType)) ;
3321 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003323 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003324 if(NULL == wdiSwitchChanParam)
3325 {
3326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003327 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003328 VOS_ASSERT(0);
3329 return VOS_STATUS_E_NOMEM;
3330 }
3331 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3332 if(NULL == pWdaParams)
3333 {
3334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003335 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003336 VOS_ASSERT(0);
3337 vos_mem_free(wdiSwitchChanParam);
3338 return VOS_STATUS_E_NOMEM;
3339 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003340 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
3341#ifndef WLAN_FEATURE_VOWIFI
3342 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3343 pSwitchChanParams->localPowerConstraint;
3344#endif
3345 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3346 pSwitchChanParams->secondaryChannelOffset;
3347 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003348 /* Store req pointer, as this will be used for response */
3349 /* store Params pass it to WDI */
3350 pWdaParams->pWdaContext = pWDA;
3351 pWdaParams->wdaMsgParam = pSwitchChanParams;
3352 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003353#ifdef WLAN_FEATURE_VOWIFI
3354 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
3355 = pSwitchChanParams->maxTxPower;
3356 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3357 pSwitchChanParams ->selfStaMacAddr,
3358 sizeof(tSirMacAddr));
3359#endif
3360 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3361 pSwitchChanParams->bssId,
3362 sizeof(tSirMacAddr));
3363
3364 status = WDI_SwitchChReq(wdiSwitchChanParam,
3365 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003366 if(IS_WDI_STATUS_FAILURE(status))
3367 {
3368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3369 "Failure in process channel switch Req WDI API, free all the memory " );
3370 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3371 vos_mem_free(pWdaParams) ;
3372 pSwitchChanParams->status = eSIR_FAILURE ;
3373 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
3374 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003375 return CONVERT_WDI2VOS_STATUS(status) ;
3376}
Kalikinkar dhara1e83b772014-02-06 12:59:22 -08003377
3378/*
3379 * FUNCTION: WDA_SwitchChannelReqCallback_V1
3380 * send Switch channel RSP back to PE
3381 */
3382void WDA_SwitchChannelReqCallback_V1(
3383 WDI_SwitchChRspParamsType_V1 *wdiSwitchChanRsp,
3384 void* pUserData)
3385{
3386 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3387 tWDA_CbContext *pWDA;
3388 tSwitchChannelParams *pSwitchChanParams;
3389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3390 "<------ %s " ,__func__);
3391
3392 if (NULL == pWdaParams)
3393 {
3394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3395 "%s: pWdaParams received NULL", __func__);
3396 VOS_ASSERT(0);
3397 return ;
3398 }
3399 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3400 pSwitchChanParams =
3401 (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3402 pSwitchChanParams->channelSwitchSrc =
3403 wdiSwitchChanRsp->channelSwitchSrc;
3404#ifdef WLAN_FEATURE_VOWIFI
3405 pSwitchChanParams->txMgmtPower =
3406 wdiSwitchChanRsp->ucTxMgmtPower;
3407#endif
3408 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3409 vos_mem_free(pWdaParams);
3410 pSwitchChanParams->status =
3411 wdiSwitchChanRsp->wdiStatus ;
3412 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3413 (void *)pSwitchChanParams , 0);
3414 return;
3415}
3416
3417/*
3418 * FUNCTION: WDA_ProcessChannelSwitchReq_V1
3419 * Request to WDI to switch channel REQ params.
3420 */
3421VOS_STATUS WDA_ProcessChannelSwitchReq_V1(tWDA_CbContext *pWDA,
3422 tSwitchChannelParams *pSwitchChanParams)
3423{
3424 WDI_Status status = WDI_STATUS_SUCCESS ;
3425 WDI_SwitchChReqParamsType_V1 *wdiSwitchChanParam =
3426 (WDI_SwitchChReqParamsType_V1 *)vos_mem_malloc(
3427 sizeof(WDI_SwitchChReqParamsType_V1)) ;
3428 tWDA_ReqParams *pWdaParams ;
3429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3430 "------> %s " ,__func__);
3431 if (NULL == wdiSwitchChanParam)
3432 {
3433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3434 "%s: VOS MEM Alloc Failure", __func__);
3435 VOS_ASSERT(0);
3436 return VOS_STATUS_E_NOMEM;
3437 }
3438 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3439 if (NULL == pWdaParams)
3440 {
3441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3442 "%s: VOS MEM Alloc Failure", __func__);
3443 VOS_ASSERT(0);
3444 vos_mem_free(wdiSwitchChanParam);
3445 return VOS_STATUS_E_NOMEM;
3446 }
3447 wdiSwitchChanParam->wdiChInfo.channelSwitchSrc =
3448 pSwitchChanParams->channelSwitchSrc;
3449
3450 wdiSwitchChanParam->wdiChInfo.ucChannel =
3451 pSwitchChanParams->channelNumber;
3452#ifndef WLAN_FEATURE_VOWIFI
3453 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3454 pSwitchChanParams->localPowerConstraint;
3455#endif
3456 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3457 pSwitchChanParams->secondaryChannelOffset;
3458 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
3459 /* Store req pointer, as this will be used for response */
3460 /* store Params pass it to WDI */
3461 pWdaParams->pWdaContext = pWDA;
3462 pWdaParams->wdaMsgParam = pSwitchChanParams;
3463 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
3464#ifdef WLAN_FEATURE_VOWIFI
3465 wdiSwitchChanParam->wdiChInfo.cMaxTxPower =
3466 pSwitchChanParams->maxTxPower;
3467 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3468 pSwitchChanParams ->selfStaMacAddr,
3469 sizeof(tSirMacAddr));
3470#endif
3471 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3472 pSwitchChanParams->bssId,
3473 sizeof(tSirMacAddr));
3474
3475 status = WDI_SwitchChReq_V1(wdiSwitchChanParam,
3476 (WDI_SwitchChRspCb_V1)WDA_SwitchChannelReqCallback_V1,
3477 pWdaParams);
3478 if (IS_WDI_STATUS_FAILURE(status))
3479 {
3480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3481 "Failure in process channel switch Req WDI "
3482 "API, free all the memory " );
3483 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3484 vos_mem_free(pWdaParams) ;
3485 pSwitchChanParams->status = eSIR_FAILURE ;
3486 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3487 (void *)pSwitchChanParams, 0) ;
3488 }
3489 return CONVERT_WDI2VOS_STATUS(status) ;
3490}
3491
Jeff Johnson295189b2012-06-20 16:38:30 -07003492/*
3493 * FUNCTION: WDA_ConfigBssReqCallback
3494 * config BSS Req Callback, called by WDI
3495 */
3496void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
3497 ,void* pUserData)
3498{
3499 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3500 tWDA_CbContext *pWDA;
3501 tAddBssParams *configBssReqParam;
3502 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003504 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003505 if(NULL == pWdaParams)
3506 {
3507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003508 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003509 VOS_ASSERT(0) ;
3510 return ;
3511 }
3512 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3513 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
3514 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003515 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003516 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003517 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
3518 {
3519 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
3520 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003521 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
3522 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
3523 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
3524
3525 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
3526 {
3527 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
3528 {
3529 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
3530 staConfigBssParam->staType = STA_ENTRY_BSSID;
3531 }
3532 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
3533 (staConfigBssParam->staType == STA_ENTRY_SELF))
3534 {
3535 /* This is the 1st add BSS Req for the BTAMP STA */
3536 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3537 staConfigBssParam->staType = STA_ENTRY_BSSID;
3538 }
3539 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3540 (staConfigBssParam->staType == STA_ENTRY_PEER))
3541 {
3542 /* This is the 2nd ADD BSS Request that is sent
3543 * on the BTAMP STA side. The Sta type is
3544 * set to STA_ENTRY_PEER here.*/
3545 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3546 }
3547 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3548 (staConfigBssParam->staType == STA_ENTRY_SELF))
3549 {
3550 /* statype is already set by PE.
3551 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
3552 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
3553 staConfigBssParam->staType = STA_ENTRY_BSSID;
3554 }
3555 else
3556 {
3557 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
3558 staConfigBssParam->staType = STA_ENTRY_PEER;
3559 }
3560 }
3561 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
3562 {
3563 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
3564 staConfigBssParam->staType = STA_ENTRY_SELF;
3565 }
3566 else
3567 {
3568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3569 "Invalid operation mode specified");
3570 VOS_ASSERT(0);
3571 }
3572
3573 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003574 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003575 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003576 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003577 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
3578 sizeof(tSirMacAddr));
3579 staConfigBssParam->txChannelWidthSet =
3580 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07003581 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
3582 staConfigBssParam->htCapable)
3583 {
3584 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
3585 wdiConfigBssRsp->ucBSSIdx;
3586 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
3587 WDA_VALID_STA_INDEX ;
Abhishek Singh0644e482014-10-06 18:38:23 +05303588 pWDA->wdaStaInfo[staConfigBssParam->staIdx].currentOperChan =
3589 configBssReqParam->currentOperChannel;
Jeff Johnson295189b2012-06-20 16:38:30 -07003590 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003591 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
3592 wdiConfigBssRsp->ucBSSIdx,
3593 wdiConfigBssRsp->ucSTAIdx))
3594 {
3595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003596 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003597 VOS_ASSERT(0) ;
3598 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003599 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
3600 {
3601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003602 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003603 VOS_ASSERT(0) ;
3604 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003605#ifdef WLAN_FEATURE_VOWIFI
3606 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
3607#endif
3608 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05303609 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
3610 sizeof(WDI_ConfigBSSReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07003611 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3612 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003613 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003614 return ;
3615}
Jeff Johnson295189b2012-06-20 16:38:30 -07003616/*
3617 * FUNCTION: WDA_UpdateEdcaParamsForAC
3618 * Update WDI EDCA params with PE edca params
3619 */
3620void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
3621 WDI_EdcaParamRecord *wdiEdcaParam,
3622 tSirMacEdcaParamRecord *macEdcaParam)
3623{
3624 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
3625 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
3626 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
3627 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
3628 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
3629 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
3630}
Jeff Johnson295189b2012-06-20 16:38:30 -07003631/*
3632 * FUNCTION: WDA_ProcessConfigBssReq
3633 * Configure BSS before starting Assoc with AP
3634 */
3635VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
3636 tAddBssParams* configBssReqParam)
3637{
3638 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303639 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003640 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003642 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303643 if (NULL == configBssReqParam)
3644 {
3645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3646 "%s: configBssReqParam is NULL", __func__);
3647 return VOS_STATUS_E_INVAL;
3648 }
3649
3650 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
3651 sizeof(WDI_ConfigBSSReqParamsType)) ;
3652
Jeff Johnson295189b2012-06-20 16:38:30 -07003653 if(NULL == wdiConfigBssReqParam)
3654 {
3655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003656 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003657 VOS_ASSERT(0);
3658 return VOS_STATUS_E_NOMEM;
3659 }
3660 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3661 if(NULL == pWdaParams)
3662 {
3663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003664 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003665 VOS_ASSERT(0);
3666 vos_mem_free(wdiConfigBssReqParam);
3667 return VOS_STATUS_E_NOMEM;
3668 }
Kiran4a17ebe2013-01-31 10:43:43 -08003669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3670 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07003671 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003672 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
3673 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003674 /* Store Init Req pointer, as this will be used for response */
3675 /* store Params pass it to WDI */
3676 pWdaParams->pWdaContext = pWDA;
3677 pWdaParams->wdaMsgParam = configBssReqParam;
3678 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003679 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
3680 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003681 if(IS_WDI_STATUS_FAILURE(status))
3682 {
3683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3684 "Failure in Config BSS WDI API, free all the memory " );
3685 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3686 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003687 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003688 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
3689 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003690 return CONVERT_WDI2VOS_STATUS(status) ;
3691}
Jeff Johnson295189b2012-06-20 16:38:30 -07003692#ifdef ENABLE_HAL_COMBINED_MESSAGES
3693/*
3694 * FUNCTION: WDA_PostAssocReqCallback
3695 * Post ASSOC req callback, send RSP back to PE
3696 */
3697void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
3698 void* pUserData)
3699{
3700 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3701 tPostAssocParams *postAssocReqParam =
3702 (tPostAssocParams *)pWDA->wdaMsgParam ;
3703 /*STA context within the BSS Params*/
3704 tAddStaParams *staPostAssocParam =
3705 &postAssocReqParam->addBssParams.staContext ;
3706 /*STA Params for self STA*/
3707 tAddStaParams *selfStaPostAssocParam =
3708 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003710 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003711 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003712 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003713 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
3714 {
3715 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
3716 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
3717 sizeof(tSirMacAddr)) ;
3718 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
3719 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
3720 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003721 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
3722 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05303723 vos_mem_zero(pWDA->wdaWdiApiMsgParam, sizeof(WDI_PostAssocReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07003724 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3725 pWDA->wdaWdiApiMsgParam = NULL;
3726 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003727 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003728 return ;
3729}
Jeff Johnson295189b2012-06-20 16:38:30 -07003730/*
3731 * FUNCTION: WDA_ProcessPostAssocReq
3732 * Trigger POST ASSOC processing in WDI
3733 */
3734VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
3735 tPostAssocParams *postAssocReqParam)
3736{
Jeff Johnson295189b2012-06-20 16:38:30 -07003737 WDI_Status status = WDI_STATUS_SUCCESS ;
3738
3739 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
3740 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
3741 sizeof(WDI_PostAssocReqParamsType)) ;
3742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003743 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003744
Jeff Johnson295189b2012-06-20 16:38:30 -07003745 if(NULL == wdiPostAssocReqParam)
3746 {
3747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003748 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003749 VOS_ASSERT(0);
3750 return VOS_STATUS_E_NOMEM;
3751 }
3752
3753 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
3754 {
3755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003756 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003757 VOS_ASSERT(0);
3758 return VOS_STATUS_E_FAILURE;
3759 }
3760
Jeff Johnson295189b2012-06-20 16:38:30 -07003761 /* update BSS params into WDI structure */
3762 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3763 &postAssocReqParam->addBssParams) ;
3764 /* update STA params into WDI structure */
3765 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3766 &postAssocReqParam->addStaParams) ;
3767
3768 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3769 postAssocReqParam->addBssParams.highPerformance;
3770 WDA_UpdateEdcaParamsForAC(pWDA,
3771 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3772 &postAssocReqParam->addBssParams.acbe);
3773 WDA_UpdateEdcaParamsForAC(pWDA,
3774 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3775 &postAssocReqParam->addBssParams.acbk);
3776 WDA_UpdateEdcaParamsForAC(pWDA,
3777 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3778 &postAssocReqParam->addBssParams.acvi);
3779 WDA_UpdateEdcaParamsForAC(pWDA,
3780 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3781 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003782 /* Store Init Req pointer, as this will be used for response */
3783 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003784 /* store Params pass it to WDI */
3785 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003786 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3787 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003788 if(IS_WDI_STATUS_FAILURE(status))
3789 {
3790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3791 "Failure in Post Assoc WDI API, free all the memory " );
3792 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3793 pWDA->wdaWdiApiMsgParam = NULL;
3794 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003795 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003796 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3797 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003798 return CONVERT_WDI2VOS_STATUS(status) ;
3799}
3800#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003801/*
3802 * FUNCTION: WDA_AddStaReqCallback
3803 * ADD STA req callback, send RSP back to PE
3804 */
3805void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3806 void* pUserData)
3807{
3808 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3809 tWDA_CbContext *pWDA;
3810 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003812 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003813 if(NULL == pWdaParams)
3814 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003816 VOS_ASSERT(0) ;
3817 return ;
3818 }
3819 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3820 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003821 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003822 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003823 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3824 {
3825 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3826 /*TODO: UMAC structure doesn't have these fields*/
3827 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3828 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3829 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3830 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3831 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3832 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003833#ifdef FEATURE_WLAN_TDLS
3834 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3835 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3836#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003837 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003838#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003839 {
3840 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3841 wdiConfigStaRsp->ucBssIdx;
3842 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3843 WDA_VALID_STA_INDEX ;
Abhishek Singhf08a82b2014-10-07 11:00:42 +05303844 pWDA->wdaStaInfo[addStaReqParam->staIdx].currentOperChan =
3845 addStaReqParam->currentOperChan;
Jeff Johnson295189b2012-06-20 16:38:30 -07003846 }
3847 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3848 {
3849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003850 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003851 VOS_ASSERT(0) ;
3852 return ;
3853 }
3854 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003855 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3856 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003857 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003858 return ;
3859}
Jeff Johnson295189b2012-06-20 16:38:30 -07003860/*
3861 * FUNCTION: WDA_ConfigStaReq
3862 * Trigger Config STA processing in WDI
3863 */
3864VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3865 tAddStaParams *addStaReqParam)
3866{
Jeff Johnson295189b2012-06-20 16:38:30 -07003867 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003868 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3869 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3870 sizeof(WDI_ConfigSTAReqParamsType)) ;
3871 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003873 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003874 if(NULL == wdiConfigStaReqParam)
3875 {
3876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003877 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003878 VOS_ASSERT(0);
3879 return VOS_STATUS_E_NOMEM;
3880 }
3881 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3882 if(NULL == pWdaParams)
3883 {
3884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003885 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003886 VOS_ASSERT(0);
3887 vos_mem_free(wdiConfigStaReqParam);
3888 return VOS_STATUS_E_NOMEM;
3889 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003890 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003891 /* update STA params into WDI structure */
3892 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3893 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003894 /* Store Init Req pointer, as this will be used for response */
3895 /* store Params pass it to WDI */
3896 pWdaParams->pWdaContext = pWDA;
3897 pWdaParams->wdaMsgParam = addStaReqParam;
3898 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003899 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3900 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003901 if(IS_WDI_STATUS_FAILURE(status))
3902 {
3903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3904 "Failure in Config STA WDI API, free all the memory " );
3905 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3906 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003907 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003908 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3909 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003910 return CONVERT_WDI2VOS_STATUS(status) ;
3911}
Jeff Johnson295189b2012-06-20 16:38:30 -07003912/*
3913 * FUNCTION: WDA_DelBSSReqCallback
3914 * Dens DEL BSS RSP back to PE
3915 */
3916void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3917 void* pUserData)
3918{
3919 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3920 tWDA_CbContext *pWDA;
3921 tDeleteBssParams *delBssReqParam;
3922 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003924 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003925 if(NULL == pWdaParams)
3926 {
3927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003928 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003929 VOS_ASSERT(0) ;
3930 return ;
3931 }
3932 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3933 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003934 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003935 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3936 {
3937 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3938 sizeof(tSirMacAddr)) ;
3939 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003940 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3941 {
3942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003943 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003944 VOS_ASSERT(0) ;
3945 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003946 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3947 {
3948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003949 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003950 VOS_ASSERT(0) ;
3951 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003952 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3953 {
3954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003955 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003956 VOS_ASSERT(0) ;
3957 }
Mihir Shete2ab1d492014-06-04 14:21:05 +05303958
3959 WLANTL_StartForwarding(staIdx,0,0);
3960
Jeff Johnson295189b2012-06-20 16:38:30 -07003961 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3962 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003963 /* reset the the system role*/
3964 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3965
3966 /* Reset the BA related information */
3967 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3968 {
3969 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3970 {
3971 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3972 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05303973 pWDA->wdaStaInfo[staIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003974 /* Reset framesTxed counters here */
3975 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3976 {
3977 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3978 }
3979 }
3980 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003981 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003982 return ;
3983}
3984
Jeff Johnson295189b2012-06-20 16:38:30 -07003985/*
3986 * FUNCTION: WDA_ProcessDelBssReq
3987 * Init DEL BSS req with WDI
3988 */
3989VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3990 tDeleteBssParams *delBssParam)
3991{
3992 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003993 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3994 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3995 sizeof(WDI_DelBSSReqParamsType)) ;
3996 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003998 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003999 if(NULL == wdiDelBssReqParam)
4000 {
4001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004002 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004003 VOS_ASSERT(0);
4004 return VOS_STATUS_E_NOMEM;
4005 }
4006 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4007 if(NULL == pWdaParams)
4008 {
4009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004010 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004011 VOS_ASSERT(0);
4012 vos_mem_free(wdiDelBssReqParam);
4013 return VOS_STATUS_E_NOMEM;
4014 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004015 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
4016 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
4017
4018 /* Store Init Req pointer, as this will be used for response */
4019 /* store Params pass it to WDI */
4020 pWdaParams->pWdaContext = pWDA;
4021 pWdaParams->wdaMsgParam = delBssParam;
4022 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004023 status = WDI_DelBSSReq(wdiDelBssReqParam,
4024 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004025 if(IS_WDI_STATUS_FAILURE(status))
4026 {
4027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4028 "Failure in Del BSS WDI API, free all the memory " );
4029 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4030 vos_mem_free(pWdaParams) ;
4031 delBssParam->status = eSIR_FAILURE ;
4032 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
4033 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004034 return CONVERT_WDI2VOS_STATUS(status) ;
4035}
Jeff Johnson295189b2012-06-20 16:38:30 -07004036/*
4037 * FUNCTION: WDA_DelSTAReqCallback
4038 * Dens DEL STA RSP back to PE
4039 */
4040void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
4041 void* pUserData)
4042{
4043 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4044 tWDA_CbContext *pWDA;
4045 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004047 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004048 if(NULL == pWdaParams)
4049 {
4050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004051 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004052 VOS_ASSERT(0) ;
4053 return ;
4054 }
4055 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4056 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004057 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004058 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
4059 {
4060 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
4061 {
4062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004063 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004064 VOS_ASSERT(0) ;
4065 }
4066 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
Mihir Shete2ab1d492014-06-04 14:21:05 +05304067 WLANTL_StartForwarding(delStaReqParam->staIdx,0,0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004068 }
4069 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4070 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004071 /*Reset the BA information corresponding to this STAIdx */
4072 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
4073 WDA_INVALID_STA_INDEX;
4074 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304075 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004076 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004077 return ;
4078}
Jeff Johnson295189b2012-06-20 16:38:30 -07004079/*
4080 * FUNCTION: WDA_ProcessDelStaReq
4081 * Init DEL STA req with WDI
4082 */
4083VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
4084 tDeleteStaParams *delStaParam)
4085{
4086 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004087 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
4088 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
4089 sizeof(WDI_DelSTAReqParamsType)) ;
4090 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004092 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004093 if(NULL == wdiDelStaReqParam)
4094 {
4095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004096 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004097 VOS_ASSERT(0);
4098 return VOS_STATUS_E_NOMEM;
4099 }
4100 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4101 if(NULL == pWdaParams)
4102 {
4103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004104 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004105 VOS_ASSERT(0);
4106 vos_mem_free(wdiDelStaReqParam);
4107 return VOS_STATUS_E_NOMEM;
4108 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004109 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
4110 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004111 /* Store Init Req pointer, as this will be used for response */
4112 /* store Params pass it to WDI */
4113 pWdaParams->pWdaContext = pWDA;
4114 pWdaParams->wdaMsgParam = delStaParam;
4115 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004116 status = WDI_DelSTAReq(wdiDelStaReqParam,
4117 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004118 if(IS_WDI_STATUS_FAILURE(status))
4119 {
4120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4121 "Failure in Del STA WDI API, free all the memory status = %d",
4122 status );
4123 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4124 vos_mem_free(pWdaParams) ;
4125 delStaParam->status = eSIR_FAILURE ;
4126 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
4127 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004128 return CONVERT_WDI2VOS_STATUS(status) ;
4129}
Jeff Johnson295189b2012-06-20 16:38:30 -07004130void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
4131{
4132 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4133 tWDA_CbContext *pWDA;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304134 tAddStaSelfParams *pAddStaSelfRsp = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004136 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004137 if(NULL == pWdaParams)
4138 {
4139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004140 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004141 VOS_ASSERT(0) ;
4142 return ;
4143 }
4144 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4145 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004146 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4147 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004148 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
4149 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
4150 pwdiAddSTASelfRsp->macSelfSta,
4151 sizeof(pAddStaSelfRsp->selfMacAddr));
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304152 pWDA->wdaAddSelfStaParams.ucSTASelfIdx = pwdiAddSTASelfRsp->ucSTASelfIdx;
4153 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaRspCounter++;
4154 if (pAddStaSelfRsp->status == eSIR_FAILURE)
4155 {
4156 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_RSP_WDI_FAIL;
4157 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
4158 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004159 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004160 return ;
4161}
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304162
Jeff Johnson295189b2012-06-20 16:38:30 -07004163/*
4164 * FUNCTION: WDA_ProcessAddStaSelfReq
4165 *
4166 */
4167VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
4168{
4169 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004170 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004171 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
4172 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
4173 sizeof(WDI_AddSTASelfReqParamsType)) ;
4174 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004176 "------> %s " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304177 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaReqCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004178 if( NULL == wdiAddStaSelfReq )
4179 {
4180 VOS_ASSERT( 0 );
4181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004182 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304183 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4184 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004185 return( VOS_STATUS_E_NOMEM );
4186 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004187 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004188 if( NULL == pWdaParams )
4189 {
4190 VOS_ASSERT( 0 );
4191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004192 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304193 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4194 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004195 vos_mem_free(wdiAddStaSelfReq) ;
4196 return( VOS_STATUS_E_NOMEM );
4197 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004198 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004199 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07004200 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004201 /* Store Init Req pointer, as this will be used for response */
4202 /* store Params pass it to WDI */
4203 pWdaParams->pWdaContext = pWDA;
4204 pWdaParams->wdaMsgParam = pAddStaSelfReq;
4205 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07004206 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004207
Jeff Johnson43971f52012-07-17 12:26:56 -07004208 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004209 {
4210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4211 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07004212 wstatus );
4213 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004214 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4215 vos_mem_free(pWdaParams) ;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304216 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_WDI_FAIL;
4217 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004218 pAddStaSelfReq->status = eSIR_FAILURE ;
4219 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
4220 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004221 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004222}
Jeff Johnson295189b2012-06-20 16:38:30 -07004223/*
4224 * FUNCTION: WDA_DelSTASelfRespCallback
4225 *
4226 */
4227void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
4228 wdiDelStaSelfRspParams , void* pUserData)
4229{
4230 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4231 tWDA_CbContext *pWDA;
4232 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004234 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004235 if (NULL == pWdaParams)
4236 {
4237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004238 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004239 VOS_ASSERT(0);
4240 return;
4241 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004242 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4243 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004244 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004245 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004246
4247 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4248 vos_mem_free(pWdaParams) ;
4249
4250 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004251 return ;
4252}
Jeff Johnson295189b2012-06-20 16:38:30 -07004253/*
4254 * FUNCTION: WDA_DelSTASelfReqCallback
4255 *
4256 */
4257void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
4258 void* pUserData)
4259{
4260 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4261 tWDA_CbContext *pWDA;
4262 tDelStaSelfParams *delStaSelfParams;
4263
4264 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05304265 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004266 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004267
4268 if (NULL == pWdaParams)
4269 {
4270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004271 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004272 VOS_ASSERT(0);
4273 return;
4274 }
4275
4276 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4277 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
4278
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004279 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004280
4281 if(IS_WDI_STATUS_FAILURE(wdiStatus))
4282 {
4283 VOS_ASSERT(0);
4284 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4285 vos_mem_free(pWdaParams) ;
4286 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
4287 }
4288
4289 return ;
4290}
4291
4292/*
4293 * FUNCTION: WDA_DelSTASelfReq
4294 * Trigger Config STA processing in WDI
4295 */
4296VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
4297 tDelStaSelfParams* pDelStaSelfReqParam)
4298{
4299 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004300 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004301 tWDA_ReqParams *pWdaParams = NULL;
4302 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
4303 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
4304 sizeof(WDI_DelSTASelfReqParamsType)) ;
4305
Jeff Johnson295189b2012-06-20 16:38:30 -07004306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004307 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004308 if( NULL == wdiDelStaSelfReq )
4309 {
4310 VOS_ASSERT( 0 );
4311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004312 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004313 return( VOS_STATUS_E_NOMEM );
4314 }
4315
4316 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4317 if( NULL == pWdaParams )
4318 {
4319 VOS_ASSERT( 0 );
4320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004321 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004322 vos_mem_free(wdiDelStaSelfReq) ;
4323 return( VOS_STATUS_E_NOMEM );
4324 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004325 pWdaParams->pWdaContext = pWDA;
4326 /* Store param pointer as passed in by caller */
4327 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
4328 /* store Params pass it to WDI */
4329 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07004330 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
4331 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
4332
4333 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
4334 wdiDelStaSelfReq->pUserData = pWdaParams;
4335
Jeff Johnson43971f52012-07-17 12:26:56 -07004336 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07004337 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
4338
Jeff Johnson43971f52012-07-17 12:26:56 -07004339 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004340 {
4341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
4342 "Failure in Del Sta Self REQ WDI API, free all the memory " );
4343 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07004344 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004345 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4346 vos_mem_free(pWdaParams) ;
4347 pDelStaSelfReqParam->status = eSIR_FAILURE ;
4348 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
4349 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004350 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004351}
4352
Jeff Johnson295189b2012-06-20 16:38:30 -07004353/*
4354 * FUNCTION: WDA_SendMsg
4355 * Send Message back to PE
4356 */
4357void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
4358 void *pBodyptr, tANI_U32 bodyVal)
4359{
4360 tSirMsgQ msg = {0} ;
4361 tANI_U32 status = VOS_STATUS_SUCCESS ;
4362 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07004363 msg.type = msgType;
4364 msg.bodyval = bodyVal;
4365 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07004366 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07004367 if (VOS_STATUS_SUCCESS != status)
4368 {
4369 if(NULL != pBodyptr)
4370 {
4371 vos_mem_free(pBodyptr);
4372 }
4373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004374 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004375 VOS_ASSERT(0) ;
4376 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004377 return ;
4378}
Jeff Johnson295189b2012-06-20 16:38:30 -07004379/*
4380 * FUNCTION: WDA_UpdateBSSParams
4381 * Translated WDA/PE BSS info into WDI BSS info..
4382 */
4383void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
4384 WDI_ConfigBSSReqInfoType *wdiBssParams,
4385 tAddBssParams *wdaBssParams)
4386{
4387 v_U8_t keyIndex = 0;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304388 v_U8_t i = 0;
4389
Jeff Johnson295189b2012-06-20 16:38:30 -07004390 /* copy bssReq Params to WDI structure */
4391 vos_mem_copy(wdiBssParams->macBSSID,
4392 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
4393 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
4394 sizeof(tSirMacAddr)) ;
4395 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
4396 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
4397 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004398 wdiBssParams->ucShortSlotTimeSupported =
4399 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004400 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
4401 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
4402 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
4403 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
4404 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
4405
4406 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
4407 wdiBssParams->ucTXOPProtectionFullSupport =
4408 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004409 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
4410 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004411 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004412 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
4413 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
4414 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
4415 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
4416
Chet Lanctot186b5732013-03-18 10:26:30 -07004417 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
4418
Jeff Johnson295189b2012-06-20 16:38:30 -07004419 /* copy SSID into WDI structure */
4420 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
4421 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
4422 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004423 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
4424 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004425 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07004426#ifdef WLAN_FEATURE_VOWIFI
4427 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
4428#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004429 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07004430 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07004431#ifdef WLAN_FEATURE_VOWIFI_11R
4432 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004433 if(wdiBssParams->bExtSetStaKeyParamValid)
4434 {
4435 /* copy set STA key params to WDI structure */
4436 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
4437 wdaBssParams->extSetStaKeyParam.staIdx;
4438 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
4439 wdaBssParams->extSetStaKeyParam.encType;
4440 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
4441 wdaBssParams->extSetStaKeyParam.wepType;
4442 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
4443 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004444 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
4445 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004446 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004447 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
4448 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4449 {
4450 WDA_GetWepKeysFromCfg( pWDA,
4451 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
4452 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
4453 wdiBssParams->wdiExtSetKeyParam.wdiKey );
4454 }
4455 else
4456 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004457 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4458 keyIndex++)
4459 {
4460 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
4461 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
4462 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
4463 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
4464 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
4465 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304466
4467 if(WDA_getHostWlanFeatCaps(DISA) && WDA_getFwWlanFeatCaps(DISA))
4468 {
4469 for (i = 0; i < WLAN_MAX_KEY_RSC_LEN; i ++)
4470 {
4471 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc[i] =
4472 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc[i]);
4473 }
4474
4475 for (i = 0; i < SIR_MAC_MAX_KEY_LENGTH; i++)
4476 {
4477 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key[i] =
4478 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].key[i]);
4479 }
4480 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4481 FL("%s: Negated Keys"), __func__);
4482 }
4483 else
4484 {
4485 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4486 FL("%s: No change in Keys "), __func__);
4487 vos_mem_copy(
4488 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
4489 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc,
4490 WLAN_MAX_KEY_RSC_LEN);
4491 vos_mem_copy(
4492 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
4493 wdaBssParams->extSetStaKeyParam.key[keyIndex].key,
4494 SIR_MAC_MAX_KEY_LENGTH);
4495 }
4496
Jeff Johnson295189b2012-06-20 16:38:30 -07004497 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
4498 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
4499 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
4500 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07004501 }
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304502 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
Jeff Johnson295189b2012-06-20 16:38:30 -07004503 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004504 }
4505 }
4506 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
4507 }
4508 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
4509 {
4510 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
4511 sizeof(wdaBssParams->extSetStaKeyParam) );
4512 }
4513#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07004514#ifdef WLAN_FEATURE_11AC
4515 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
4516 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
4517#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004518
4519 return ;
4520}
Jeff Johnson295189b2012-06-20 16:38:30 -07004521/*
4522 * FUNCTION: WDA_UpdateSTAParams
4523 * Translated WDA/PE BSS info into WDI BSS info..
4524 */
4525void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
4526 WDI_ConfigStaReqInfoType *wdiStaParams,
4527 tAddStaParams *wdaStaParams)
4528{
4529 tANI_U8 i = 0;
4530 /* Update STA params */
4531 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
4532 sizeof(tSirMacAddr)) ;
4533 wdiStaParams->usAssocId = wdaStaParams->assocId;
4534 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07004535 wdiStaParams->staIdx = wdaStaParams->staIdx;
4536
Jeff Johnson295189b2012-06-20 16:38:30 -07004537 wdiStaParams->ucShortPreambleSupported =
4538 wdaStaParams->shortPreambleSupported;
4539 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
4540 sizeof(tSirMacAddr)) ;
4541 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
4542
4543 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
4544
4545 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
4546 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
4547 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
4548 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
4549 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
4550 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
4551 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
4552
4553 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
4554 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07004555 wdiStaParams->wdiSupportedRates.opRateMode =
4556 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004557 for(i = 0;i < WDI_NUM_11B_RATES;i++)
4558 {
4559 wdiStaParams->wdiSupportedRates.llbRates[i] =
4560 wdaStaParams->supportedRates.llbRates[i];
4561 }
4562 for(i = 0;i < WDI_NUM_11A_RATES;i++)
4563 {
4564 wdiStaParams->wdiSupportedRates.llaRates[i] =
4565 wdaStaParams->supportedRates.llaRates[i];
4566 }
4567 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
4568 {
4569 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
4570 wdaStaParams->supportedRates.aniLegacyRates[i];
4571 }
4572 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
4573 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07004574#ifdef WLAN_FEATURE_11AC
4575 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
4576 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
4577 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
4578 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
4579#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004580 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
4581 {
4582 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
4583 wdaStaParams->supportedRates.supportedMCSSet[i];
4584 }
4585 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
4586 wdaStaParams->supportedRates.rxHighestDataRate;
4587
4588 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
4589
4590 wdiStaParams->wdiAction = wdaStaParams->updateSta;
4591
4592 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
4593 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
4594 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
4595
4596 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
4597 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
4598 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
4599 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07004600 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07004601#ifdef WLAN_FEATURE_11AC
4602 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
4603 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08004604 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Abhishek Singh6927fa02014-06-27 17:19:55 +05304605 wdiStaParams->vhtTxMUBformeeCapable = wdaStaParams->vhtTxMUBformeeCapable;
4606 /* When MU vhtTxMUBformeeCapable is set, SU ucVhtTxBFEnabled
4607 * must be set by default */
4608 if ( wdiStaParams->vhtTxMUBformeeCapable )
4609 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxMUBformeeCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07004610#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08004611 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
4612 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07004613 return ;
4614}
Jeff Johnson295189b2012-06-20 16:38:30 -07004615/*
4616 * -------------------------------------------------------------------------
4617 * CFG update to WDI
4618 * -------------------------------------------------------------------------
4619 */
4620
4621 /*
4622 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
4623 * Convert the WNI CFG ID to HAL CFG ID
4624 */
Jeff Johnsone7245742012-09-05 17:12:55 -07004625static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07004626{
4627 switch(wniCfgId)
4628 {
4629 case WNI_CFG_STA_ID:
4630 return QWLAN_HAL_CFG_STA_ID;
4631 case WNI_CFG_CURRENT_TX_ANTENNA:
4632 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
4633 case WNI_CFG_CURRENT_RX_ANTENNA:
4634 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
4635 case WNI_CFG_LOW_GAIN_OVERRIDE:
4636 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
4637 case WNI_CFG_POWER_STATE_PER_CHAIN:
4638 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
4639 case WNI_CFG_CAL_PERIOD:
4640 return QWLAN_HAL_CFG_CAL_PERIOD;
4641 case WNI_CFG_CAL_CONTROL:
4642 return QWLAN_HAL_CFG_CAL_CONTROL;
4643 case WNI_CFG_PROXIMITY:
4644 return QWLAN_HAL_CFG_PROXIMITY;
4645 case WNI_CFG_NETWORK_DENSITY:
4646 return QWLAN_HAL_CFG_NETWORK_DENSITY;
4647 case WNI_CFG_MAX_MEDIUM_TIME:
4648 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
4649 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
4650 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
4651 case WNI_CFG_RTS_THRESHOLD:
4652 return QWLAN_HAL_CFG_RTS_THRESHOLD;
4653 case WNI_CFG_SHORT_RETRY_LIMIT:
4654 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
4655 case WNI_CFG_LONG_RETRY_LIMIT:
4656 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
4657 case WNI_CFG_FRAGMENTATION_THRESHOLD:
4658 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
4659 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
4660 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
4661 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
4662 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
4663 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
4664 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
4665 case WNI_CFG_FIXED_RATE:
4666 return QWLAN_HAL_CFG_FIXED_RATE;
4667 case WNI_CFG_RETRYRATE_POLICY:
4668 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
4669 case WNI_CFG_RETRYRATE_SECONDARY:
4670 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
4671 case WNI_CFG_RETRYRATE_TERTIARY:
4672 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
4673 case WNI_CFG_FORCE_POLICY_PROTECTION:
4674 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
4675 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
4676 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
4677 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
4678 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
4679 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
4680 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
4681 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
4682 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
4683 case WNI_CFG_MAX_BA_SESSIONS:
4684 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
4685 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
4686 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
4687 case WNI_CFG_PS_ENABLE_BCN_FILTER:
4688 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
4689 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
4690 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
4691 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
4692 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
4693 case WNI_CFG_STATS_PERIOD:
4694 return QWLAN_HAL_CFG_STATS_PERIOD;
4695 case WNI_CFG_CFP_MAX_DURATION:
4696 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
4697#if 0 /*This is not part of CFG*/
4698 case WNI_CFG_FRAME_TRANS_ENABLED:
4699 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
4700#endif
4701 case WNI_CFG_DTIM_PERIOD:
4702 return QWLAN_HAL_CFG_DTIM_PERIOD;
4703 case WNI_CFG_EDCA_WME_ACBK:
4704 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
4705 case WNI_CFG_EDCA_WME_ACBE:
4706 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
4707 case WNI_CFG_EDCA_WME_ACVI:
4708 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
4709 case WNI_CFG_EDCA_WME_ACVO:
4710 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
4711#if 0
4712 case WNI_CFG_TELE_BCN_WAKEUP_EN:
4713 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
4714 case WNI_CFG_TELE_BCN_TRANS_LI:
4715 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
4716 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
4717 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
4718 case WNI_CFG_TELE_BCN_MAX_LI:
4719 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
4720 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
4721 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
4722#endif
4723 case WNI_CFG_ENABLE_CLOSE_LOOP:
4724 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08004725 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
4726 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
Jeff Johnson295189b2012-06-20 16:38:30 -07004727 default:
4728 {
4729 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004730 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07004731 wniCfgId);
4732 return VOS_STATUS_E_INVAL;
4733 }
4734 }
4735}
Jeff Johnson295189b2012-06-20 16:38:30 -07004736/*
4737 * FUNCTION: WDA_UpdateCfgCallback
4738 *
4739 */
4740void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
4741{
4742 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4743 WDI_UpdateCfgReqParamsType *wdiCfgParam =
4744 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004746 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004747 /*
4748 * currently there is no response message is expected between PE and
4749 * WDA, Failure return from WDI is a ASSERT condition
4750 */
4751 if(WDI_STATUS_SUCCESS != wdiStatus)
4752 {
4753 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004754 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07004755 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
4756 }
4757
4758 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
4759 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4760 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004761 return ;
4762}
Jeff Johnson295189b2012-06-20 16:38:30 -07004763/*
4764 * FUNCTION: WDA_UpdateCfg
4765 *
4766 */
4767VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
4768{
4769
4770 WDI_Status status = WDI_STATUS_SUCCESS ;
4771 tANI_U32 val =0;
4772 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
4773 tHalCfg *configData;
4774 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
4775 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07004776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004777 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004778 if (NULL == pMac )
4779 {
4780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004781 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004782 return VOS_STATUS_E_FAILURE;
4783 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004784 if(WDA_START_STATE != pWDA->wdaState)
4785 {
4786 return VOS_STATUS_E_FAILURE;
4787 }
4788
4789 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
4790 {
4791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004792 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004793 VOS_ASSERT(0);
4794 return VOS_STATUS_E_FAILURE;
4795 }
4796
4797 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
4798 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004799 if(NULL == wdiCfgReqParam)
4800 {
4801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004802 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004803 VOS_ASSERT(0);
4804 return VOS_STATUS_E_NOMEM;
4805 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004806 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
4807 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004808 if(NULL == wdiCfgReqParam->pConfigBuffer)
4809 {
4810 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004811 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004812 vos_mem_free(wdiCfgReqParam);
4813 VOS_ASSERT(0);
4814 return VOS_STATUS_E_NOMEM;
4815 }
4816
4817 /*convert the WNI CFG Id to HAL CFG Id*/
4818 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4819 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4820
4821 /*TODO: revisit this for handling string parameters */
4822 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4823 &val) != eSIR_SUCCESS)
4824 {
4825 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004826 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07004827 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4828 vos_mem_free(wdiCfgReqParam);
4829 return eSIR_FAILURE;
4830 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004831 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4832 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4833 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4834 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4835 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4836
4837 /* store Params pass it to WDI */
4838 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004839#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4840 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4841 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004842 if(IS_WDI_STATUS_FAILURE(status))
4843 {
4844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4845 "Failure in Update CFG WDI API, free all the memory " );
4846 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4847 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4848 pWDA->wdaWdiCfgApiMsgParam = NULL;
4849 /* Failure is not expected */
4850 VOS_ASSERT(0) ;
4851 }
4852#else
4853 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4854 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4855 pWDA->wdaWdiCfgApiMsgParam = NULL;
4856#endif
4857 return CONVERT_WDI2VOS_STATUS(status) ;
4858}
4859
Jeff Johnson295189b2012-06-20 16:38:30 -07004860VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4861 v_U8_t *pDefaultKeyId,
4862 v_U8_t *pNumKeys,
4863 WDI_KeysType *pWdiKeys )
4864{
4865 v_U32_t i, j, defKeyId = 0;
4866 v_U32_t val = SIR_MAC_KEY_LENGTH;
4867 VOS_STATUS status = WDI_STATUS_SUCCESS;
4868 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004869 if (NULL == pMac )
4870 {
4871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004872 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004873 return VOS_STATUS_E_FAILURE;
4874 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004875 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4876 &defKeyId ))
4877 {
4878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4879 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4880 }
4881
4882 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004883 /* Need to extract ALL of the configured WEP Keys */
4884 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4885 {
4886 val = SIR_MAC_KEY_LENGTH;
4887 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4888 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4889 pWdiKeys[j].key,
4890 &val ))
4891 {
4892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004893 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07004894 }
4895 else
4896 {
4897 pWdiKeys[j].keyId = (tANI_U8) i;
4898 /*
4899 * Actually, a DC (Don't Care) because
4900 * this is determined (and set) by PE/MLME
4901 */
4902 pWdiKeys[j].unicast = 0;
4903 /*
4904 * Another DC (Don't Care)
4905 */
4906 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4907 /* Another DC (Don't Care). Unused for WEP */
4908 pWdiKeys[j].paeRole = 0;
4909 /* Determined from wlan_cfgGetStr() above.*/
4910 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004911 j++;
4912 *pNumKeys = (tANI_U8) j;
4913 }
4914 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004915 return status;
4916}
Jeff Johnson295189b2012-06-20 16:38:30 -07004917/*
4918 * FUNCTION: WDA_SetBssKeyReqCallback
4919 * send SET BSS key RSP back to PE
4920 */
4921void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4922{
4923 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4924 tWDA_CbContext *pWDA;
4925 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004927 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004928 if(NULL == pWdaParams)
4929 {
4930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004931 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004932 VOS_ASSERT(0) ;
4933 return ;
4934 }
4935 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4936 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05304937 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
4938 sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004939 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4940 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004941 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004942 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004943 return ;
4944}
Jeff Johnson295189b2012-06-20 16:38:30 -07004945/*
4946 * FUNCTION: WDA_ProcessSetBssKeyReq
4947 * Request to WDI for programming the BSS key( key for
4948 * broadcast/multicast frames Encryption)
4949 */
4950VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4951 tSetBssKeyParams *setBssKeyParams )
4952{
4953 WDI_Status status = WDI_STATUS_SUCCESS ;
4954 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4955 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4956 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4957 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004958 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004960 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004961 if(NULL == wdiSetBssKeyParam)
4962 {
4963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004964 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004965 VOS_ASSERT(0);
4966 return VOS_STATUS_E_NOMEM;
4967 }
4968 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4969 if(NULL == pWdaParams)
4970 {
4971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004972 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004973 VOS_ASSERT(0);
4974 vos_mem_free(wdiSetBssKeyParam);
4975 return VOS_STATUS_E_NOMEM;
4976 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004977 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004978 /* copy set BSS params to WDI structure */
4979 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4980 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4981 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004982 if(setBssKeyParams->encType != eSIR_ED_NONE)
4983 {
4984 if( setBssKeyParams->numKeys == 0 &&
4985 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4986 setBssKeyParams->encType == eSIR_ED_WEP104))
4987 {
4988 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004989 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4990 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4991 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4992 }
4993 else
4994 {
4995 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4996 {
4997 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4998 setBssKeyParams->key[keyIndex].keyId;
4999 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
5000 setBssKeyParams->key[keyIndex].unicast;
5001 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
5002 setBssKeyParams->key[keyIndex].keyDirection;
5003 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
5004 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5005 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
5006 setBssKeyParams->key[keyIndex].paeRole;
5007 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
5008 setBssKeyParams->key[keyIndex].keyLength;
5009 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
5010 setBssKeyParams->key[keyIndex].key,
5011 SIR_MAC_MAX_KEY_LENGTH);
5012 }
5013 }
5014 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005015 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
5016 setBssKeyParams->singleTidRc;
5017 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005018 /* Store set key pointer, as this will be used for response */
5019 /* store Params pass it to WDI */
5020 pWdaParams->pWdaContext = pWDA;
5021 pWdaParams->wdaMsgParam = setBssKeyParams;
5022 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005023 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
5024 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
5025
5026 if(IS_WDI_STATUS_FAILURE(status))
5027 {
5028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5029 "Failure in Set BSS Key Req WDI API, free all the memory " );
5030 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5031 vos_mem_free(pWdaParams) ;
5032 setBssKeyParams->status = eSIR_FAILURE ;
5033 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
5034 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005035 return CONVERT_WDI2VOS_STATUS(status) ;
5036}
Jeff Johnson295189b2012-06-20 16:38:30 -07005037/*
5038 * FUNCTION: WDA_RemoveBssKeyReqCallback
5039 * send SET BSS key RSP back to PE
5040 */
5041void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
5042{
5043 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5044 tWDA_CbContext *pWDA;
5045 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005047 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005048 if(NULL == pWdaParams)
5049 {
5050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005051 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005052 VOS_ASSERT(0) ;
5053 return ;
5054 }
5055 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5056 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005057 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5058 vos_mem_free(pWdaParams) ;
5059
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005060 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005061 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005062 return ;
5063}
Siddharth Bhal171788a2014-09-29 21:02:40 +05305064
5065/*
5066 * FUNCTION: WDA_SpoofMacAddrRspCallback
5067 * recieves spoof mac addr response from FW
5068 */
5069void WDA_SpoofMacAddrRspCallback(WDI_SpoofMacAddrRspParamType* wdiRsp, void* pUserData)
5070{
5071 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5072 tWDA_CbContext *pWDA;
Siddharth Bhal029d6732014-10-09 21:31:23 +05305073
Siddharth Bhal171788a2014-09-29 21:02:40 +05305074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5075 "<------ %s " ,__func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305076
Siddharth Bhal171788a2014-09-29 21:02:40 +05305077 if(NULL == pWdaParams)
5078 {
5079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5080 "%s: pWdaParams received NULL", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305081 VOS_ASSERT(0);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305082 return ;
5083 }
Siddharth Bhal171788a2014-09-29 21:02:40 +05305084 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305085
Siddharth Bhal029d6732014-10-09 21:31:23 +05305086 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
Siddharth Bhal171788a2014-09-29 21:02:40 +05305087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhal029d6732014-10-09 21:31:23 +05305088 "%s:Spoofing with rsp status %d", __func__, wdiRsp->wdiStatus);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305089 }
Siddharth Bhal029d6732014-10-09 21:31:23 +05305090 WDA_SendMsg(pWDA, WDA_SPOOF_MAC_ADDR_RSP, NULL,
5091 CONVERT_WDI2SIR_STATUS(wdiRsp->wdiStatus));
Siddharth Bhal171788a2014-09-29 21:02:40 +05305092
Siddharth Bhal171788a2014-09-29 21:02:40 +05305093 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305094 vos_mem_free(pWdaParams->wdaMsgParam);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305095 vos_mem_free(pWdaParams);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305096
5097 return;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305098}
5099
Jeff Johnson295189b2012-06-20 16:38:30 -07005100/*
5101 * FUNCTION: WDA_ProcessRemoveBssKeyReq
5102 * Request to WDI to remove the BSS key( key for broadcast/multicast
5103 * frames Encryption)
5104 */
5105VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
5106 tRemoveBssKeyParams *removeBssKeyParams )
5107{
5108 WDI_Status status = WDI_STATUS_SUCCESS ;
5109 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
5110 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
5111 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
5112 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005114 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005115 if(NULL == wdiRemoveBssKeyParam)
5116 {
5117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005118 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005119 VOS_ASSERT(0);
5120 return VOS_STATUS_E_NOMEM;
5121 }
5122 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5123 if(NULL == pWdaParams)
5124 {
5125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005126 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005127 VOS_ASSERT(0);
5128 vos_mem_free(wdiRemoveBssKeyParam);
5129 return VOS_STATUS_E_NOMEM;
5130 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005131 /* copy Remove BSS key params to WDI structure*/
5132 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
5133 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
5134 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
5135 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
5136 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005137 /* Store remove key pointer, as this will be used for response */
5138 /* store Params pass it to WDI */
5139 pWdaParams->pWdaContext = pWDA;
5140 pWdaParams->wdaMsgParam = removeBssKeyParams;
5141 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005142 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
5143 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005144 if(IS_WDI_STATUS_FAILURE(status))
5145 {
5146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5147 "Failure in Remove BSS Key Req WDI API, free all the memory " );
5148 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5149 vos_mem_free(pWdaParams) ;
5150 removeBssKeyParams->status = eSIR_FAILURE ;
5151 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
5152 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005153 return CONVERT_WDI2VOS_STATUS(status) ;
5154}
Jeff Johnson295189b2012-06-20 16:38:30 -07005155/*
5156 * FUNCTION: WDA_SetBssKeyReqCallback
5157 * send SET BSS key RSP back to PE
5158 */
5159void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
5160{
5161 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5162 tWDA_CbContext *pWDA;
5163 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005165 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005166 if(NULL == pWdaParams)
5167 {
5168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005169 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005170 VOS_ASSERT(0) ;
5171 return ;
5172 }
5173 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5174 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05305175 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
5176 sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005177 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5178 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005179 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005180 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005181 return ;
5182}
Jeff Johnson295189b2012-06-20 16:38:30 -07005183/*
5184 * FUNCTION: WDA_ProcessSetStaKeyReq
5185 * Request to WDI for programming the STA key( key for Unicast frames
5186 * Encryption)
5187 */
5188VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
5189 tSetStaKeyParams *setStaKeyParams )
5190{
5191 WDI_Status status = WDI_STATUS_SUCCESS ;
5192 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5193 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5194 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5195 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005196 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005198 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005199 if(NULL == wdiSetStaKeyParam)
5200 {
5201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005202 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005203 VOS_ASSERT(0);
5204 return VOS_STATUS_E_NOMEM;
5205 }
5206 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5207 if(NULL == pWdaParams)
5208 {
5209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005210 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005211 VOS_ASSERT(0);
5212 vos_mem_free(wdiSetStaKeyParam);
5213 return VOS_STATUS_E_NOMEM;
5214 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005215 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005216 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005217 /* copy set STA key params to WDI structure */
5218 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
5219 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
5220 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
5221 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005222 if(setStaKeyParams->encType != eSIR_ED_NONE)
5223 {
Jeff Johnson43971f52012-07-17 12:26:56 -07005224 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005225 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
5226 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
5227 {
5228 WDA_GetWepKeysFromCfg( pWDA,
5229 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
5230 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
5231 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
5232 }
5233 else
5234 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005235 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5236 keyIndex++)
5237 {
5238 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
5239 setStaKeyParams->key[keyIndex].keyId;
5240 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
5241 setStaKeyParams->key[keyIndex].unicast;
5242 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
5243 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005244 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
5245 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5246 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
5247 setStaKeyParams->key[keyIndex].paeRole;
5248 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
5249 setStaKeyParams->key[keyIndex].keyLength;
5250 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
5251 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
5252 /* set default index to index which have key direction as WDI_TX_DEFAULT */
5253 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
5254 {
5255 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
5256 }
5257 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005258 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
5259 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005260 }
5261 }
5262 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
5263 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005264 /* Store set key pointer, as this will be used for response */
5265 /* store Params pass it to WDI */
5266 pWdaParams->pWdaContext = pWDA;
5267 pWdaParams->wdaMsgParam = setStaKeyParams;
5268 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005269 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
5270 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005271 if(IS_WDI_STATUS_FAILURE(status))
5272 {
5273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5274 "Failure in set STA Key Req WDI API, free all the memory " );
5275 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5276 vos_mem_free(pWdaParams) ;
5277 setStaKeyParams->status = eSIR_FAILURE ;
5278 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
5279 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005280 return CONVERT_WDI2VOS_STATUS(status) ;
5281}
Jeff Johnson295189b2012-06-20 16:38:30 -07005282/*
5283 * FUNCTION: WDA_SetBcastStaKeyReqCallback
5284 * send SET Bcast STA key RSP back to PE
5285 */
5286void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
5287{
5288 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5289 tWDA_CbContext *pWDA;
5290 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005292 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005293 if(NULL == pWdaParams)
5294 {
5295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005296 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005297 VOS_ASSERT(0) ;
5298 return ;
5299 }
5300 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5301 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005302 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5303 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005304 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005305 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005306 return ;
5307}
5308
Jeff Johnson295189b2012-06-20 16:38:30 -07005309/*
5310 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
5311 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
5312 * Encryption)
5313 */
5314VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
5315 tSetStaKeyParams *setStaKeyParams )
5316{
5317 WDI_Status status = WDI_STATUS_SUCCESS ;
5318 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5319 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5320 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5321 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005322 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005324 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005325 if(NULL == wdiSetStaKeyParam)
5326 {
5327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005328 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005329 VOS_ASSERT(0);
5330 return VOS_STATUS_E_NOMEM;
5331 }
5332 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5333 if(NULL == pWdaParams)
5334 {
5335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005336 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005337 VOS_ASSERT(0);
5338 vos_mem_free(wdiSetStaKeyParam);
5339 return VOS_STATUS_E_NOMEM;
5340 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005341 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005342 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005343 /* copy set STA key params to WDI structure */
5344 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
5345 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
5346 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
5347 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005348 if(setStaKeyParams->encType != eSIR_ED_NONE)
5349 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005350 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5351 keyIndex++)
5352 {
5353 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
5354 setStaKeyParams->key[keyIndex].keyId;
5355 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
5356 setStaKeyParams->key[keyIndex].unicast;
5357 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
5358 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005359 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
5360 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5361 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
5362 setStaKeyParams->key[keyIndex].paeRole;
5363 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
5364 setStaKeyParams->key[keyIndex].keyLength;
5365 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
5366 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
5367 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005368 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
5369 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005370 }
5371 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07005372 /* Store set key pointer, as this will be used for response */
5373 /* store Params pass it to WDI */
5374 pWdaParams->pWdaContext = pWDA;
5375 pWdaParams->wdaMsgParam = setStaKeyParams;
5376 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005377 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
5378 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005379 if(IS_WDI_STATUS_FAILURE(status))
5380 {
5381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5382 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
5383 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5384 vos_mem_free(pWdaParams) ;
5385 setStaKeyParams->status = eSIR_FAILURE ;
5386 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
5387 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005388 return CONVERT_WDI2VOS_STATUS(status) ;
5389}
Jeff Johnson295189b2012-06-20 16:38:30 -07005390/*
5391 * FUNCTION: WDA_RemoveStaKeyReqCallback
5392 * send SET BSS key RSP back to PE
5393 */
5394void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
5395{
5396 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5397 tWDA_CbContext *pWDA;
5398 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005400 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005401 if(NULL == pWdaParams)
5402 {
5403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005404 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005405 VOS_ASSERT(0) ;
5406 return ;
5407 }
5408 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5409 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005410 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5411 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005412 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005413 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005414 return ;
5415}
5416
Jeff Johnson295189b2012-06-20 16:38:30 -07005417/*
5418 * FUNCTION: WDA_ProcessRemoveStaKeyReq
5419 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
5420 */
5421VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
5422 tRemoveStaKeyParams *removeStaKeyParams )
5423{
5424 WDI_Status status = WDI_STATUS_SUCCESS ;
5425 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
5426 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
5427 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
5428 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005430 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005431 if(NULL == wdiRemoveStaKeyParam)
5432 {
5433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005434 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005435 VOS_ASSERT(0);
5436 return VOS_STATUS_E_NOMEM;
5437 }
5438 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5439 if(NULL == pWdaParams)
5440 {
5441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005442 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005443 VOS_ASSERT(0);
5444 vos_mem_free(wdiRemoveStaKeyParam);
5445 return VOS_STATUS_E_NOMEM;
5446 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005447 /* copy remove STA key params to WDI structure*/
5448 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
5449 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
5450 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
5451 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
5452 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005453 /* Store remove key pointer, as this will be used for response */
5454 /* store Params pass it to WDI */
5455 pWdaParams->pWdaContext = pWDA;
5456 pWdaParams->wdaMsgParam = removeStaKeyParams;
5457 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005458 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
5459 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005460 if(IS_WDI_STATUS_FAILURE(status))
5461 {
5462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5463 "Failure in remove STA Key Req WDI API, free all the memory " );
5464 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5465 vos_mem_free(pWdaParams) ;
5466 removeStaKeyParams->status = eSIR_FAILURE ;
5467 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
5468 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005469 return CONVERT_WDI2VOS_STATUS(status) ;
5470}
Jeff Johnson295189b2012-06-20 16:38:30 -07005471/*
5472 * FUNCTION: WDA_IsHandleSetLinkStateReq
5473 * Update the WDA state and return the status to handle this message or not
5474 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005475WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
5476 tWDA_CbContext *pWDA,
5477 tLinkStateParams *linkStateParams)
5478{
5479 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005480 switch(linkStateParams->state)
5481 {
5482 case eSIR_LINK_PREASSOC_STATE:
5483 case eSIR_LINK_BTAMP_PREASSOC_STATE:
5484 /*
5485 * set the WDA state to PRE ASSOC
5486 * copy the BSSID into pWDA to use it in join request and return,
5487 * No need to handle these messages.
5488 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005489 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
5490 {
5491 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07005492 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005493 }
5494 else
5495 {
5496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005497 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005498 VOS_ASSERT(0);
5499 }
5500
5501 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
5502 {
5503 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07005504 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005505 }
5506 else
5507 {
5508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005509 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005510 VOS_ASSERT(0);
5511 }
5512
Jeff Johnson295189b2012-06-20 16:38:30 -07005513 /* UMAC is issuing the setlink state with PREASSOC twice (before set
5514 *channel and after ) so reset the WDA state to ready when the second
5515 * time UMAC issue the link state with PREASSOC
5516 */
5517 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
5518 {
5519 /* RESET WDA state back to WDA_READY_STATE */
5520 pWDA->wdaState = WDA_READY_STATE;
5521 }
5522 else
5523 {
5524 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
5525 }
5526 //populate linkState info in WDACbCtxt
5527 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07005528 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07005529 default:
5530 if(pWDA->wdaState != WDA_READY_STATE)
5531 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005532 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
5533 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
5534 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
5535 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
5536 *the ASSERT in WDA_Stop during module unload.*/
5537 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
5538 {
5539 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005540 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005541 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005542 else
5543 {
5544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005545 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005546 status = WDA_IGNORE_SET_LINK_STATE;
5547 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005548 }
5549 break;
5550 }
5551
5552 return status;
5553}
Jeff Johnson295189b2012-06-20 16:38:30 -07005554/*
5555 * FUNCTION: WDA_SetLinkStateCallback
5556 * call back function for set link state from WDI
5557 */
5558void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
5559{
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05305560 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005561 tLinkStateParams *linkStateParams;
5562 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005564 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05305565 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07005566 {
5567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005568 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005569 VOS_ASSERT(0) ;
5570 return ;
5571 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005572 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05305573 if (NULL == pWDA)
5574 {
5575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5576 "%s:pWDA is NULL", __func__);
5577 VOS_ASSERT(0);
5578 return ;
5579 }
5580
Jeff Johnson295189b2012-06-20 16:38:30 -07005581 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005582 /*
5583 * In STA mode start the BA activity check timer after association
5584 * and in AP mode start BA activity check timer after BSS start */
5585 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
5586 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07005587 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
5588 ((status == WDI_STATUS_SUCCESS) &&
5589 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07005590 {
5591 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5592 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005593 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005594 /*
5595 * No respone required for WDA_SET_LINK_STATE so free the request
5596 * param here
5597 */
5598 if( pWdaParams != NULL )
5599 {
5600 if( pWdaParams->wdaWdiApiMsgParam != NULL )
5601 {
5602 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5603 }
5604 vos_mem_free(pWdaParams);
5605 }
5606 return ;
5607}
Jeff Johnson295189b2012-06-20 16:38:30 -07005608/*
5609 * FUNCTION: WDA_ProcessSetLinkState
5610 * Request to WDI to set the link status.
5611 */
5612VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
5613 tLinkStateParams *linkStateParams)
5614{
5615 WDI_Status status = WDI_STATUS_SUCCESS ;
5616 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
5617 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
5618 sizeof(WDI_SetLinkReqParamsType)) ;
5619 tWDA_ReqParams *pWdaParams ;
5620 tpAniSirGlobal pMac;
5621 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
5622
5623 if(NULL == pMac)
5624 {
5625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005626 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005627 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005628 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005629 return VOS_STATUS_E_FAILURE;
5630 }
5631
5632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005633 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005634 if(NULL == wdiSetLinkStateParam)
5635 {
5636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005637 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005638 VOS_ASSERT(0);
5639 return VOS_STATUS_E_NOMEM;
5640 }
5641 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5642 if(NULL == pWdaParams)
5643 {
5644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005645 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005646 VOS_ASSERT(0);
5647 vos_mem_free(wdiSetLinkStateParam);
5648 return VOS_STATUS_E_NOMEM;
5649 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005650 if(WDA_IGNORE_SET_LINK_STATE ==
5651 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
5652 {
5653 status = WDI_STATUS_E_FAILURE;
5654 }
5655 else
5656 {
5657 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
5658 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005659 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
5660 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005661 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
5662 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005663 pWdaParams->pWdaContext = pWDA;
5664 /* Store remove key pointer, as this will be used for response */
5665 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005666 /* store Params pass it to WDI */
5667 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
5668 /* Stop Timer only other than GO role and concurrent session */
5669 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07005670 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005671 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
5672 {
5673 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5674 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005675 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
5676 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005677 if(IS_WDI_STATUS_FAILURE(status))
5678 {
5679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5680 "Failure in set link state Req WDI API, free all the memory " );
5681 }
5682 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005683 if(IS_WDI_STATUS_FAILURE(status))
5684 {
5685 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07005686 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005687 vos_mem_free(pWdaParams);
5688 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005689 return CONVERT_WDI2VOS_STATUS(status) ;
5690}
Jeff Johnson295189b2012-06-20 16:38:30 -07005691/*
5692 * FUNCTION: WDA_GetStatsReqParamsCallback
5693 * send the response to PE with Stats received from WDI
5694 */
5695void WDA_GetStatsReqParamsCallback(
5696 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
5697 void* pUserData)
5698{
5699 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5700 tAniGetPEStatsRsp *pGetPEStatsRspParams;
5701
5702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005703 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005704 pGetPEStatsRspParams =
5705 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
5706 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
5707
5708 if(NULL == pGetPEStatsRspParams)
5709 {
5710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005711 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005712 VOS_ASSERT(0);
5713 return;
5714 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005715 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
5716 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
5717 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
5718 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005719
5720 //Fill the Session Id Properly in PE
5721 pGetPEStatsRspParams->sessionId = 0;
5722 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005723 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005724 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
5725 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005726 vos_mem_copy( pGetPEStatsRspParams + 1,
5727 wdiGetStatsRsp + 1,
5728 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005729 /* send response to UMAC*/
5730 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
5731
5732 return;
5733}
5734
Jeff Johnson295189b2012-06-20 16:38:30 -07005735/*
5736 * FUNCTION: WDA_ProcessGetStatsReq
5737 * Request to WDI to get the statistics
5738 */
5739VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
5740 tAniGetPEStatsReq *pGetStatsParams)
5741{
5742 WDI_Status status = WDI_STATUS_SUCCESS ;
5743 WDI_GetStatsReqParamsType wdiGetStatsParam;
5744 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005746 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005747 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
5748 pGetStatsParams->staId;
5749 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
5750 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005751 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005752 status = WDI_GetStatsReq(&wdiGetStatsParam,
5753 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005754 if(IS_WDI_STATUS_FAILURE(status))
5755 {
5756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5757 "Failure in Get Stats Req WDI API, free all the memory " );
5758 pGetPEStatsRspParams =
5759 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
5760 if(NULL == pGetPEStatsRspParams)
5761 {
5762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005763 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005764 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005765 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005766 return VOS_STATUS_E_NOMEM;
5767 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005768 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
5769 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
5770 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
5771 pGetPEStatsRspParams->rc = eSIR_FAILURE;
5772 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
5773 (void *)pGetPEStatsRspParams, 0) ;
5774 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005775 /* Free the request message */
5776 vos_mem_free(pGetStatsParams);
5777 return CONVERT_WDI2VOS_STATUS(status);
5778}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005779
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08005780#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005781/*
5782 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
5783 * send the response to PE with roam Rssi received from WDI
5784 */
5785void WDA_GetRoamRssiReqParamsCallback(
5786 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
5787 void* pUserData)
5788{
5789 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5790 tWDA_CbContext *pWDA = NULL;
5791 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5792 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
5793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5794 "<------ %s " ,__func__);
5795 if(NULL == pWdaParams)
5796 {
5797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5798 "%s: pWdaParams received NULL", __func__);
5799 VOS_ASSERT(0) ;
5800 return ;
5801 }
5802 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5803 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
5804
5805 if(NULL == pGetRoamRssiReqParams)
5806 {
5807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5808 "%s: pGetRoamRssiReqParams received NULL", __func__);
5809 VOS_ASSERT(0);
5810 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5811 vos_mem_free(pWdaParams);
5812 return ;
5813 }
5814 pGetRoamRssiRspParams =
5815 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5816
5817 if(NULL == pGetRoamRssiRspParams)
5818 {
5819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5820 "%s: VOS MEM Alloc Failure", __func__);
5821 VOS_ASSERT(0);
5822 return;
5823 }
5824 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
5825 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005826 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005827 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
5828 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
5829
5830 /* Assign get roam rssi req (backup) in to the response */
5831 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
5832
5833 /* free WDI command buffer */
5834 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5835 vos_mem_free(pWdaParams) ;
5836
5837 /* send response to UMAC*/
5838 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
5839
5840 return;
5841}
5842
5843
5844
5845/*
5846 * FUNCTION: WDA_ProcessGetRoamRssiReq
5847 * Request to WDI to get the statistics
5848 */
5849VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
5850 tAniGetRssiReq *pGetRoamRssiParams)
5851{
5852 WDI_Status status = WDI_STATUS_SUCCESS ;
5853 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
5854 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5855 tWDA_ReqParams *pWdaParams = NULL;
5856
5857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5858 "------> %s " ,__func__);
5859 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
5860 pGetRoamRssiParams->staId;
5861 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
5862
5863 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5864 if(NULL == pWdaParams)
5865 {
5866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5867 "%s: VOS MEM Alloc Failure", __func__);
5868 VOS_ASSERT(0);
5869 return VOS_STATUS_E_NOMEM;
5870 }
5871
5872 /* Store Init Req pointer, as this will be used for response */
5873 pWdaParams->pWdaContext = pWDA;
5874
5875 /* Take Get roam Rssi req backup as it stores the callback to be called after
5876 receiving the response */
5877 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
5878 pWdaParams->wdaWdiApiMsgParam = NULL;
5879
5880 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
5881 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
5882 if(IS_WDI_STATUS_FAILURE(status))
5883 {
5884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5885 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
5886 pGetRoamRssiRspParams =
5887 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5888 if(NULL == pGetRoamRssiRspParams)
5889 {
5890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5891 "%s: VOS MEM Alloc Failure", __func__);
5892 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05305893 vos_mem_free(pGetRoamRssiParams);
5894 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005895 return VOS_STATUS_E_NOMEM;
5896 }
5897 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
5898 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
5899 pGetRoamRssiRspParams->rssi = 0;
5900 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
5901 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
5902 (void *)pGetRoamRssiRspParams, 0) ;
5903 }
5904 return CONVERT_WDI2VOS_STATUS(status);
5905}
5906#endif
5907
5908
Jeff Johnson295189b2012-06-20 16:38:30 -07005909/*
5910 * FUNCTION: WDA_UpdateEDCAParamCallback
5911 * call back function for Update EDCA params from WDI
5912 */
5913void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
5914{
5915 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5916 tEdcaParams *pEdcaParams;
5917
5918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005919 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005920 if(NULL == pWdaParams)
5921 {
5922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005923 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005924 VOS_ASSERT(0) ;
5925 return ;
5926 }
5927 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005928 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5929 vos_mem_free(pWdaParams);
5930 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005931 return ;
5932}
Jeff Johnson295189b2012-06-20 16:38:30 -07005933/*
5934 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
5935 * Request to WDI to Update the EDCA params.
5936 */
5937VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
5938 tEdcaParams *pEdcaParams)
5939{
5940 WDI_Status status = WDI_STATUS_SUCCESS ;
5941 WDI_UpdateEDCAParamsType *wdiEdcaParam =
5942 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
5943 sizeof(WDI_UpdateEDCAParamsType)) ;
5944 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005946 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005947 if(NULL == wdiEdcaParam)
5948 {
5949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005950 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005951 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005952 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005953 return VOS_STATUS_E_NOMEM;
5954 }
5955 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5956 if(NULL == pWdaParams)
5957 {
5958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005959 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005960 VOS_ASSERT(0);
5961 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005962 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005963 return VOS_STATUS_E_NOMEM;
5964 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005965 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07005966 /*
5967 Since firmware is not using highperformance flag, we have removed
5968 this flag from wdiEDCAInfo structure to match sizeof the structure
5969 between host and firmware.In future if we are planning to use
5970 highperformance flag then Please define this flag in wdiEDCAInfo
5971 structure, update it here and send it to firmware. i.e.
5972 Following is the original line which we removed as part of the fix
5973 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
5974 pEdcaParams->highPerformance;
5975 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005976 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
5977 &pEdcaParams->acbe);
5978 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
5979 &pEdcaParams->acbk);
5980 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
5981 &pEdcaParams->acvi);
5982 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
5983 &pEdcaParams->acvo);
5984 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005985 pWdaParams->pWdaContext = pWDA;
5986 /* Store remove key pointer, as this will be used for response */
5987 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005988 /* store Params pass it to WDI */
5989 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005990 status = WDI_UpdateEDCAParams(wdiEdcaParam,
5991 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005992 if(IS_WDI_STATUS_FAILURE(status))
5993 {
5994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5995 "Failure in Update EDCA Params WDI API, free all the memory " );
5996 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5997 vos_mem_free(pWdaParams);
5998 vos_mem_free(pEdcaParams);
5999 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006000 return CONVERT_WDI2VOS_STATUS(status) ;
6001}
Jeff Johnson295189b2012-06-20 16:38:30 -07006002/*
6003 * FUNCTION: WDA_AddBAReqCallback
6004 * send ADD BA RSP back to PE
6005 */
6006void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
6007 void* pUserData)
6008{
6009 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6010 tWDA_CbContext *pWDA;
6011 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006013 "<------ %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306014 if (NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006015 {
6016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006017 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006018 VOS_ASSERT(0) ;
6019 return ;
6020 }
6021 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306022 if (NULL == pWDA)
6023 {
6024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6025 "%s:pWDA is NULL", __func__);
6026 VOS_ASSERT(0);
6027 return ;
6028 }
6029
Jeff Johnson295189b2012-06-20 16:38:30 -07006030 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006031 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6032 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006033 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006034 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006035 return ;
6036}
6037
Jeff Johnson295189b2012-06-20 16:38:30 -07006038/*
6039 * FUNCTION: WDA_ProcessAddBAReq
6040 * Request to WDI to Update the ADDBA REQ params.
6041 */
6042VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
6043 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
6044{
Jeff Johnson43971f52012-07-17 12:26:56 -07006045 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07006046 WDI_AddBAReqParamsType *wdiAddBAReqParam =
6047 (WDI_AddBAReqParamsType *)vos_mem_malloc(
6048 sizeof(WDI_AddBAReqParamsType)) ;
6049 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006051 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006052 if(NULL == wdiAddBAReqParam)
6053 {
6054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006055 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006056 VOS_ASSERT(0);
6057 return VOS_STATUS_E_NOMEM;
6058 }
6059 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6060 if(NULL == pWdaParams)
6061 {
6062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006063 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006064 VOS_ASSERT(0);
6065 vos_mem_free(wdiAddBAReqParam);
6066 return VOS_STATUS_E_NOMEM;
6067 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006068 do
6069 {
6070 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006071 wdiAddBaInfo->ucSTAIdx = staIdx ;
6072 wdiAddBaInfo->ucBaSessionID = baSessionID ;
6073 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006074 } while(0) ;
6075 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006076 pWdaParams->pWdaContext = pWDA;
6077 /* store Params pass it to WDI */
6078 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
6079 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07006080 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
6081 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006082
Jeff Johnson43971f52012-07-17 12:26:56 -07006083 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07006084 {
6085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07006086 "Failure in ADD BA REQ Params WDI API, free all the memory" );
6087 status = CONVERT_WDI2VOS_STATUS(wstatus);
6088 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006089 vos_mem_free(pWdaParams);
6090 pAddBAReqParams->status = eSIR_FAILURE;
6091 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6092 }
Jeff Johnson43971f52012-07-17 12:26:56 -07006093 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07006094}
Jeff Johnson295189b2012-06-20 16:38:30 -07006095/*
6096 * FUNCTION: WDA_AddBASessionReqCallback
6097 * send ADD BA SESSION RSP back to PE/(or TL)
6098 */
6099void WDA_AddBASessionReqCallback(
6100 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
6101{
6102 VOS_STATUS status = VOS_STATUS_SUCCESS ;
6103 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306104 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006105 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006107 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006108 if(NULL == pWdaParams)
6109 {
6110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006111 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006112 VOS_ASSERT(0) ;
6113 return ;
6114 }
6115 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306116 if (NULL == pWDA)
6117 {
6118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6119 "%s:pWDA is NULL", __func__);
6120 VOS_ASSERT(0);
6121 return ;
6122 }
6123
Jeff Johnson295189b2012-06-20 16:38:30 -07006124 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006125 if( NULL == pAddBAReqParams )
6126 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006128 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006129 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006130 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6131 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006132 return ;
6133 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006134 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6135 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006136 /*
6137 * if WDA in update TL state, update TL with BA session parama and send
6138 * another request to HAL(/WDI) (ADD_BA_REQ)
6139 */
6140
6141 if((VOS_STATUS_SUCCESS ==
6142 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
6143 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
6144 {
6145 /* Update TL with BA info received from HAL/WDI */
6146 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
6147 wdiAddBaSession->usBaSessionID,
6148 wdiAddBaSession->ucSTAIdx,
6149 wdiAddBaSession->ucBaTID,
6150 wdiAddBaSession->ucBaBufferSize,
6151 wdiAddBaSession->ucWinSize,
6152 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07006153 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
6154 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
6155 }
6156 else
6157 {
6158 pAddBAReqParams->status =
6159 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
6160
6161 /* Setting Flag to indicate that Set BA is success */
6162 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
6163 {
6164 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
6165 tANI_U8 tid = wdiAddBaSession->ucBaTID;
6166 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
6167 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006168 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6169 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006170 /*Reset the WDA state to READY */
6171 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006172 return ;
6173}
6174
Jeff Johnson295189b2012-06-20 16:38:30 -07006175/*
6176 * FUNCTION: WDA_ProcessAddBASessionReq
6177 * Request to WDI to Update the ADDBA REQ params.
6178 */
6179VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
6180 tAddBAParams *pAddBAReqParams)
6181{
6182 WDI_Status status = WDI_STATUS_SUCCESS ;
6183 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
6184 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
6185 sizeof(WDI_AddBASessionReqParamsType)) ;
6186 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006187 WLANTL_STAStateType tlSTAState = 0;
6188
Jeff Johnson295189b2012-06-20 16:38:30 -07006189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006190 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006191 if(NULL == wdiAddBASessionReqParam)
6192 {
6193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006194 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006195 VOS_ASSERT(0);
6196 return VOS_STATUS_E_NOMEM;
6197 }
6198 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6199 if(NULL == pWdaParams)
6200 {
6201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006202 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006203 VOS_ASSERT(0);
6204 vos_mem_free(wdiAddBASessionReqParam);
6205 return VOS_STATUS_E_NOMEM;
6206 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006207 /*
6208 * Populate ADD BA parameters and pass these paarmeters to WDI.
6209 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
6210 * the state to track if these is BA recipient case or BA initiator
6211 * case.
6212 */
6213 do
6214 {
6215 WDI_AddBASessionReqinfoType *wdiBAInfoType =
6216 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
6217 /* vos_mem_copy(wdiBAInfoType->macBSSID,
6218 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
6219 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
6220 vos_mem_copy(wdiBAInfoType->macPeerAddr,
6221 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006222 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07006223 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
6224 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
6225 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
6226 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
6227 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07006228 /* check the BA direction and update state accordingly */
6229 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
6230 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
6231 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
6232
6233 }while(0) ;
6234 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006235 pWdaParams->pWdaContext = pWDA;
6236 /* Store ADD BA pointer, as this will be used for response */
6237 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
6238 /* store Params pass it to WDI */
6239 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006240
6241 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
6242 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
6243 */
6244 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
6245 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
6246 {
6247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006248 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07006249 status = WDI_STATUS_E_NOT_ALLOWED;
6250 pAddBAReqParams->status =
6251 CONVERT_WDI2SIR_STATUS(status) ;
6252 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6253 /*Reset the WDA state to READY */
6254 pWDA->wdaState = WDA_READY_STATE;
6255 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6256 vos_mem_free(pWdaParams);
6257
6258 return CONVERT_WDI2VOS_STATUS(status) ;
6259 }
6260
Jeff Johnson295189b2012-06-20 16:38:30 -07006261 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
6262 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006263 if(IS_WDI_STATUS_FAILURE(status))
6264 {
6265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006266 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07006267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006268 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07006269 pAddBAReqParams->status =
6270 CONVERT_WDI2SIR_STATUS(status) ;
6271 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006272 /*Reset the WDA state to READY */
6273 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006274 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006275 vos_mem_free(pWdaParams);
6276 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006277 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006278}
Jeff Johnson295189b2012-06-20 16:38:30 -07006279/*
6280 * FUNCTION: WDA_DelBANotifyTL
6281 * send DEL BA IND to TL
6282 */
6283void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
6284 tDelBAParams *pDelBAReqParams)
6285{
6286 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
6287 //tSirMsgQ msg;
6288 vos_msg_t vosMsg;
6289 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006290 if(NULL == pDelBAInd)
6291 {
6292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006293 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006294 VOS_ASSERT(0) ;
6295 return;
6296 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006297 pDelBAInd->mesgType = WDA_DELETEBA_IND;
6298 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
6299 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
6300 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07006301
Jeff Johnson295189b2012-06-20 16:38:30 -07006302
6303 vosMsg.type = WDA_DELETEBA_IND;
6304 vosMsg.bodyptr = pDelBAInd;
6305 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
6306 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
6307 {
6308 vosStatus = VOS_STATUS_E_BADMSG;
6309 }
6310}
Jeff Johnson295189b2012-06-20 16:38:30 -07006311/*
6312 * FUNCTION: WDA_DelBAReqCallback
6313 * send DEL BA RSP back to PE
6314 */
6315void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
6316{
6317 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6318 tWDA_CbContext *pWDA;
6319 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006321 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006322 if(NULL == pWdaParams)
6323 {
6324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006325 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006326 VOS_ASSERT(0) ;
6327 return ;
6328 }
6329 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306330
Jeff Johnson295189b2012-06-20 16:38:30 -07006331 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006332 /* Notify TL about DEL BA in case of recipinet */
6333 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
6334 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
6335 {
6336 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
6337 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006338 /*
6339 * No respone required for WDA_DELBA_IND so just free the request
6340 * param here
6341 */
6342 vos_mem_free(pDelBAReqParams);
6343 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6344 vos_mem_free(pWdaParams);
6345 return ;
6346}
6347
Jeff Johnson295189b2012-06-20 16:38:30 -07006348/*
6349 * FUNCTION: WDA_ProcessDelBAReq
6350 * Request to WDI to Update the DELBA REQ params.
6351 */
6352VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
6353 tDelBAParams *pDelBAReqParams)
6354{
6355 WDI_Status status = WDI_STATUS_SUCCESS ;
6356 WDI_DelBAReqParamsType *wdiDelBAReqParam =
6357 (WDI_DelBAReqParamsType *)vos_mem_malloc(
6358 sizeof(WDI_DelBAReqParamsType)) ;
6359 tWDA_ReqParams *pWdaParams ;
6360 tANI_U16 staIdx = 0;
6361 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07006362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006363 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006364 if(NULL == wdiDelBAReqParam)
6365 {
6366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006367 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006368 VOS_ASSERT(0);
6369 return VOS_STATUS_E_NOMEM;
6370 }
6371 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6372 if(NULL == pWdaParams)
6373 {
6374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006375 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006376 VOS_ASSERT(0);
6377 vos_mem_free(wdiDelBAReqParam);
6378 return VOS_STATUS_E_NOMEM;
6379 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006380 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
6381 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
6382 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
6383 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006384 pWdaParams->pWdaContext = pWDA;
6385 /* Store DEL BA pointer, as this will be used for response */
6386 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006387 /* store Params pass it to WDI */
6388 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006389 /* if BA exchange over the air is failed, clear this tid in BaBitmap
6390 * maintained in WDA, so that WDA can retry for another BA session
6391 */
6392 staIdx = pDelBAReqParams->staIdx;
6393 tid = pDelBAReqParams->baTID;
6394 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07006395 status = WDI_DelBAReq(wdiDelBAReqParam,
6396 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006397 if(IS_WDI_STATUS_FAILURE(status))
6398 {
6399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6400 "Failure in DEL BA REQ Params WDI API, free all the memory " );
6401 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6402 vos_mem_free(pWdaParams->wdaMsgParam);
6403 vos_mem_free(pWdaParams);
6404 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006405 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006406}
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006407
6408/*
6409 * FUNCTION: WDA_UpdateChReqCallback
6410 *
6411 */
6412void WDA_UpdateChReqCallback(WDI_Status status, void* pUserData)
6413{
Siddharth Bhala006c122014-05-03 12:13:27 +05306414 tWDA_ReqParams *pWdaParams;
6415 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
6416 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
6417 WDI_UpdateChannelReqinfoType *pChanInfoType;
6418 tSirUpdateChanList *pChanList;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006419
6420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6421 "<------ %s " ,__func__);
Siddharth Bhala006c122014-05-03 12:13:27 +05306422 if(NULL == pUserData)
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006423 {
6424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhala006c122014-05-03 12:13:27 +05306425 "%s: pUserData received NULL", __func__);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006426 VOS_ASSERT(0);
6427 return;
6428 }
6429
Siddharth Bhala006c122014-05-03 12:13:27 +05306430 pWdaParams = (tWDA_ReqParams *)pUserData;
6431 pwdiUpdateChReqParam =
6432 (WDI_UpdateChReqParamsType *)pWdaParams->wdaWdiApiMsgParam;
6433 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
6434 pChanInfoType = pwdiUpdateChanReqType->pchanParam;
6435 pChanList = (tSirUpdateChanList *)pWdaParams->wdaMsgParam;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006436 /*
6437 * currently there is no response message is expected between PE and
6438 * WDA, Failure return from WDI is a ASSERT condition
6439 */
6440 vos_mem_free(pChanInfoType);
6441 vos_mem_free(pChanList);
6442 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6443 vos_mem_free(pWdaParams);
6444
6445 return;
6446}
6447
6448/*
6449 * FUNCTION: WDA_ProcessUpdateChannelList
6450 * Request to WDI to Update the ChannelList params.
6451 */
6452VOS_STATUS WDA_ProcessUpdateChannelList(tWDA_CbContext *pWDA,
6453 tSirUpdateChanList *pChanList)
6454{
6455 WDI_Status status = WDI_STATUS_SUCCESS;
6456 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
6457 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
6458 WDI_UpdateChannelReqinfoType *pChanInfoType;
6459 tWDA_ReqParams *pWdaParams;
6460 wpt_uint8 i;
6461
6462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6463 "------> %s " ,__func__);
6464 if(NULL == pChanList)
6465 {
6466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6467 "%s: NULL pChanList", __func__);
6468 VOS_ASSERT(0);
6469 return VOS_STATUS_E_INVAL;
6470 }
6471
6472 if(!WDA_getFwWlanFeatCaps(UPDATE_CHANNEL_LIST))
6473 {
6474 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6475 "Update channel list capability Not Supported");
6476 vos_mem_free(pChanList);
6477 return VOS_STATUS_E_INVAL;
6478 }
6479
6480 pwdiUpdateChReqParam = (WDI_UpdateChReqParamsType *)vos_mem_malloc(
6481 sizeof(WDI_UpdateChReqParamsType));
6482 if(NULL == pwdiUpdateChReqParam)
6483 {
6484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6485 "%s: VOS MEM Alloc Failed for WDI_UpdateChReqParamsType",
6486 __func__);
6487 VOS_ASSERT(0);
6488 vos_mem_free(pChanList);
6489 return VOS_STATUS_E_NOMEM;
6490 }
6491 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
6492 pChanInfoType = (WDI_UpdateChannelReqinfoType *)
6493 vos_mem_malloc(sizeof(WDI_UpdateChannelReqinfoType) *
6494 pChanList->numChan);
6495 if(NULL == pChanInfoType)
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(pwdiUpdateChReqParam);
6502 return VOS_STATUS_E_NOMEM;
6503 }
6504 vos_mem_zero(pChanInfoType, sizeof(WDI_UpdateChannelReqinfoType)
6505 * pChanList->numChan);
6506 pwdiUpdateChanReqType->pchanParam = pChanInfoType;
6507
6508 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6509 if(NULL == pWdaParams)
6510 {
6511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6512 "%s: VOS MEM Alloc Failure", __func__);
6513 VOS_ASSERT(0);
6514 vos_mem_free(pChanList);
6515 vos_mem_free(pChanInfoType);
6516 vos_mem_free(pwdiUpdateChReqParam);
6517 return VOS_STATUS_E_NOMEM;
6518 }
6519 pwdiUpdateChanReqType->numchan = pChanList->numChan;
6520
6521 for(i = 0; i < pwdiUpdateChanReqType->numchan; i++)
6522 {
6523 pChanInfoType->mhz =
6524 vos_chan_to_freq(pChanList->chanParam[i].chanId);
6525
6526 pChanInfoType->band_center_freq1 = pChanInfoType->mhz;
6527 pChanInfoType->band_center_freq2 = 0;
6528
6529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6530 "chan[%d] = %u", i, pChanInfoType->mhz);
6531 if (pChanList->chanParam[i].dfsSet)
6532 {
6533 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_PASSIVE);
6534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6535 "chan[%d] DFS[%d]", pChanList->chanParam[i].chanId,
6536 pChanList->chanParam[i].dfsSet);
6537 }
6538
6539 if (pChanInfoType->mhz < WDA_2_4_GHZ_MAX_FREQ)
6540 {
6541 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11G);
6542 }
6543 else
6544 {
6545 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11A);
6546 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_HT);
6547 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_VHT);
6548 }
6549
6550 WDA_SET_CHANNEL_MAX_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
6551 WDA_SET_CHANNEL_REG_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
Sachin Ahujacb64fc82015-01-12 17:01:05 +05306552 WDA_SET_CUURENT_REG_DOMAIN(pChanInfoType, pChanList->regId);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006553 pChanInfoType++;
6554 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006555 pwdiUpdateChReqParam->wdiReqStatusCB = NULL;
6556 pWdaParams->pWdaContext = pWDA;
6557 pWdaParams->wdaMsgParam = (void *)pChanList;
6558 /* store Params pass it to WDI */
6559 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiUpdateChReqParam;
6560 status = WDI_UpdateChannelReq(pwdiUpdateChReqParam,
6561 (WDI_UpdateChannelRspCb)WDA_UpdateChReqCallback, pWdaParams);
6562 if(IS_WDI_STATUS_FAILURE(status))
6563 {
6564 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6565 "Failure in Update Channel REQ Params WDI API, free all the memory");
6566 vos_mem_free(pwdiUpdateChanReqType->pchanParam);
6567 vos_mem_free(pwdiUpdateChReqParam);
6568 vos_mem_free(pWdaParams->wdaMsgParam);
6569 vos_mem_free(pWdaParams);
6570 }
6571 return CONVERT_WDI2VOS_STATUS(status);
6572}
6573
Jeff Johnson295189b2012-06-20 16:38:30 -07006574/*
6575 * FUNCTION: WDA_AddTSReqCallback
6576 * send ADD TS RSP back to PE
6577 */
6578void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
6579{
6580 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306581 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006582 tAddTsParams *pAddTsReqParams;
6583
6584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006585 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006586 if(NULL == pWdaParams)
6587 {
6588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006589 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006590 VOS_ASSERT(0) ;
6591 return ;
6592 }
6593 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306594 if (NULL == pWDA)
6595 {
6596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6597 "%s:pWDA is NULL", __func__);
6598 VOS_ASSERT(0);
6599 return ;
6600 }
6601
Jeff Johnson295189b2012-06-20 16:38:30 -07006602 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
6603 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6604 vos_mem_free(pWdaParams);
6605
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006606 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006607 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006608 return ;
6609}
6610
Jeff Johnson295189b2012-06-20 16:38:30 -07006611/*
6612 * FUNCTION: WDA_ProcessAddTSReq
6613 * Request to WDI to Update the ADD TS REQ params.
6614 */
6615VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
6616 tAddTsParams *pAddTsReqParams)
6617{
6618 WDI_Status status = WDI_STATUS_SUCCESS ;
6619 WDI_AddTSReqParamsType *wdiAddTSReqParam =
6620 (WDI_AddTSReqParamsType *)vos_mem_malloc(
6621 sizeof(WDI_AddTSReqParamsType)) ;
6622 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006624 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006625 if(NULL == wdiAddTSReqParam)
6626 {
6627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006628 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006629 VOS_ASSERT(0);
6630 return VOS_STATUS_E_NOMEM;
6631 }
6632 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6633 if(NULL == pWdaParams)
6634 {
6635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006636 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006637 VOS_ASSERT(0);
6638 vos_mem_free(wdiAddTSReqParam);
6639 return VOS_STATUS_E_NOMEM;
6640 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006641 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
6642 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006643 //TS IE
6644 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
6645 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
6646 pAddTsReqParams->tspec.length;
6647
6648 //TS IE : TS INFO : TRAFFIC
6649 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
6650 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
6651 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
6652 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
6653 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
6654 pAddTsReqParams->tspec.tsinfo.traffic.psb;
6655 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
6656 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
6657 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
6658 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
6659 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
6660 pAddTsReqParams->tspec.tsinfo.traffic.direction;
6661 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
6662 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
6663 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
6664 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
6665
6666 //TS IE : TS INFO : SCHEDULE
6667 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
6668 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
6669 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
6670 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07006671 //TS IE
6672 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
6673 pAddTsReqParams->tspec.nomMsduSz;
6674 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
6675 pAddTsReqParams->tspec.maxMsduSz;
6676 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
6677 pAddTsReqParams->tspec.minSvcInterval;
6678 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
6679 pAddTsReqParams->tspec.maxSvcInterval;
6680 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
6681 pAddTsReqParams->tspec.inactInterval;
6682 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
6683 pAddTsReqParams->tspec.suspendInterval;
6684 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
6685 pAddTsReqParams->tspec.svcStartTime;
6686 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
6687 pAddTsReqParams->tspec.minDataRate;
6688 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
6689 pAddTsReqParams->tspec.meanDataRate;
6690 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
6691 pAddTsReqParams->tspec.peakDataRate;
6692 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
6693 pAddTsReqParams->tspec.maxBurstSz;
6694 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
6695 pAddTsReqParams->tspec.delayBound;
6696 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
6697 pAddTsReqParams->tspec.minPhyRate;
6698 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
6699 pAddTsReqParams->tspec.surplusBw;
6700 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
6701 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07006702 /* TODO: tAddTsParams doesn't have the following fields */
6703#if 0
6704 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6705 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
6706 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6707 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6708#endif
6709 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
6710
6711 pWdaParams->pWdaContext = pWDA;
6712 /* Store ADD TS pointer, as this will be used for response */
6713 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006714 /* store Params pass it to WDI */
6715 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006716 status = WDI_AddTSReq(wdiAddTSReqParam,
6717 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006718 if(IS_WDI_STATUS_FAILURE(status))
6719 {
6720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6721 "Failure in ADD TS REQ Params WDI API, free all the memory " );
6722 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6723 vos_mem_free(pWdaParams);
6724 pAddTsReqParams->status = eSIR_FAILURE ;
6725 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
6726 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006727 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006728}
6729
Jeff Johnson295189b2012-06-20 16:38:30 -07006730/*
6731 * FUNCTION: WDA_DelTSReqCallback
6732 * send DEL TS RSP back to PE
6733 */
6734void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
6735{
6736 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006738 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006739 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6740 vos_mem_free(pWdaParams->wdaMsgParam) ;
6741 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006742 /*
6743 * No respone required for WDA_DEL_TS_REQ so just free the request
6744 * param here
6745 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006746 return ;
6747}
6748
Jeff Johnson295189b2012-06-20 16:38:30 -07006749/*
6750 * FUNCTION: WDA_ProcessDelTSReq
6751 * Request to WDI to Update the DELTS REQ params.
6752 */
6753VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
6754 tDelTsParams *pDelTSReqParams)
6755{
6756 WDI_Status status = WDI_STATUS_SUCCESS ;
6757 WDI_DelTSReqParamsType *wdiDelTSReqParam =
6758 (WDI_DelTSReqParamsType *)vos_mem_malloc(
6759 sizeof(WDI_DelTSReqParamsType)) ;
6760 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006762 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006763 if(NULL == wdiDelTSReqParam)
6764 {
6765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006766 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006767 VOS_ASSERT(0);
6768 return VOS_STATUS_E_NOMEM;
6769 }
6770 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6771 if(NULL == pWdaParams)
6772 {
6773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006774 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006775 VOS_ASSERT(0);
6776 vos_mem_free(wdiDelTSReqParam);
6777 return VOS_STATUS_E_NOMEM;
6778 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006779 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
6780 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
6781 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
6782 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
6783 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006784 pWdaParams->pWdaContext = pWDA;
6785 /* Store DEL TS pointer, as this will be used for response */
6786 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006787 /* store Params pass it to WDI */
6788 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006789 status = WDI_DelTSReq(wdiDelTSReqParam,
6790 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006791 if(IS_WDI_STATUS_FAILURE(status))
6792 {
6793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6794 "Failure in DEL TS REQ Params WDI API, free all the memory " );
6795 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6796 vos_mem_free(pWdaParams->wdaMsgParam);
6797 vos_mem_free(pWdaParams);
6798 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006799 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006800}
Jeff Johnson295189b2012-06-20 16:38:30 -07006801/*
6802 * FUNCTION: WDA_UpdateBeaconParamsCallback
6803 * Free the memory. No need to send any response to PE in this case
6804 */
6805void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
6806{
6807 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006809 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006810 if(NULL == pWdaParams)
6811 {
6812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006813 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006814 VOS_ASSERT(0) ;
6815 return ;
6816 }
6817 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6818 vos_mem_free(pWdaParams->wdaMsgParam) ;
6819 vos_mem_free(pWdaParams);
6820 /*
6821 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
6822 * param here
6823 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006824 return ;
6825}
Jeff Johnson295189b2012-06-20 16:38:30 -07006826/*
6827 * FUNCTION: WDA_ProcessUpdateBeaconParams
6828 * Request to WDI to send the beacon parameters to HAL to update the Hardware
6829 */
6830VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
6831 tUpdateBeaconParams *pUpdateBeaconParams)
6832{
6833 WDI_Status status = WDI_STATUS_SUCCESS ;
6834 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
6835 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
6836 sizeof(WDI_UpdateBeaconParamsType)) ;
6837 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006839 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006840 if(NULL == wdiUpdateBeaconParams)
6841 {
6842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006843 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006844 VOS_ASSERT(0);
6845 return VOS_STATUS_E_NOMEM;
6846 }
6847 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6848 if(NULL == pWdaParams)
6849 {
6850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006851 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006852 VOS_ASSERT(0);
6853 vos_mem_free(wdiUpdateBeaconParams);
6854 return VOS_STATUS_E_NOMEM;
6855 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006856 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
6857 pUpdateBeaconParams->bssIdx;
6858 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
6859 pUpdateBeaconParams->fShortPreamble;
6860 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
6861 pUpdateBeaconParams->fShortSlotTime;
6862 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
6863 pUpdateBeaconParams->beaconInterval;
6864 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
6865 pUpdateBeaconParams->llaCoexist;
6866 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
6867 pUpdateBeaconParams->llbCoexist;
6868 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
6869 pUpdateBeaconParams->llgCoexist;
6870 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
6871 pUpdateBeaconParams->ht20MhzCoexist;
6872 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
6873 pUpdateBeaconParams->llnNonGFCoexist;
6874 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
6875 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
6876 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
6877 pUpdateBeaconParams->fRIFSMode;
6878 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
6879 pUpdateBeaconParams->paramChangeBitmap;
6880 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
6881
6882 pWdaParams->pWdaContext = pWDA;
6883 /* Store UpdateBeacon Req pointer, as this will be used for response */
6884 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006885 /* store Params pass it to WDI */
6886 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006887 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
6888 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
6889 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006890 if(IS_WDI_STATUS_FAILURE(status))
6891 {
6892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6893 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
6894 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6895 vos_mem_free(pWdaParams->wdaMsgParam);
6896 vos_mem_free(pWdaParams);
6897 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006898 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006899}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08006900#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -07006901/*
6902 * FUNCTION: WDA_TSMStatsReqCallback
6903 * send TSM Stats RSP back to PE
6904 */
6905void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
6906{
6907 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6908 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006909 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
6910 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006911
6912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006913 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006914 if(NULL == pWdaParams)
6915 {
6916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006917 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006918 VOS_ASSERT(0) ;
6919 return ;
6920 }
6921 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05306922 if (NULL == pWDA)
6923 {
6924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6925 "%s:pWDA is NULL", __func__);
6926 VOS_ASSERT(0);
6927 return ;
6928 }
6929
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006930 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
6931
6932 if(NULL == pGetTsmStatsReqParams)
6933 {
6934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6935 "%s: pGetTsmStatsReqParams received NULL", __func__);
6936 VOS_ASSERT(0);
6937 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6938 vos_mem_free(pWdaParams);
6939 return;
6940 }
6941
6942 pTsmRspParams =
6943 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07006944 if( NULL == pTsmRspParams )
6945 {
6946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006947 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006948 VOS_ASSERT( 0 );
6949 return ;
6950 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006951 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
6952 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
6953 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
6954
Jeff Johnson295189b2012-06-20 16:38:30 -07006955 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
6956 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
6957 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
6958 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
6959 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
6960 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
6961 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
6962 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
6963 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
6964 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006965
6966 /* Assign get tsm stats req req (backup) in to the response */
6967 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
6968
6969 /* free WDI command buffer */
6970 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6971 vos_mem_free(pWdaParams);
6972
Jeff Johnson295189b2012-06-20 16:38:30 -07006973 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006974 return ;
6975}
6976
6977
Jeff Johnson295189b2012-06-20 16:38:30 -07006978/*
6979 * FUNCTION: WDA_ProcessTsmStatsReq
6980 * Request to WDI to get the TSM Stats params.
6981 */
6982VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006983 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07006984{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006985 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006986 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006987 tWDA_ReqParams *pWdaParams = NULL;
6988 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
6989
Jeff Johnson295189b2012-06-20 16:38:30 -07006990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006991 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006992 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
6993 sizeof(WDI_TSMStatsReqParamsType));
6994 if(NULL == wdiTSMReqParam)
6995 {
6996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006997 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006998 VOS_ASSERT(0);
6999 return VOS_STATUS_E_NOMEM;
7000 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007001 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7002 if(NULL == pWdaParams)
7003 {
7004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007005 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007006 VOS_ASSERT(0);
7007 vos_mem_free(wdiTSMReqParam);
7008 return VOS_STATUS_E_NOMEM;
7009 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007010 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
7011 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
7012 pTsmStats->bssId,
7013 sizeof(wpt_macAddr));
7014 wdiTSMReqParam->wdiReqStatusCB = NULL ;
7015
7016 pWdaParams->pWdaContext = pWDA;
7017 /* Store TSM Stats pointer, as this will be used for response */
7018 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007019 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007020 status = WDI_TSMStatsReq(wdiTSMReqParam,
7021 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007022 if(IS_WDI_STATUS_FAILURE(status))
7023 {
7024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7025 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07007026 vos_mem_free(pWdaParams);
7027
7028 pGetTsmStatsRspParams =
7029 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
7030 if(NULL == pGetTsmStatsRspParams)
7031 {
7032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7033 "%s: VOS MEM Alloc Failure", __func__);
7034 VOS_ASSERT(0);
7035 vos_mem_free(pTsmStats);
7036 return VOS_STATUS_E_NOMEM;
7037 }
7038 pGetTsmStatsRspParams->staId = pTsmStats->staId;
7039 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
7040 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
7041
7042 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007043 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007044 return CONVERT_WDI2VOS_STATUS(status) ;
7045}
7046#endif
7047/*
7048 * FUNCTION: WDA_SendBeaconParamsCallback
7049 * No need to send any response to PE in this case
7050 */
7051void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
7052{
7053
Jeff Johnson295189b2012-06-20 16:38:30 -07007054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007055 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007056 return ;
7057}
Jeff Johnson295189b2012-06-20 16:38:30 -07007058/*
7059 * FUNCTION: WDA_ProcessSendBeacon
7060 * Request to WDI to send the beacon template to HAL to update the TPE memory and
7061 * start beacon trasmission
7062 */
7063VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
7064 tSendbeaconParams *pSendbeaconParams)
7065{
7066 WDI_Status status = WDI_STATUS_SUCCESS ;
7067 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007069 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007070 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
7071 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
7072 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
7073 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07007074 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
7075 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05307076 /* p2pIeOffset should be atleast greater than timIeOffset */
7077 if ((pSendbeaconParams->p2pIeOffset != 0) &&
7078 (pSendbeaconParams->p2pIeOffset <
7079 pSendbeaconParams->timIeOffset))
7080 {
7081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7082 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
7083 VOS_ASSERT( 0 );
7084 return WDI_STATUS_E_FAILURE;
7085 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007086 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
7087 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07007088 /* Copy the beacon template to local buffer */
7089 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
7090 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
7091 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
7092
Jeff Johnson295189b2012-06-20 16:38:30 -07007093 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
7094 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007095 if(IS_WDI_STATUS_FAILURE(status))
7096 {
7097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7098 "Failure in SEND BEACON REQ Params WDI API" );
7099 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007100 vos_mem_free(pSendbeaconParams);
7101 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007102}
Jeff Johnson295189b2012-06-20 16:38:30 -07007103/*
7104 * FUNCTION: WDA_UpdateProbeRspParamsCallback
7105 * No need to send any response to PE in this case
7106 */
7107void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
7108{
Jeff Johnson295189b2012-06-20 16:38:30 -07007109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007110 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007111 return ;
7112}
7113
Jeff Johnson295189b2012-06-20 16:38:30 -07007114/*
7115 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
7116 * Request to WDI to send the probe response template to HAL to update the TPE memory and
7117 * send probe response
7118 */
7119VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
7120 tSendProbeRespParams *pSendProbeRspParams)
7121{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007122 WDI_Status status = WDI_STATUS_SUCCESS;
7123 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
7124 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07007125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007126 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007127
7128 if (!wdiSendProbeRspParam)
7129 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
7130
Jeff Johnson295189b2012-06-20 16:38:30 -07007131 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007132 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07007133 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007134 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07007135 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07007136 /* Copy the Probe Response template to local buffer */
7137 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007138 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07007139 pSendProbeRspParams->pProbeRespTemplate,
7140 pSendProbeRspParams->probeRespTemplateLen);
7141 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007142 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07007143 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
7144 WDI_PROBE_REQ_BITMAP_IE_LEN);
7145
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007146 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007147
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007148 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07007149 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007150 if(IS_WDI_STATUS_FAILURE(status))
7151 {
7152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7153 "Failure in SEND Probe RSP Params WDI API" );
7154 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007155 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007156 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007157 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007158}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007159#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -07007160/*
7161 * FUNCTION: WDA_SetMaxTxPowerCallBack
7162 * send the response to PE with power value received from WDI
7163 */
7164void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
7165 void* pUserData)
7166{
7167 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7168 tWDA_CbContext *pWDA = NULL;
7169 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
7170
7171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007172 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007173 if(NULL == pWdaParams)
7174 {
7175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007176 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007177 VOS_ASSERT(0) ;
7178 return ;
7179 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007180 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307181 if (NULL == pWDA)
7182 {
7183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7184 "%s:pWDA is NULL", __func__);
7185 VOS_ASSERT(0);
7186 return ;
7187 }
7188
Jeff Johnson295189b2012-06-20 16:38:30 -07007189 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007190 if( NULL == pMaxTxPowerParams )
7191 {
7192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007193 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07007194 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007195 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7196 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007197 return ;
7198 }
Jeff Johnsone7245742012-09-05 17:12:55 -07007199
Jeff Johnson295189b2012-06-20 16:38:30 -07007200
7201 /*need to free memory for the pointers used in the
7202 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007203 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7204 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007205 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07007206
Jeff Johnson295189b2012-06-20 16:38:30 -07007207
7208 /* send response to UMAC*/
7209 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
7210
7211 return;
7212}
Jeff Johnson295189b2012-06-20 16:38:30 -07007213/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007214 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07007215 * Request to WDI to send set Max Tx Power Request
7216 */
7217 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
7218 tMaxTxPowerParams *MaxTxPowerParams)
7219{
7220 WDI_Status status = WDI_STATUS_SUCCESS;
7221 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
7222 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007223
Jeff Johnson295189b2012-06-20 16:38:30 -07007224 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007225 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007226
Jeff Johnson295189b2012-06-20 16:38:30 -07007227 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
7228 sizeof(WDI_SetMaxTxPowerParamsType));
7229 if(NULL == wdiSetMaxTxPowerParams)
7230 {
7231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007232 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007233 VOS_ASSERT(0);
7234 return VOS_STATUS_E_NOMEM;
7235 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007236 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7237 if(NULL == pWdaParams)
7238 {
7239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007240 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007241 vos_mem_free(wdiSetMaxTxPowerParams);
7242 VOS_ASSERT(0);
7243 return VOS_STATUS_E_NOMEM;
7244 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007245 /* Copy.Max.Tx.Power Params to WDI structure */
7246 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
7247 MaxTxPowerParams->bssId,
7248 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007249 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
7250 MaxTxPowerParams->selfStaMacAddr,
7251 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007252 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
7253 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07007254 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007255 pWdaParams->pWdaContext = pWDA;
7256 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007257 /* store Params pass it to WDI */
7258 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007259 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
7260 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007261 if(IS_WDI_STATUS_FAILURE(status))
7262 {
7263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7264 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
7265 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7266 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007267 /* send response to UMAC*/
7268 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007269 }
7270 return CONVERT_WDI2VOS_STATUS(status);
7271
7272}
Jeff Johnson295189b2012-06-20 16:38:30 -07007273#endif
schang86c22c42013-03-13 18:41:24 -07007274
7275/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07007276 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
7277 * send the response to PE with power value received from WDI
7278 */
7279void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
7280 *pwdiSetMaxTxPowerPerBandRsp,
7281 void* pUserData)
7282{
7283 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7284 tWDA_CbContext *pWDA = NULL;
7285 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
7286
7287 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7288 "<------ %s ", __func__);
7289 if (NULL == pWdaParams)
7290 {
7291 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7292 "%s: pWdaParams received NULL", __func__);
7293 VOS_ASSERT(0);
7294 return ;
7295 }
7296 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307297 if (NULL == pWDA)
7298 {
7299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7300 "%s:pWDA is NULL", __func__);
7301 VOS_ASSERT(0);
7302 return ;
7303 }
7304
Arif Hussaina5ebce02013-08-09 15:09:58 -07007305 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
7306 if ( NULL == pMxTxPwrPerBandParams )
7307 {
7308 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7309 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
7310 VOS_ASSERT(0);
7311 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7312 vos_mem_free(pWdaParams);
7313 return;
7314 }
7315
7316 /*need to free memory for the pointers used in the
7317 WDA Process.Set Max Tx Power Req function*/
7318 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7319 vos_mem_free(pWdaParams);
7320 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
7321
7322 /* send response to UMAC*/
7323 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
7324 pMxTxPwrPerBandParams, 0);
7325
7326 return;
7327}
7328
7329/*
7330 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
7331 * Request to WDI to send set Max Tx Power Per band Request
7332 */
7333 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
7334 tMaxTxPowerPerBandParams
7335 *MaxTxPowerPerBandParams)
7336{
7337 WDI_Status status = WDI_STATUS_SUCCESS;
7338 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
7339 tWDA_ReqParams *pWdaParams = NULL;
7340
7341 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7342 "------> %s ", __func__);
7343
7344 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
7345 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
7346
7347 if (NULL == wdiSetMxTxPwrPerBandParams)
7348 {
7349 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7350 "%s: VOS MEM Alloc Failure", __func__);
7351 VOS_ASSERT(0);
7352 return VOS_STATUS_E_NOMEM;
7353 }
7354 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7355 if (NULL == pWdaParams)
7356 {
7357 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7358 "%s: VOS MEM Alloc Failure", __func__);
7359 vos_mem_free(wdiSetMxTxPwrPerBandParams);
7360 VOS_ASSERT(0);
7361 return VOS_STATUS_E_NOMEM;
7362 }
7363 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
7364 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
7365 MaxTxPowerPerBandParams->bandInfo;
7366 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
7367 MaxTxPowerPerBandParams->power;
7368 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
7369 pWdaParams->pWdaContext = pWDA;
7370 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
7371 /* store Params pass it to WDI */
7372 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
7373 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
7374 WDA_SetMaxTxPowerPerBandCallBack,
7375 pWdaParams);
7376 if (IS_WDI_STATUS_FAILURE(status))
7377 {
7378 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7379 "Failure in SET MAX TX Power REQ Params WDI API,"
7380 " free all the memory");
7381 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7382 vos_mem_free(pWdaParams);
7383 /* send response to UMAC*/
7384 WDA_SendMsg(pWDA,
7385 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
7386 MaxTxPowerPerBandParams, 0);
7387 }
7388 return CONVERT_WDI2VOS_STATUS(status);
7389}
7390
7391/*
schang86c22c42013-03-13 18:41:24 -07007392 * FUNCTION: WDA_SetTxPowerCallBack
7393 * send the response to PE with power value received from WDI
7394 */
7395void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
7396 void* pUserData)
7397{
7398 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7399 tWDA_CbContext *pWDA = NULL;
7400 tSirSetTxPowerReq *pTxPowerParams = NULL;
7401
7402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7403 "<------ %s ", __func__);
7404 if(NULL == pWdaParams)
7405 {
7406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7407 "%s: pWdaParams received NULL", __func__);
7408 VOS_ASSERT(0) ;
7409 return ;
7410 }
7411 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307412 if (NULL == pWDA)
7413 {
7414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7415 "%s:pWDA is NULL", __func__);
7416 VOS_ASSERT(0);
7417 return ;
7418 }
7419
schang86c22c42013-03-13 18:41:24 -07007420 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
7421 if(NULL == pTxPowerParams)
7422 {
7423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7424 "%s: pTxPowerParams received NULL " ,__func__);
7425 VOS_ASSERT(0);
7426 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7427 vos_mem_free(pWdaParams);
7428 return ;
7429 }
7430
7431 /*need to free memory for the pointers used in the
7432 WDA Process.Set Max Tx Power Req function*/
7433 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7434 vos_mem_free(pWdaParams);
7435
7436 /* send response to UMAC*/
7437 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
7438 return;
7439}
7440
7441/*
7442 * FUNCTION: WDA_ProcessSetTxPowerReq
7443 * Request to WDI to send set Tx Power Request
7444 */
7445 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
7446 tSirSetTxPowerReq *txPowerParams)
7447{
7448 WDI_Status status = WDI_STATUS_SUCCESS;
7449 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
7450 tWDA_ReqParams *pWdaParams = NULL;
7451
7452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7453 "------> %s ", __func__);
7454
7455 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
7456 sizeof(WDI_SetTxPowerParamsType));
7457 if(NULL == wdiSetTxPowerParams)
7458 {
7459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7460 "%s: VOS MEM Alloc Failure", __func__);
7461 VOS_ASSERT(0);
7462 return VOS_STATUS_E_NOMEM;
7463 }
7464 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7465 if(NULL == pWdaParams)
7466 {
7467 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7468 "%s: VOS MEM Alloc Failure", __func__);
7469 vos_mem_free(wdiSetTxPowerParams);
7470 VOS_ASSERT(0);
7471 return VOS_STATUS_E_NOMEM;
7472 }
7473 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
7474 txPowerParams->bssIdx;
7475 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
7476 txPowerParams->mwPower;
7477 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
7478 pWdaParams->pWdaContext = pWDA;
7479 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
7480 /* store Params pass it to WDI */
7481 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
7482 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
7483 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
7484 if(IS_WDI_STATUS_FAILURE(status))
7485 {
7486 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7487 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
7488 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7489 vos_mem_free(pWdaParams);
7490 /* send response to UMAC*/
7491 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
7492 }
7493 return CONVERT_WDI2VOS_STATUS(status);
7494}
7495
Jeff Johnson295189b2012-06-20 16:38:30 -07007496/*
7497 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7498 * Free the memory. No need to send any response to PE in this case
7499 */
7500void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
7501{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007502 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7503
Jeff Johnson295189b2012-06-20 16:38:30 -07007504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007505 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007506
7507 if(NULL == pWdaParams)
7508 {
7509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007510 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007511 VOS_ASSERT(0) ;
7512 return ;
7513 }
7514
7515 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7516 vos_mem_free(pWdaParams->wdaMsgParam) ;
7517 vos_mem_free(pWdaParams);
7518
Jeff Johnson295189b2012-06-20 16:38:30 -07007519 /*
7520 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
7521 * so just free the request param here
7522 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007523 return ;
7524}
7525
Jeff Johnson295189b2012-06-20 16:38:30 -07007526/*
7527 * FUNCTION: WDA_ProcessSetP2PGONOAReq
7528 * Request to WDI to set the P2P Group Owner Notice of Absence Req
7529 */
7530VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
7531 tP2pPsParams *pP2pPsConfigParams)
7532{
7533 WDI_Status status = WDI_STATUS_SUCCESS ;
7534 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
7535 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
7536 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007537 tWDA_ReqParams *pWdaParams = NULL;
7538
Jeff Johnson295189b2012-06-20 16:38:30 -07007539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007540 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007541 if(NULL == wdiSetP2PGONOAReqParam)
7542 {
7543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007544 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007545 VOS_ASSERT(0);
7546 return VOS_STATUS_E_NOMEM;
7547 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007548
7549 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7550 if(NULL == pWdaParams)
7551 {
7552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007553 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007554 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007555 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007556 VOS_ASSERT(0);
7557 return VOS_STATUS_E_NOMEM;
7558 }
7559
Jeff Johnson295189b2012-06-20 16:38:30 -07007560 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
7561 pP2pPsConfigParams->opp_ps;
7562 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
7563 pP2pPsConfigParams->ctWindow;
7564 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
7565 pP2pPsConfigParams->count;
7566 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
7567 pP2pPsConfigParams->duration;
7568 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
7569 pP2pPsConfigParams->interval;
7570 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
7571 pP2pPsConfigParams->single_noa_duration;
7572 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
7573 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007574
Jeff Johnson295189b2012-06-20 16:38:30 -07007575 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
7576 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007577 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
7578
Jeff Johnson295189b2012-06-20 16:38:30 -07007579 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007580 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
7581 pWdaParams->pWdaContext = pWDA;
7582
Jeff Johnson295189b2012-06-20 16:38:30 -07007583 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007584 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
7585
Jeff Johnson295189b2012-06-20 16:38:30 -07007586 if(IS_WDI_STATUS_FAILURE(status))
7587 {
7588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7589 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007590 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7591 vos_mem_free(pWdaParams->wdaMsgParam);
7592 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007593 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007594 return CONVERT_WDI2VOS_STATUS(status);
7595
Jeff Johnson295189b2012-06-20 16:38:30 -07007596}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307597
7598#ifdef FEATURE_WLAN_TDLS
7599/*
7600 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7601 * Free the memory. No need to send any response to PE in this case
7602 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307603void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
7604 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307605{
7606 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7607 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307608 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307609
7610
7611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7612 "<------ %s " ,__func__);
7613 if(NULL == pWdaParams)
7614 {
7615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7616 "%s: pWdaParams received NULL", __func__);
7617 VOS_ASSERT(0) ;
7618 return ;
7619 }
7620 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7621
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307622 if (NULL == pWDA)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307623 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7625 "%s:pWDA is NULL", __func__);
7626 VOS_ASSERT(0);
7627 return ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307628 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307629
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307630 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
7631 if( NULL == pTdlsLinkEstablishParams )
7632 {
7633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7634 "%s: pTdlsLinkEstablishParams "
7635 "received NULL " ,__func__);
7636 VOS_ASSERT(0);
7637 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7638 vos_mem_free(pWdaParams);
7639 return ;
7640 }
7641 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
7642 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307643 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307644 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307645 /* send response to UMAC*/
7646 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
7647
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307648 return ;
7649}
7650
7651VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
7652 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
7653{
7654 WDI_Status status = WDI_STATUS_SUCCESS ;
7655 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
7656 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
7657 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
7658 tWDA_ReqParams *pWdaParams = NULL;
7659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7660 "------> %s " ,__func__);
7661 if(NULL == wdiSetTDLSLinkEstablishReqParam)
7662 {
7663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7664 "%s: VOS MEM Alloc Failure", __func__);
7665 VOS_ASSERT(0);
7666 return VOS_STATUS_E_NOMEM;
7667 }
7668 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7669 if(NULL == pWdaParams)
7670 {
7671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7672 "%s: VOS MEM Alloc Failure", __func__);
7673 vos_mem_free(pTdlsLinkEstablishParams);
7674 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
7675 VOS_ASSERT(0);
7676 return VOS_STATUS_E_NOMEM;
7677 }
7678 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307679 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307680 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307681 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307682 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307683 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307684 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307685 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307686 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307687 pTdlsLinkEstablishParams->isBufsta;
Naresh Jayaramc7cbd782014-02-04 17:38:23 +05307688 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsOffChannelSupported =
7689 pTdlsLinkEstablishParams->isOffChannelSupported;
7690
7691 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannels,
7692 pTdlsLinkEstablishParams->validChannels,
7693 pTdlsLinkEstablishParams->validChannelsLen);
7694
7695 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannelsLen =
7696 pTdlsLinkEstablishParams->validChannelsLen;
7697
7698 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClasses,
7699 pTdlsLinkEstablishParams->validOperClasses,
7700 pTdlsLinkEstablishParams->validOperClassesLen);
7701 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClassesLen =
7702 pTdlsLinkEstablishParams->validOperClassesLen;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307703
7704 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
7705 /* Store msg pointer from PE, as this will be used for response */
7706 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
7707 /* store Params pass it to WDI */
7708 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
7709 pWdaParams->pWdaContext = pWDA;
7710
7711 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
7712 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
7713 WDA_SetTDLSLinkEstablishReqParamsCallback,
7714 pWdaParams);
7715 if(IS_WDI_STATUS_FAILURE(status))
7716 {
7717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7718 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
7719 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7720 vos_mem_free(pWdaParams->wdaMsgParam);
7721 vos_mem_free(pWdaParams);
7722 }
7723 return CONVERT_WDI2VOS_STATUS(status);
7724}
Atul Mittalc0f739f2014-07-31 13:47:47 +05307725
7726// tdlsoffchan
7727void WDA_SetTDLSChanSwitchReqParamsCallback(WDI_SetTdlsChanSwitchReqResp *wdiSetTdlsChanSwitchReqRsp,
7728 void* pUserData)
7729{
7730 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7731 tWDA_CbContext *pWDA = NULL;
7732 tTdlsChanSwitchParams *pTdlsChanSwitchParams;
7733
7734
7735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7736 "<------ %s " ,__func__);
7737 if(NULL == pWdaParams)
7738 {
7739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7740 "%s: pWdaParams received NULL", __func__);
Atul Mittalc0f739f2014-07-31 13:47:47 +05307741 VOS_ASSERT(0) ;
7742 return ;
7743 }
7744 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7745
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307746 if (NULL == pWDA)
Atul Mittal60bd4292014-08-14 12:19:27 +05307747 {
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7749 "%s:pWDA is NULL", __func__);
7750 VOS_ASSERT(0);
7751 return ;
Atul Mittal60bd4292014-08-14 12:19:27 +05307752 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307753
Atul Mittalc0f739f2014-07-31 13:47:47 +05307754 pTdlsChanSwitchParams = (tTdlsChanSwitchParams *)pWdaParams->wdaMsgParam ;
Atul Mittal60bd4292014-08-14 12:19:27 +05307755 if( NULL == pTdlsChanSwitchParams )
Atul Mittalc0f739f2014-07-31 13:47:47 +05307756 {
7757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7758 "%s: pTdlsChanSwitchParams "
7759 "received NULL " ,__func__);
7760 VOS_ASSERT(0);
7761 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7762 vos_mem_free(pWdaParams);
7763 return ;
7764 }
7765 pTdlsChanSwitchParams->status = CONVERT_WDI2SIR_STATUS(
7766 wdiSetTdlsChanSwitchReqRsp->wdiStatus);
Atul Mittalc0f739f2014-07-31 13:47:47 +05307767 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7768 vos_mem_free(pWdaParams);
Atul Mittal60bd4292014-08-14 12:19:27 +05307769 /* send response to UMAC*/
7770 WDA_SendMsg(pWDA, WDA_SET_TDLS_CHAN_SWITCH_REQ_RSP, pTdlsChanSwitchParams, 0) ;
Atul Mittalc0f739f2014-07-31 13:47:47 +05307771
7772 return ;
7773}
7774VOS_STATUS WDA_ProcessSetTdlsChanSwitchReq(tWDA_CbContext *pWDA,
7775 tTdlsChanSwitchParams *pTdlsChanSwitchParams)
7776{
7777 WDI_Status status = WDI_STATUS_SUCCESS ;
7778 WDI_SetTDLSChanSwitchReqParamsType *wdiSetTDLSChanSwitchReqParam =
7779 (WDI_SetTDLSChanSwitchReqParamsType *)vos_mem_malloc(
7780 sizeof(WDI_SetTDLSChanSwitchReqParamsType));
7781 tWDA_ReqParams *pWdaParams = NULL;
7782
7783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7784 "Enter: %s ",__func__);
7785 if(NULL == wdiSetTDLSChanSwitchReqParam)
7786 {
7787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7788 "%s: VOS MEM Alloc Failure", __func__);
7789 VOS_ASSERT(0);
7790 return VOS_STATUS_E_NOMEM;
7791 }
7792
7793 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7794 if(NULL == pWdaParams)
7795 {
7796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7797 "%s: VOS MEM Alloc Failure", __func__);
7798 vos_mem_free(pTdlsChanSwitchParams);
7799 vos_mem_free(wdiSetTDLSChanSwitchReqParam);
7800 VOS_ASSERT(0);
7801 return VOS_STATUS_E_NOMEM;
7802 }
7803 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.staIdx =
7804 pTdlsChanSwitchParams->staIdx;
7805 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.isOffchannelInitiator =
7806 pTdlsChanSwitchParams->tdlsSwMode;
7807 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetOperClass =
7808 pTdlsChanSwitchParams->operClass;
7809 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetChannel =
7810 pTdlsChanSwitchParams->tdlsOffCh;
7811 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.secondaryChannelOffset =
7812 pTdlsChanSwitchParams->tdlsOffChBwOffset;
7813
7814
7815 /* Store msg pointer from PE, as this will be used for response */
7816 pWdaParams->wdaMsgParam = (void *)pTdlsChanSwitchParams ;
7817 /* store Params pass it to WDI */
7818 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSChanSwitchReqParam ;
7819 pWdaParams->pWdaContext = pWDA;
7820 status = WDI_SetTDLSChanSwitchReq(wdiSetTDLSChanSwitchReqParam,
7821 (WDI_SetTDLSChanSwitchReqParamsRspCb)
7822 WDA_SetTDLSChanSwitchReqParamsCallback,
7823 pWdaParams);
7824 if(IS_WDI_STATUS_FAILURE(status))
7825 {
7826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7827 "Failure in TDLS Channel Switch Req WDI API, free all the memory" );
7828 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7829 vos_mem_free(pWdaParams->wdaMsgParam);
7830 vos_mem_free(pWdaParams);
7831 }
7832 return CONVERT_WDI2VOS_STATUS(status);
7833}
7834#endif /*FEATURE_WLAN_TDLS*/
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307835
7836
Jeff Johnson295189b2012-06-20 16:38:30 -07007837#ifdef WLAN_FEATURE_VOWIFI_11R
7838/*
7839 * FUNCTION: WDA_AggrAddTSReqCallback
7840 * send ADD AGGREGATED TS RSP back to PE
7841 */
7842void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
7843{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007844 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307845 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007846 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007847 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07007848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007849 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007850 if(NULL == pWdaParams)
7851 {
7852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007853 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007854 VOS_ASSERT(0) ;
7855 return ;
7856 }
7857
7858 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05307859 if (NULL == pWDA)
7860 {
7861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7862 "%s:pWDA is NULL", __func__);
7863 VOS_ASSERT(0);
7864 return ;
7865 }
7866
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007867 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007868
7869 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
7870 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007871 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007872 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007873 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007874
7875 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7876 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007877 return ;
7878}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07007879/*
7880 * FUNCTION: WDA_ProcessAddTSReq
7881 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
7882 */
7883VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
7884 tAggrAddTsParams *pAggrAddTsReqParams)
7885{
7886 WDI_Status status = WDI_STATUS_SUCCESS ;
7887 int i;
7888 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007889 tWDA_ReqParams *pWdaParams = NULL;
7890
7891
Jeff Johnson295189b2012-06-20 16:38:30 -07007892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007893 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007894 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
7895 sizeof(WDI_AggrAddTSReqParamsType)) ;
7896 if(NULL == wdiAggrAddTSReqParam)
7897 {
7898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007899 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007900 VOS_ASSERT(0);
7901 return VOS_STATUS_E_NOMEM;
7902 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007903
7904
7905 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7906 if(NULL == pWdaParams)
7907 {
7908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007909 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007910 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007911 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007912 VOS_ASSERT(0);
7913 return VOS_STATUS_E_NOMEM;
7914 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007915 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
7916 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
7917 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007918 for( i = 0; i < WDI_MAX_NO_AC; i++ )
7919 {
7920 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
7921 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
7922 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07007923 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
7924 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
7925 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
7926 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
7927 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
7928 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
7929 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
7930 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
7931 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
7932 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
7933 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
7934 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
7935 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
7936 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
7937 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
7938 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07007939 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
7940 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07007941 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
7942 pAggrAddTsReqParams->tspec[i].nomMsduSz;
7943 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
7944 pAggrAddTsReqParams->tspec[i].maxMsduSz;
7945 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
7946 pAggrAddTsReqParams->tspec[i].minSvcInterval;
7947 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
7948 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
7949 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
7950 pAggrAddTsReqParams->tspec[i].inactInterval;
7951 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
7952 pAggrAddTsReqParams->tspec[i].suspendInterval;
7953 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
7954 pAggrAddTsReqParams->tspec[i].svcStartTime;
7955 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
7956 pAggrAddTsReqParams->tspec[i].minDataRate;
7957 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
7958 pAggrAddTsReqParams->tspec[i].meanDataRate;
7959 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
7960 pAggrAddTsReqParams->tspec[i].peakDataRate;
7961 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
7962 pAggrAddTsReqParams->tspec[i].maxBurstSz;
7963 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
7964 pAggrAddTsReqParams->tspec[i].delayBound;
7965 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
7966 pAggrAddTsReqParams->tspec[i].minPhyRate;
7967 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
7968 pAggrAddTsReqParams->tspec[i].surplusBw;
7969 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
7970 pAggrAddTsReqParams->tspec[i].mediumTime;
7971 }
7972
7973 /* TODO: tAggrAddTsParams doesn't have the following fields */
7974#if 0
7975 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
7976 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
7977 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
7978 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
7979#endif
7980 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
7981
7982 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007983 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007984 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007985 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
7986
7987 pWdaParams->pWdaContext = pWDA;
7988
Jeff Johnson295189b2012-06-20 16:38:30 -07007989 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007990 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
7991
Jeff Johnson295189b2012-06-20 16:38:30 -07007992 if(IS_WDI_STATUS_FAILURE(status))
7993 {
7994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7995 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007996 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7997 vos_mem_free(pWdaParams);
7998
7999 /* send the failure response back to PE*/
8000 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
8001 {
8002 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
8003 }
8004
8005 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
8006 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008007 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008008 return CONVERT_WDI2VOS_STATUS(status) ;
8009}
8010#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07008011/*
Mihir Shetea4306052014-03-25 00:02:54 +05308012 * FUNCTION: WDA_EnterImpsRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008013 * send Enter IMPS RSP back to PE
8014 */
Mihir Shetea4306052014-03-25 00:02:54 +05308015void WDA_EnterImpsRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008016{
Mihir Shetea4306052014-03-25 00:02:54 +05308017 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308018 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05308019
Jeff Johnson295189b2012-06-20 16:38:30 -07008020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Mihir Shetea4306052014-03-25 00:02:54 +05308021 "<------ %s status=%d" ,__func__,status);
8022 if(NULL == pWdaParams)
8023 {
8024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8025 "%s: pWdaParams received NULL", __func__);
8026 VOS_ASSERT(0);
8027 return;
8028 }
8029
8030 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308031 if (NULL == pWDA)
8032 {
8033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8034 "%s:pWDA is NULL", __func__);
8035 VOS_ASSERT(0);
8036 return ;
8037 }
Mihir Shetea4306052014-03-25 00:02:54 +05308038
8039 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8040 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008041 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008042 return ;
8043}
Mihir Shetea4306052014-03-25 00:02:54 +05308044
8045
8046/*
8047 * FUNCTION: WDA_EnterImpsReqCallback
8048 * Free memory and send Enter IMPS RSP back to PE.
8049 * Invoked when Enter IMPS REQ failed in WDI and no RSP callback is generated.
8050 */
8051void WDA_EnterImpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8052{
8053 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308054 tWDA_CbContext *pWDA = NULL;
Mihir Shetea4306052014-03-25 00:02:54 +05308055
8056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8057 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8058
8059 if(NULL == pWdaParams)
8060 {
8061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8062 "%s: pWdaParams received NULL", __func__);
8063 VOS_ASSERT(0);
8064 return;
8065 }
8066
8067 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308068 if (NULL == pWDA)
8069 {
8070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8071 "%s:pWDA is NULL", __func__);
8072 VOS_ASSERT(0);
8073 return ;
8074 }
8075
Mihir Shetea4306052014-03-25 00:02:54 +05308076
8077 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8078 {
8079 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8080 vos_mem_free(pWdaParams);
8081 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
8082 CONVERT_WDI2SIR_STATUS(wdiStatus));
8083 }
8084
8085 return;
8086}
Jeff Johnson295189b2012-06-20 16:38:30 -07008087/*
8088 * FUNCTION: WDA_ProcessEnterImpsReq
8089 * Request to WDI to Enter IMPS power state.
8090 */
8091VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
8092{
8093 WDI_Status status = WDI_STATUS_SUCCESS ;
Mihir Shetea4306052014-03-25 00:02:54 +05308094 WDI_EnterImpsReqParamsType *wdiEnterImpsReqParams;
8095 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008097 "------> %s " ,__func__);
Mihir Shetea4306052014-03-25 00:02:54 +05308098
8099
8100 wdiEnterImpsReqParams = vos_mem_malloc(sizeof(WDI_EnterImpsReqParamsType));
8101 if (NULL == wdiEnterImpsReqParams)
8102 {
8103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8104 "%s: VOS MEM Alloc Failure", __func__);
8105 VOS_ASSERT(0);
8106 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
8107 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
8108 return VOS_STATUS_E_NOMEM;
8109 }
8110
8111 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8112 if (NULL == pWdaParams)
8113 {
8114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8115 "%s: VOS MEM Alloc Failure", __func__);
8116 VOS_ASSERT(0);
8117 vos_mem_free(wdiEnterImpsReqParams);
8118 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL ,
8119 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
8120 return VOS_STATUS_E_NOMEM;
8121 }
8122
8123 wdiEnterImpsReqParams->wdiReqStatusCB = WDA_EnterImpsReqCallback;
8124 wdiEnterImpsReqParams->pUserData = pWdaParams;
8125
8126 pWdaParams->wdaWdiApiMsgParam = wdiEnterImpsReqParams;
8127 pWdaParams->wdaMsgParam = NULL;
8128 pWdaParams->pWdaContext = pWDA;
8129
8130 status = WDI_EnterImpsReq(wdiEnterImpsReqParams,
8131 (WDI_EnterImpsRspCb)WDA_EnterImpsRspCallback,
8132 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008133 if(IS_WDI_STATUS_FAILURE(status))
8134 {
8135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8136 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Mihir Shetea4306052014-03-25 00:02:54 +05308137 vos_mem_free(wdiEnterImpsReqParams);
8138 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008139 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008140 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008141 return CONVERT_WDI2VOS_STATUS(status) ;
8142}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308143
8144/*
8145 * FUNCTION: WDA_ExitImpsRespCallback
8146 * send Exit IMPS RSP back to PE
8147 */
8148void WDA_ExitImpsRespCallback(WDI_Status status, void* pUserData)
8149{
8150 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8151 tWDA_CbContext *pWDA;
8152
8153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8154 "<------ %s " ,__func__);
8155
8156 if (NULL == pWdaParams)
8157 {
8158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8159 "%s: pWdaParams received NULL", __func__);
8160 VOS_ASSERT(0);
8161 return;
8162 }
8163 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8164
8165 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8166 vos_mem_free(pWdaParams);
8167
8168 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status));
8169 return;
8170}
8171
Jeff Johnson295189b2012-06-20 16:38:30 -07008172/*
8173 * FUNCTION: WDA_ExitImpsReqCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008174 */
8175void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
8176{
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308177 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008179 "<------ %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308180 if(NULL == pWdaParams)
8181 {
8182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8183 "%s: pWdaParams received NULL", __func__);
8184 VOS_ASSERT(0);
8185 return;
8186 }
8187
8188 if (IS_WDI_STATUS_FAILURE(status))
8189 {
8190 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8191 vos_mem_free(pWdaParams);
8192 if (WDI_STATUS_DEV_INTERNAL_FAILURE == status)
8193 {
8194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8195 FL("reload wlan driver"));
8196 wpalWlanReload();
8197 }
8198 }
8199 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07008200}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308201
Jeff Johnson295189b2012-06-20 16:38:30 -07008202/*
8203 * FUNCTION: WDA_ProcessExitImpsReq
8204 * Request to WDI to Exit IMPS power state.
8205 */
8206VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
8207{
8208 WDI_Status status = WDI_STATUS_SUCCESS ;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308209 tWDA_ReqParams *pWdaParams;
8210 WDI_ExitImpsReqParamsType *wdiExitImpsReqParams;
8211
Jeff Johnson295189b2012-06-20 16:38:30 -07008212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008213 "------> %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308214 wdiExitImpsReqParams = (WDI_ExitImpsReqParamsType *)vos_mem_malloc(
8215 sizeof(WDI_ExitImpsReqParamsType));
8216 if (NULL == wdiExitImpsReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008217 {
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8219 "%s: VOS MEM Alloc Failure", __func__);
8220 VOS_ASSERT(0);
8221 return VOS_STATUS_E_NOMEM;
8222 }
8223 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8224 if(NULL == pWdaParams)
8225 {
8226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8227 "%s: VOS MEM Alloc Failure", __func__);
8228 VOS_ASSERT(0);
8229 vos_mem_free(wdiExitImpsReqParams);
8230 return VOS_STATUS_E_NOMEM;
8231 }
8232 wdiExitImpsReqParams->wdiReqStatusCB = WDA_ExitImpsReqCallback;
8233 wdiExitImpsReqParams->pUserData = pWdaParams;
8234
8235 /* Store param pointer as passed in by caller */
8236 /* store Params pass it to WDI */
8237 pWdaParams->wdaWdiApiMsgParam = wdiExitImpsReqParams;
8238 pWdaParams->pWdaContext = pWDA;
8239 pWdaParams->wdaMsgParam = wdiExitImpsReqParams;
8240 status = WDI_ExitImpsReq(wdiExitImpsReqParams,
8241 (WDI_ExitImpsRspCb)WDA_ExitImpsRespCallback,
8242 pWdaParams);
8243 if (IS_WDI_STATUS_FAILURE(status))
8244 {
8245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8246 "Failure in Exit IMPS REQ WDI API, free all the memory " );
8247 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8248 vos_mem_free(pWdaParams);
8249 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008250 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008251 return CONVERT_WDI2VOS_STATUS(status) ;
8252}
Jeff Johnson295189b2012-06-20 16:38:30 -07008253/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008254 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008255 * send Enter BMPS RSP back to PE
8256 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008257void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008258{
8259 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308260 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008261 tEnterBmpsParams *pEnterBmpsRspParams;
8262
Jeff Johnson295189b2012-06-20 16:38:30 -07008263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008264 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008265 if(NULL == pWdaParams)
8266 {
8267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008268 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008269 VOS_ASSERT(0) ;
8270 return ;
8271 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008272
8273 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308274 if (NULL == pWDA)
8275 {
8276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8277 "%s:pWDA is NULL", __func__);
8278 VOS_ASSERT(0);
8279 return ;
8280 }
8281
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008282 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
8283
8284 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008285 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008286
8287 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008288 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008289 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
8290
Jeff Johnson295189b2012-06-20 16:38:30 -07008291 return ;
8292}
Jeff Johnson295189b2012-06-20 16:38:30 -07008293/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008294 * FUNCTION: WDA_EnterBmpsReqCallback
8295 * Free memory and send Enter BMPS RSP back to PE.
8296 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
8297 */
8298void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8299{
8300 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308301 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008302 tEnterBmpsParams *pEnterBmpsRspParams;
8303
8304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8305 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8306
8307 if(NULL == pWdaParams)
8308 {
8309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8310 "%s: pWdaParams received NULL", __func__);
8311 VOS_ASSERT(0);
8312 return;
8313 }
8314
8315 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308316 if (NULL == pWDA)
8317 {
8318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8319 "%s:pWDA is NULL", __func__);
8320 VOS_ASSERT(0);
8321 return ;
8322 }
8323
Yue Ma7f44bbe2013-04-12 11:47:39 -07008324 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
8325 pEnterBmpsRspParams->status = wdiStatus;
8326
8327 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8328 {
8329 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8330 vos_mem_free(pWdaParams);
8331 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
8332 }
8333
8334 return;
8335}
8336/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008337 * FUNCTION: WDA_ProcessEnterBmpsReq
8338 * Request to WDI to Enter BMPS power state.
8339 */
8340VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
8341 tEnterBmpsParams *pEnterBmpsReqParams)
8342{
8343 WDI_Status status = WDI_STATUS_SUCCESS;
8344 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
8345 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008347 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008348 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
8349 {
8350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008351 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008352 VOS_ASSERT(0);
8353 return VOS_STATUS_E_FAILURE;
8354 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008355 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
8356 if (NULL == wdiEnterBmpsReqParams)
8357 {
8358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008359 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008360 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008361 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
8362 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008363 return VOS_STATUS_E_NOMEM;
8364 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008365 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8366 if (NULL == pWdaParams)
8367 {
8368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008369 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008370 VOS_ASSERT(0);
8371 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008372 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
8373 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008374 return VOS_STATUS_E_NOMEM;
8375 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008376 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
8377 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
8378 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
8379 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08008380 // For ESE and 11R Roaming
Jeff Johnson295189b2012-06-20 16:38:30 -07008381 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
8382 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
8383 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008384 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
8385 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008386
Jeff Johnson295189b2012-06-20 16:38:30 -07008387 /* Store param pointer as passed in by caller */
8388 /* store Params pass it to WDI */
8389 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008390 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008391 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008392 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008393 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008394 if (IS_WDI_STATUS_FAILURE(status))
8395 {
8396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8397 "Failure in Enter BMPS REQ WDI API, free all the memory" );
8398 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008399 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07008400 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008401 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008402 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008403 return CONVERT_WDI2VOS_STATUS(status);
8404}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008405
8406
8407static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
8408 WDI_Status wdiStatus,
8409 tExitBmpsParams *pExitBmpsReqParams)
8410{
8411 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
8412
8413 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
8414}
8415
8416
Jeff Johnson295189b2012-06-20 16:38:30 -07008417/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008418 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008419 * send Exit BMPS RSP back to PE
8420 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008421void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008422{
8423 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308424 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008425 tExitBmpsParams *pExitBmpsRspParams;
8426
Jeff Johnson295189b2012-06-20 16:38:30 -07008427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008428 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008429 if(NULL == pWdaParams)
8430 {
8431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008432 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008433 VOS_ASSERT(0) ;
8434 return ;
8435 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008436
8437 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308438 if (NULL == pWDA)
8439 {
8440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8441 "%s:pWDA is NULL", __func__);
8442 VOS_ASSERT(0);
8443 return ;
8444 }
8445
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008446 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
8447
8448 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008449 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008450
Jeff Johnson295189b2012-06-20 16:38:30 -07008451 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8452 vos_mem_free(pWdaParams) ;
8453
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008454 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008455 return ;
8456}
Jeff Johnson295189b2012-06-20 16:38:30 -07008457/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008458 * FUNCTION: WDA_ExitBmpsReqCallback
8459 * Free memory and send Exit BMPS RSP back to PE.
8460 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
8461 */
8462void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8463{
8464 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308465 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008466 tExitBmpsParams *pExitBmpsRspParams;
8467
8468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8469 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8470
8471 if(NULL == pWdaParams)
8472 {
8473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8474 "%s: pWdaParams received NULL", __func__);
8475 VOS_ASSERT(0);
8476 return;
8477 }
8478
8479 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308480 if (NULL == pWDA)
8481 {
8482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8483 "%s:pWDA is NULL", __func__);
8484 VOS_ASSERT(0);
8485 return ;
8486 }
8487
Yue Ma7f44bbe2013-04-12 11:47:39 -07008488 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
8489 pExitBmpsRspParams->status = wdiStatus;
8490
8491 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8492 {
8493 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8494 vos_mem_free(pWdaParams);
8495 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
8496 }
8497
8498 return;
8499}
8500/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008501 * FUNCTION: WDA_ProcessExitBmpsReq
8502 * Request to WDI to Exit BMPS power state.
8503 */
8504VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
8505 tExitBmpsParams *pExitBmpsReqParams)
8506{
8507 WDI_Status status = WDI_STATUS_SUCCESS ;
8508 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
8509 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
8510 sizeof(WDI_ExitBmpsReqParamsType)) ;
8511 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008513 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008514 if(NULL == wdiExitBmpsReqParams)
8515 {
8516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008517 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008518 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008519 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008520 return VOS_STATUS_E_NOMEM;
8521 }
8522 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8523 if(NULL == pWdaParams)
8524 {
8525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008526 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008527 VOS_ASSERT(0);
8528 vos_mem_free(wdiExitBmpsReqParams);
8529 return VOS_STATUS_E_NOMEM;
8530 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008531 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07008532
8533 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
8534
Yue Ma7f44bbe2013-04-12 11:47:39 -07008535 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
8536 wdiExitBmpsReqParams->pUserData = pWdaParams;
8537
Jeff Johnson295189b2012-06-20 16:38:30 -07008538 /* Store param pointer as passed in by caller */
8539 /* store Params pass it to WDI */
8540 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
8541 pWdaParams->pWdaContext = pWDA;
8542 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008543 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008544 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008545 if(IS_WDI_STATUS_FAILURE(status))
8546 {
8547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8548 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008549 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8550 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008551 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008552 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008553 return CONVERT_WDI2VOS_STATUS(status) ;
8554}
Jeff Johnson295189b2012-06-20 16:38:30 -07008555/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008556 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008557 * send Enter UAPSD RSP back to PE
8558 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008559void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008560{
8561 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308562 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008563 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008565 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008566 if(NULL == pWdaParams)
8567 {
8568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008569 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008570 VOS_ASSERT(0) ;
8571 return ;
8572 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008573
8574 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308575 if (NULL == pWDA)
8576 {
8577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8578 "%s:pWDA is NULL", __func__);
8579 VOS_ASSERT(0);
8580 return ;
8581 }
8582
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008583 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
8584
8585 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008586 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008587
Jeff Johnson295189b2012-06-20 16:38:30 -07008588 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8589 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008590 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008591 return ;
8592}
Jeff Johnson295189b2012-06-20 16:38:30 -07008593/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008594 * FUNCTION: WDA_EnterUapsdReqCallback
8595 * Free memory and send Enter UAPSD RSP back to PE.
8596 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
8597 */
8598void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
8599{
8600 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8601 tWDA_CbContext *pWDA;
8602 tUapsdParams *pEnterUapsdRsqParams;
8603
8604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8605 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8606
8607 if(NULL == pWdaParams)
8608 {
8609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8610 "%s: pWdaParams received NULL", __func__);
8611 VOS_ASSERT(0);
8612 return;
8613 }
8614
8615 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308616 if (NULL == pWDA)
8617 {
8618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8619 "%s:pWDA is NULL", __func__);
8620 VOS_ASSERT(0);
8621 return ;
8622 }
8623
Yue Ma7f44bbe2013-04-12 11:47:39 -07008624 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
8625 pEnterUapsdRsqParams->status = wdiStatus;
8626
8627 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8628 {
8629 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8630 vos_mem_free(pWdaParams);
8631 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
8632 }
8633
8634 return;
8635}
8636/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008637 * FUNCTION: WDA_ProcessEnterUapsdReq
8638 * Request to WDI to Enter UAPSD power state.
8639 */
8640VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
8641 tUapsdParams *pEnterUapsdReqParams)
8642{
8643 WDI_Status status = WDI_STATUS_SUCCESS ;
8644 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
8645 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
8646 sizeof(WDI_EnterUapsdReqParamsType)) ;
8647 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008649 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008650 if(NULL == wdiEnterUapsdReqParams)
8651 {
8652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008653 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008654 VOS_ASSERT(0);
8655 return VOS_STATUS_E_NOMEM;
8656 }
8657 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8658 if(NULL == pWdaParams)
8659 {
8660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008661 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008662 VOS_ASSERT(0);
8663 vos_mem_free(wdiEnterUapsdReqParams);
8664 return VOS_STATUS_E_NOMEM;
8665 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008666 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
8667 pEnterUapsdReqParams->beDeliveryEnabled;
8668 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
8669 pEnterUapsdReqParams->beTriggerEnabled;
8670 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
8671 pEnterUapsdReqParams->bkDeliveryEnabled;
8672 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
8673 pEnterUapsdReqParams->bkTriggerEnabled;
8674 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
8675 pEnterUapsdReqParams->viDeliveryEnabled;
8676 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
8677 pEnterUapsdReqParams->viTriggerEnabled;
8678 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
8679 pEnterUapsdReqParams->voDeliveryEnabled;
8680 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
8681 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07008682 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008683
Yue Ma7f44bbe2013-04-12 11:47:39 -07008684 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
8685 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008686
Jeff Johnson295189b2012-06-20 16:38:30 -07008687 /* Store param pointer as passed in by caller */
8688 /* store Params pass it to WDI */
8689 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
8690 pWdaParams->pWdaContext = pWDA;
8691 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008692 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008693 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008694 if(IS_WDI_STATUS_FAILURE(status))
8695 {
8696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8697 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
8698 vos_mem_free(pWdaParams->wdaMsgParam) ;
8699 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8700 vos_mem_free(pWdaParams) ;
8701 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008702 return CONVERT_WDI2VOS_STATUS(status) ;
8703}
Jeff Johnson295189b2012-06-20 16:38:30 -07008704/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008705 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008706 * send Exit UAPSD RSP back to PE
8707 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008708void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008709{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008710
8711 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8712 tWDA_CbContext *pWDA;
8713 tExitUapsdParams *pExitUapsdRspParams;
8714
Jeff Johnson295189b2012-06-20 16:38:30 -07008715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008716 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008717 if(NULL == pWdaParams)
8718 {
8719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008720 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008721 VOS_ASSERT(0);
8722 return;
8723 }
8724
8725 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8726 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
8727
8728 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008729 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008730
8731 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8732 vos_mem_free(pWdaParams) ;
8733
8734 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008735 return ;
8736}
Jeff Johnson295189b2012-06-20 16:38:30 -07008737/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008738 * FUNCTION: WDA_ExitUapsdReqCallback
8739 * Free memory and send Exit UAPSD RSP back to PE.
8740 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
8741 */
8742void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
8743{
8744 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308745 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008746 tExitUapsdParams *pExitUapsdRspParams;
8747
8748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8749 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8750
8751 if(NULL == pWdaParams)
8752 {
8753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8754 "%s: pWdaParams received NULL", __func__);
8755 VOS_ASSERT(0);
8756 return;
8757 }
8758
8759 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +05308760 if (NULL == pWDA)
8761 {
8762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8763 "%s:pWDA is NULL", __func__);
8764 VOS_ASSERT(0);
8765 return ;
8766 }
8767
Yue Ma7f44bbe2013-04-12 11:47:39 -07008768 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
8769 pExitUapsdRspParams->status = wdiStatus;
8770
8771 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8772 {
8773 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8774 vos_mem_free(pWdaParams);
8775 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
8776 }
8777
8778 return;
8779}
8780/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008781 * FUNCTION: WDA_ProcessExitUapsdReq
8782 * Request to WDI to Exit UAPSD power state.
8783 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008784VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
8785 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008786{
8787 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008788 tWDA_ReqParams *pWdaParams ;
8789 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
8790 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
8791 sizeof(WDI_ExitUapsdReqParamsType)) ;
8792
Jeff Johnson295189b2012-06-20 16:38:30 -07008793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008794 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008795
8796 if(NULL == wdiExitUapsdReqParams)
8797 {
8798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008799 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008800 VOS_ASSERT(0);
8801 return VOS_STATUS_E_NOMEM;
8802 }
8803 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8804 if(NULL == pWdaParams)
8805 {
8806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008807 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008808 VOS_ASSERT(0);
8809 vos_mem_free(wdiExitUapsdReqParams);
8810 return VOS_STATUS_E_NOMEM;
8811 }
8812
8813 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008814 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
8815 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008816
8817 /* Store param pointer as passed in by caller */
8818 /* store Params pass it to WDI */
8819 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
8820 pWdaParams->pWdaContext = pWDA;
8821 pWdaParams->wdaMsgParam = pExitUapsdParams;
8822
Yue Ma7f44bbe2013-04-12 11:47:39 -07008823 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008824 if(IS_WDI_STATUS_FAILURE(status))
8825 {
8826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8827 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008828 vos_mem_free(pWdaParams->wdaMsgParam) ;
8829 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8830 vos_mem_free(pWdaParams) ;
8831
Jeff Johnson295189b2012-06-20 16:38:30 -07008832 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008833 return CONVERT_WDI2VOS_STATUS(status) ;
8834}
8835
Jeff Johnson295189b2012-06-20 16:38:30 -07008836/*
8837 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
8838 *
8839 */
8840void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
8841{
8842 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008844 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008845 if(NULL == pWdaParams)
8846 {
8847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008848 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008849 VOS_ASSERT(0) ;
8850 return ;
8851 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008852 if( pWdaParams != NULL )
8853 {
8854 if( pWdaParams->wdaWdiApiMsgParam != NULL )
8855 {
8856 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8857 }
8858 if( pWdaParams->wdaMsgParam != NULL )
8859 {
8860 vos_mem_free(pWdaParams->wdaMsgParam) ;
8861 }
8862 vos_mem_free(pWdaParams) ;
8863 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008864 return ;
8865}
Jeff Johnson295189b2012-06-20 16:38:30 -07008866/*
8867 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
8868 * Request to WDI to set the power save params at start.
8869 */
8870VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
8871 tSirPowerSaveCfg *pPowerSaveCfg)
8872{
8873 WDI_Status status = WDI_STATUS_SUCCESS ;
8874 tHalCfg *tlvStruct = NULL ;
8875 tANI_U8 *tlvStructStart = NULL ;
8876 v_PVOID_t *configParam;
8877 tANI_U32 configParamSize;
8878 tANI_U32 *configDataValue;
8879 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
8880 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008882 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008883 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
8884 {
8885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008886 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008887 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008888 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008889 return VOS_STATUS_E_FAILURE;
8890 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008891 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
8892 if (NULL == wdiPowerSaveCfg)
8893 {
8894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008895 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008896 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008897 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008898 return VOS_STATUS_E_NOMEM;
8899 }
8900 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8901 if(NULL == pWdaParams)
8902 {
8903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008904 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008905 VOS_ASSERT(0);
8906 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008907 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008908 return VOS_STATUS_E_NOMEM;
8909 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008910 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
8911 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07008912 if(NULL == configParam)
8913 {
8914 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08008915 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008916 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07008917 vos_mem_free(pWdaParams);
8918 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008919 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008920 return VOS_STATUS_E_NOMEM;
8921 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008922 vos_mem_set(configParam, configParamSize, 0);
8923 wdiPowerSaveCfg->pConfigBuffer = configParam;
8924 tlvStruct = (tHalCfg *)configParam;
8925 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008926 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
8927 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
8928 tlvStruct->length = sizeof(tANI_U32);
8929 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8930 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07008931 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8932 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008933 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
8934 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
8935 tlvStruct->length = sizeof(tANI_U32);
8936 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8937 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07008938 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8939 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008940 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
8941 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
8942 tlvStruct->length = sizeof(tANI_U32);
8943 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8944 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07008945 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8946 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008947 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
8948 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
8949 tlvStruct->length = sizeof(tANI_U32);
8950 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8951 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07008952 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8953 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008954 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
8955 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
8956 tlvStruct->length = sizeof(tANI_U32);
8957 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8958 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07008959 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8960 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008961 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
8962 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
8963 tlvStruct->length = sizeof(tANI_U32);
8964 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8965 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07008966 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8967 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008968 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
8969 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
8970 tlvStruct->length = sizeof(tANI_U32);
8971 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8972 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07008973 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8974 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008975 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
8976 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
8977 tlvStruct->length = sizeof(tANI_U32);
8978 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8979 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
8980 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8981 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008982 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
8983 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
8984 tlvStruct->length = sizeof(tANI_U32);
8985 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8986 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
8987 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8988 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008989 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
8990 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
8991 tlvStruct->length = sizeof(tANI_U32);
8992 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8993 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07008994 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8995 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008996 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
8997 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
8998 tlvStruct->length = sizeof(tANI_U32);
8999 configDataValue = (tANI_U32 *)(tlvStruct + 1);
9000 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07009001 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
9002 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009003 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009004 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009005 /* store Params pass it to WDI */
9006 pWdaParams->wdaMsgParam = configParam;
9007 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
9008 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009009 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
9010 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009011 if(IS_WDI_STATUS_FAILURE(status))
9012 {
9013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9014 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
9015 vos_mem_free(pWdaParams->wdaMsgParam);
9016 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9017 vos_mem_free(pWdaParams);
9018 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009019 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07009020 return CONVERT_WDI2VOS_STATUS(status);
9021}
Jeff Johnson295189b2012-06-20 16:38:30 -07009022/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009023 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009024 *
9025 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009026void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009027{
Yue Ma7f44bbe2013-04-12 11:47:39 -07009028 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9029
Jeff Johnson295189b2012-06-20 16:38:30 -07009030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009031 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009032
9033 if(NULL == pWdaParams)
9034 {
9035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9036 "%s: pWdaParams received NULL", __func__);
9037 VOS_ASSERT(0);
9038 return ;
9039 }
9040
9041 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07009042 vos_mem_free(pWdaParams);
9043
Jeff Johnson295189b2012-06-20 16:38:30 -07009044 return ;
9045}
Jeff Johnson295189b2012-06-20 16:38:30 -07009046/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009047 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
9048 * Free memory.
9049 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
9050 */
9051void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
9052{
9053 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9054
9055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9056 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9057
9058 if(NULL == pWdaParams)
9059 {
9060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9061 "%s: pWdaParams received NULL", __func__);
9062 VOS_ASSERT(0);
9063 return;
9064 }
9065
9066 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9067 {
9068 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9069 vos_mem_free(pWdaParams);
9070 }
9071
9072 return;
9073}
9074/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009075 * FUNCTION: WDA_SetUapsdAcParamsReq
9076 * Request to WDI to set the UAPSD params for an ac (sta mode).
9077 */
9078VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
9079 tUapsdInfo *pUapsdInfo)
9080{
9081 WDI_Status status = WDI_STATUS_SUCCESS;
9082 tWDA_CbContext *pWDA = NULL ;
9083 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
9084 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
9085 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
9086 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009088 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009089 if(NULL == wdiUapsdParams)
9090 {
9091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009092 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009093 VOS_ASSERT(0);
9094 return VOS_STATUS_E_NOMEM;
9095 }
9096 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9097 if(NULL == pWdaParams)
9098 {
9099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009100 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009101 VOS_ASSERT(0);
9102 vos_mem_free(wdiUapsdParams);
9103 return VOS_STATUS_E_NOMEM;
9104 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009105 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
9106 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
9107 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
9108 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
9109 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
9110 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009111 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
9112 wdiUapsdParams->pUserData = pWdaParams;
9113
Jeff Johnson295189b2012-06-20 16:38:30 -07009114 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07009115 pWdaParams->pWdaContext = pWDA;
9116 /* Store param pointer as passed in by caller */
9117 pWdaParams->wdaMsgParam = pUapsdInfo;
9118 /* store Params pass it to WDI */
9119 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009120 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009121 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07009122 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009123 if(IS_WDI_STATUS_FAILURE(status))
9124 {
9125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9126 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
9127 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9128 vos_mem_free(pWdaParams);
9129 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009130 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
9131 return VOS_STATUS_SUCCESS;
9132 else
9133 return VOS_STATUS_E_FAILURE;
9134
Jeff Johnson295189b2012-06-20 16:38:30 -07009135}
9136/*
9137 * FUNCTION: WDA_ClearUapsdAcParamsReq
9138 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
9139 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
9140 * and again enter the UPASD with the modified params. Hence the disable
9141 * function was kept empty.
9142 *
9143 */
9144VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
9145{
9146 /* do nothing */
9147 return VOS_STATUS_SUCCESS;
9148}
Jeff Johnson295189b2012-06-20 16:38:30 -07009149/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009150 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009151 *
9152 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009153void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009154{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009155 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9156
Jeff Johnson295189b2012-06-20 16:38:30 -07009157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009158 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009159
9160 if(NULL == pWdaParams)
9161 {
9162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009163 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009164 VOS_ASSERT(0) ;
9165 return ;
9166 }
9167
9168 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9169 vos_mem_free(pWdaParams->wdaMsgParam);
9170 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009171
Jeff Johnson295189b2012-06-20 16:38:30 -07009172 //print a msg, nothing else to do
9173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009174 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009175 return ;
9176}
Jeff Johnson295189b2012-06-20 16:38:30 -07009177/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009178 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
9179 * Free memory.
9180 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
9181 */
9182void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
9183{
9184 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9185
9186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9187 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9188
9189 if(NULL == pWdaParams)
9190 {
9191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9192 "%s: pWdaParams received NULL", __func__);
9193 VOS_ASSERT(0);
9194 return;
9195 }
9196
9197 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9198 {
9199 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9200 vos_mem_free(pWdaParams->wdaMsgParam);
9201 vos_mem_free(pWdaParams);
9202 }
9203
9204 return;
9205}
9206/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009207 * FUNCTION: WDA_UpdateUapsdParamsReq
9208 * Request to WDI to update UAPSD params (in softAP mode) for a station.
9209 */
9210VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
9211 tUpdateUapsdParams* pUpdateUapsdInfo)
9212{
9213 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009214 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009215 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
9216 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
9217 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009218 tWDA_ReqParams *pWdaParams = NULL;
9219
Jeff Johnson295189b2012-06-20 16:38:30 -07009220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009221 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009222 if(NULL == wdiUpdateUapsdParams)
9223 {
9224 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009225 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009226 VOS_ASSERT(0);
9227 return VOS_STATUS_E_NOMEM;
9228 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009229 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
9230 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
9231 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009232 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
9233 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009234
9235 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9236 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009237 {
9238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009239 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009240 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009241 vos_mem_free(pUpdateUapsdInfo);
9242 vos_mem_free(wdiUpdateUapsdParams);
9243 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07009244 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009245 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009246 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07009247 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009248 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
9249 pWdaParams->pWdaContext = pWDA;
9250
Jeff Johnson43971f52012-07-17 12:26:56 -07009251 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009252 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009253 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009254
Jeff Johnson43971f52012-07-17 12:26:56 -07009255 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009256 {
9257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9258 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009259 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
9260 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9261 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009262 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009263 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009264 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009265}
Jeff Johnson295189b2012-06-20 16:38:30 -07009266/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009267 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009268 *
9269 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009270void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009271{
9272 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009274 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009275 if(WDI_STATUS_SUCCESS != wdiStatus)
9276 {
9277 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009278 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009279 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009280 if(NULL == pWdaParams)
9281 {
9282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009283 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009284 VOS_ASSERT(0) ;
9285 return ;
9286 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009287 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9288 vos_mem_free(pWdaParams->wdaMsgParam);
9289 vos_mem_free(pWdaParams);
9290 return ;
9291}
Jeff Johnson295189b2012-06-20 16:38:30 -07009292/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009293 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
9294 * Free memory.
9295 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
9296 */
9297void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9298{
9299 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9300
9301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9302 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9303
9304 if(NULL == pWdaParams)
9305 {
9306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9307 "%s: pWdaParams received NULL", __func__);
9308 VOS_ASSERT(0);
9309 return;
9310 }
9311
9312 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9313 {
9314 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9315 vos_mem_free(pWdaParams->wdaMsgParam);
9316 vos_mem_free(pWdaParams);
9317 }
9318
9319 return;
9320}
9321/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009322 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
9323 *
9324 */
9325VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
9326 tSirWlanSetRxpFilters *pWlanSuspendParam)
9327{
Jeff Johnson295189b2012-06-20 16:38:30 -07009328 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009329 WDI_Status wstatus;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +05309330 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009331 tWDA_ReqParams *pWdaParams ;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +05309332 /* Sanity Check
9333 * This is very unlikely and add assert to collect more info next time */
9334 if(NULL == pWlanSuspendParam)
9335 {
9336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9337 "%s: pWlanSuspendParam received NULL", __func__);
9338 VOS_ASSERT(0) ;
9339 return VOS_STATUS_E_FAULT;
9340 }
9341 wdiRxpFilterParams = (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
9342 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009344 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009345 if(NULL == wdiRxpFilterParams)
9346 {
9347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009348 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009349 VOS_ASSERT(0);
9350 vos_mem_free(pWlanSuspendParam);
9351 return VOS_STATUS_E_NOMEM;
9352 }
9353 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9354 if(NULL == pWdaParams)
9355 {
9356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009357 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009358 VOS_ASSERT(0);
9359 vos_mem_free(wdiRxpFilterParams);
9360 vos_mem_free(pWlanSuspendParam);
9361 return VOS_STATUS_E_NOMEM;
9362 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009363 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
9364 pWlanSuspendParam->setMcstBcstFilter;
9365 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
9366 pWlanSuspendParam->configuredMcstBcstFilterSetting;
9367
Yue Ma7f44bbe2013-04-12 11:47:39 -07009368 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
9369 wdiRxpFilterParams->pUserData = pWdaParams;
9370
Jeff Johnson295189b2012-06-20 16:38:30 -07009371 pWdaParams->pWdaContext = pWDA;
9372 pWdaParams->wdaMsgParam = pWlanSuspendParam;
9373 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009374 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009375 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07009376 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009377 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009378 {
9379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9380 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009381 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009382 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9383 vos_mem_free(pWdaParams->wdaMsgParam);
9384 vos_mem_free(pWdaParams);
9385 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009386 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009387}
Jeff Johnson295189b2012-06-20 16:38:30 -07009388/*
9389 * FUNCTION: WDA_WdiIndicationCallback
9390 *
9391 */
9392void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
9393 void* pUserData)
9394{
9395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009396 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009397}
Jeff Johnson295189b2012-06-20 16:38:30 -07009398/*
9399 * FUNCTION: WDA_ProcessWlanSuspendInd
9400 *
9401 */
9402VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
9403 tSirWlanSuspendParam *pWlanSuspendParam)
9404{
9405 WDI_Status wdiStatus;
9406 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009408 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009409 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
9410 pWlanSuspendParam->configuredMcstBcstFilterSetting;
9411 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
9412 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07009414 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
9415 if(WDI_STATUS_PENDING == wdiStatus)
9416 {
9417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009418 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009419 }
9420 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
9421 {
9422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009423 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009424 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009425 vos_mem_free(pWlanSuspendParam);
9426 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9427}
9428
Chet Lanctot186b5732013-03-18 10:26:30 -07009429#ifdef WLAN_FEATURE_11W
9430/*
9431 * FUNCTION: WDA_ProcessExcludeUnecryptInd
9432 *
9433 */
9434VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
9435 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
9436{
9437 WDI_Status wdiStatus;
9438 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
9439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9440 "------> %s ", __func__);
9441
9442 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
9443 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
9444 sizeof(tSirMacAddr));
9445
9446 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
9447 wdiExclUnencryptParams.pUserData = pWDA;
9448
9449 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
9450 if(WDI_STATUS_PENDING == wdiStatus)
9451 {
9452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9453 "Pending received for %s:%d ", __func__, __LINE__ );
9454 }
9455 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
9456 {
9457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9458 "Failure in %s:%d ", __func__, __LINE__ );
9459 }
9460 vos_mem_free(pExclUnencryptParam);
9461 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9462}
9463#endif
9464
Jeff Johnson295189b2012-06-20 16:38:30 -07009465/*
9466 * FUNCTION: WDA_ProcessWlanResumeCallback
9467 *
9468 */
9469void WDA_ProcessWlanResumeCallback(
9470 WDI_SuspendResumeRspParamsType *resumeRspParams,
9471 void* pUserData)
9472{
9473 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009475 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009476 if(NULL == pWdaParams)
9477 {
9478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009479 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009480 VOS_ASSERT(0) ;
9481 return ;
9482 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009483 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
9484 {
9485 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009486 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009487 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009488 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9489 vos_mem_free(pWdaParams->wdaMsgParam);
9490 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009491 return ;
9492}
Jeff Johnson295189b2012-06-20 16:38:30 -07009493/*
9494 * FUNCTION: WDA_ProcessWlanResumeReq
9495 *
9496 */
9497VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
9498 tSirWlanResumeParam *pWlanResumeParam)
9499{
9500 WDI_Status wdiStatus;
9501 WDI_ResumeParamsType *wdiResumeParams =
9502 (WDI_ResumeParamsType *)vos_mem_malloc(
9503 sizeof(WDI_ResumeParamsType) ) ;
9504 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009506 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009507 if(NULL == wdiResumeParams)
9508 {
9509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009510 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009511 VOS_ASSERT(0);
9512 return VOS_STATUS_E_NOMEM;
9513 }
9514 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9515 if(NULL == pWdaParams)
9516 {
9517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009518 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009519 VOS_ASSERT(0);
9520 vos_mem_free(wdiResumeParams);
9521 return VOS_STATUS_E_NOMEM;
9522 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009523 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
9524 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07009526 wdiResumeParams->wdiReqStatusCB = NULL;
9527 pWdaParams->wdaMsgParam = pWlanResumeParam;
9528 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
9529 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009530 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
9531 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
9532 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009533 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9534 {
9535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9536 "Failure in Host Resume REQ WDI API, free all the memory " );
9537 VOS_ASSERT(0);
9538 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9539 vos_mem_free(pWdaParams->wdaMsgParam);
9540 vos_mem_free(pWdaParams);
9541 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009542 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9543}
9544
Jeff Johnson295189b2012-06-20 16:38:30 -07009545/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009546 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009547 *
9548 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009549void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009550{
9551 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009553 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009554 if(NULL == pWdaParams)
9555 {
9556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009557 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009558 VOS_ASSERT(0) ;
9559 return ;
9560 }
9561
9562 vos_mem_free(pWdaParams->wdaMsgParam) ;
9563 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9564 vos_mem_free(pWdaParams) ;
9565 /*
9566 * No respone required for SetBeaconFilter req so just free the request
9567 * param here
9568 */
9569
Jeff Johnson295189b2012-06-20 16:38:30 -07009570 return ;
9571}
Jeff Johnson295189b2012-06-20 16:38:30 -07009572/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009573 * FUNCTION: WDA_SetBeaconFilterReqCallback
9574 * Free memory.
9575 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
9576 */
9577void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9578{
9579 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9580
9581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9582 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9583
9584 if(NULL == pWdaParams)
9585 {
9586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9587 "%s: pWdaParams received NULL", __func__);
9588 VOS_ASSERT(0);
9589 return;
9590 }
9591
9592 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9593 {
9594 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9595 vos_mem_free(pWdaParams->wdaMsgParam);
9596 vos_mem_free(pWdaParams);
9597 }
9598
9599 return;
9600}
9601/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009602 * FUNCTION: WDA_SetBeaconFilterReq
9603 * Request to WDI to send the beacon filtering related information.
9604 */
9605VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
9606 tBeaconFilterMsg* pBeaconFilterInfo)
9607{
9608 WDI_Status status = WDI_STATUS_SUCCESS;
9609 tANI_U8 *dstPtr, *srcPtr;
9610 tANI_U8 filterLength;
9611 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
9612 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
9613 sizeof(WDI_BeaconFilterReqParamsType) ) ;
9614 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009616 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009617 if(NULL == wdiBeaconFilterInfo)
9618 {
9619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009620 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009621 VOS_ASSERT(0);
9622 return VOS_STATUS_E_NOMEM;
9623 }
9624 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9625 if(NULL == pWdaParams)
9626 {
9627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009628 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009629 VOS_ASSERT(0);
9630 vos_mem_free(wdiBeaconFilterInfo);
9631 return VOS_STATUS_E_NOMEM;
9632 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009633 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
9634 pBeaconFilterInfo->beaconInterval;
9635 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
9636 pBeaconFilterInfo->capabilityInfo;
9637 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
9638 pBeaconFilterInfo->capabilityMask;
9639 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07009640
9641 //Fill the BssIdx
9642 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
9643
Jeff Johnson295189b2012-06-20 16:38:30 -07009644 //Fill structure with info contained in the beaconFilterTable
9645 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
9646 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
9647 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
9648 if(WDI_BEACON_FILTER_LEN < filterLength)
9649 {
9650 filterLength = WDI_BEACON_FILTER_LEN;
9651 }
9652 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009653 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
9654 wdiBeaconFilterInfo->pUserData = pWdaParams;
9655
Jeff Johnson295189b2012-06-20 16:38:30 -07009656 /* Store param pointer as passed in by caller */
9657 /* store Params pass it to WDI */
9658 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
9659 pWdaParams->pWdaContext = pWDA;
9660 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
9661
Jeff Johnson295189b2012-06-20 16:38:30 -07009662 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009663 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009664 if(IS_WDI_STATUS_FAILURE(status))
9665 {
9666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9667 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
9668 vos_mem_free(pWdaParams->wdaMsgParam) ;
9669 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9670 vos_mem_free(pWdaParams) ;
9671 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009672 return CONVERT_WDI2VOS_STATUS(status) ;
9673}
Jeff Johnson295189b2012-06-20 16:38:30 -07009674/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009675 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009676 *
9677 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009678void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009679{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009680 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9681
Jeff Johnson295189b2012-06-20 16:38:30 -07009682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009683 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009684
9685 if(NULL == pWdaParams)
9686 {
9687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009688 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009689 VOS_ASSERT(0) ;
9690 return ;
9691 }
9692
9693 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9694 vos_mem_free(pWdaParams->wdaMsgParam);
9695 vos_mem_free(pWdaParams);
9696
Jeff Johnson295189b2012-06-20 16:38:30 -07009697 //print a msg, nothing else to do
9698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009699 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009700 return ;
9701}
Yue Ma7f44bbe2013-04-12 11:47:39 -07009702/*
9703 * FUNCTION: WDA_RemBeaconFilterReqCallback
9704 * Free memory.
9705 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
9706 */
9707void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9708{
9709 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9710
9711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9712 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9713
9714 if(NULL == pWdaParams)
9715 {
9716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9717 "%s: pWdaParams received NULL", __func__);
9718 VOS_ASSERT(0);
9719 return;
9720 }
9721
9722 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9723 {
9724 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9725 vos_mem_free(pWdaParams->wdaMsgParam);
9726 vos_mem_free(pWdaParams);
9727 }
9728
9729 return;
9730}
Jeff Johnson295189b2012-06-20 16:38:30 -07009731 // TODO: PE does not have this feature for now implemented,
9732 // but the support for removing beacon filter exists between
9733 // HAL and FW. This function can be called whenever PE defines
9734 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07009735/*
9736 * FUNCTION: WDA_RemBeaconFilterReq
9737 * Request to WDI to send the removal of beacon filtering related information.
9738 */
9739VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
9740 tRemBeaconFilterMsg* pBeaconFilterInfo)
9741{
9742 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009743 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009744 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
9745 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
9746 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009747 tWDA_ReqParams *pWdaParams ;
9748
Jeff Johnson295189b2012-06-20 16:38:30 -07009749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009750 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009751 if(NULL == wdiBeaconFilterInfo)
9752 {
9753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009754 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009755 VOS_ASSERT(0);
9756 return VOS_STATUS_E_NOMEM;
9757 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009758 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9759 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009760 {
9761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009762 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009763 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009764 vos_mem_free(wdiBeaconFilterInfo);
9765 vos_mem_free(pBeaconFilterInfo);
9766 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07009767 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009768
9769 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
9770 pBeaconFilterInfo->ucIeCount;
9771 //Fill structure with info contained in the ucRemIeId
9772 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
9773 pBeaconFilterInfo->ucRemIeId,
9774 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
9775 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
9776 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009777
9778 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009779 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07009780 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009781 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
9782
9783 pWdaParams->pWdaContext = pWDA;
9784
Jeff Johnson43971f52012-07-17 12:26:56 -07009785 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009786 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009787 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009788 {
9789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9790 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009791 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009792 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9793 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009794 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009795 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009796 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009797}
Jeff Johnson295189b2012-06-20 16:38:30 -07009798/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009799 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009800 *
9801 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009802void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009803{
9804 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009806 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009807 if(NULL == pWdaParams)
9808 {
9809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009810 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009811 VOS_ASSERT(0) ;
9812 return ;
9813 }
9814
9815 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9816 vos_mem_free(pWdaParams) ;
9817
Jeff Johnson295189b2012-06-20 16:38:30 -07009818 return ;
9819}
Jeff Johnson295189b2012-06-20 16:38:30 -07009820/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009821 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
9822 * Free memory.
9823 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
9824 */
9825void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
9826{
9827 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9828
9829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9830 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9831
9832 if(NULL == pWdaParams)
9833 {
9834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9835 "%s: pWdaParams received NULL", __func__);
9836 VOS_ASSERT(0);
9837 return;
9838 }
9839
9840 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9841 {
9842 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9843 vos_mem_free(pWdaParams);
9844 }
9845
9846 return;
9847}
9848/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009849 * FUNCTION: WDA_SetRSSIThresholdsReq
9850 * Request to WDI to set the RSSI thresholds (sta mode).
9851 */
9852VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
9853{
9854 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009855 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009856 tWDA_CbContext *pWDA = NULL ;
9857 v_PVOID_t pVosContext = NULL;
9858 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
9859 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
9860 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
9861 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009863 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009864 if(NULL == wdiRSSIThresholdsInfo)
9865 {
9866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009867 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009868 VOS_ASSERT(0);
9869 return VOS_STATUS_E_NOMEM;
9870 }
9871 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9872 if(NULL == pWdaParams)
9873 {
9874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009875 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009876 VOS_ASSERT(0);
9877 vos_mem_free(wdiRSSIThresholdsInfo);
9878 return VOS_STATUS_E_NOMEM;
9879 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009880 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07009881 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
9882 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
9883 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07009884 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
9885 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
9886 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07009887 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
9888 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
9889 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009890 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
9891 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009892 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
9893 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
9894
Jeff Johnson295189b2012-06-20 16:38:30 -07009895 /* Store param pointer as passed in by caller */
9896 /* store Params pass it to WDI */
9897 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
9898 pWdaParams->pWdaContext = pWDA;
9899 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07009900 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009901 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009902 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009903 {
9904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9905 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009906 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009907 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9908 vos_mem_free(pWdaParams) ;
9909 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009910 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009911
9912}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009913/*
Yue Madb90ac12013-04-04 13:39:13 -07009914 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009915 *
9916 */
Yue Madb90ac12013-04-04 13:39:13 -07009917void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009918{
9919 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9920
9921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009922 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009923 if(NULL == pWdaParams)
9924 {
9925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009926 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009927 VOS_ASSERT(0) ;
9928 return ;
9929 }
9930
9931 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9932 vos_mem_free(pWdaParams->wdaMsgParam);
9933 vos_mem_free(pWdaParams) ;
9934
9935 //print a msg, nothing else to do
9936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -07009937 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009938 return ;
9939}
Jeff Johnson295189b2012-06-20 16:38:30 -07009940/*
Yue Madb90ac12013-04-04 13:39:13 -07009941 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -07009942 * Free memory.
9943 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -07009944 */
9945void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
9946{
9947 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9948
9949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9950 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9951
9952 if(NULL == pWdaParams)
9953 {
9954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9955 "%s: Invalid pWdaParams pointer", __func__);
9956 VOS_ASSERT(0);
9957 return;
9958 }
9959
9960 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9961 {
9962 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9963 vos_mem_free(pWdaParams->wdaMsgParam);
9964 vos_mem_free(pWdaParams);
9965 }
9966
9967 return;
9968}
9969/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009970 * FUNCTION: WDA_ProcessHostOffloadReq
9971 * Request to WDI to set the filter to minimize unnecessary host wakeup due
9972 * to broadcast traffic (sta mode).
9973 */
9974VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
9975 tSirHostOffloadReq *pHostOffloadParams)
9976{
9977 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009978 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009979 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
9980 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
9981 sizeof(WDI_HostOffloadReqParamsType)) ;
9982 tWDA_ReqParams *pWdaParams ;
9983
9984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009985 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07009986
9987 if(NULL == wdiHostOffloadInfo)
9988 {
9989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009990 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009991 VOS_ASSERT(0);
9992 return VOS_STATUS_E_NOMEM;
9993 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009994 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9995 if(NULL == pWdaParams)
9996 {
9997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009998 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009999 VOS_ASSERT(0);
10000 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010001 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010002 return VOS_STATUS_E_NOMEM;
10003 }
10004
10005 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
10006 pHostOffloadParams->offloadType;
10007 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
10008 pHostOffloadParams->enableOrDisable;
10009
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010010 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
10011 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
10012
Jeff Johnson295189b2012-06-20 16:38:30 -070010013 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
10014 {
10015 case SIR_IPV4_ARP_REPLY_OFFLOAD:
10016 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
10017 pHostOffloadParams->params.hostIpv4Addr,
10018 4);
10019 break;
10020 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
10021 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
10022 pHostOffloadParams->params.hostIpv6Addr,
10023 16);
10024 break;
10025 case SIR_IPV6_NS_OFFLOAD:
10026 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
10027 pHostOffloadParams->params.hostIpv6Addr,
10028 16);
10029
10030#ifdef WLAN_NS_OFFLOAD
10031 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
10032 {
10033 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
10034 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
10035 16);
10036 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
10037 }
10038 else
10039 {
10040 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
10041 }
10042
10043 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
10044 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
10045 16);
10046 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
10047 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
10048 6);
10049
10050 //Only two are supported so let's go through them without a loop
10051 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
10052 {
10053 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
10054 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
10055 16);
10056 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
10057 }
10058 else
10059 {
10060 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
10061 }
10062
10063 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
10064 {
10065 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
10066 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
10067 16);
10068 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
10069 }
10070 else
10071 {
10072 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
10073 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +053010074 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
10075 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070010076 break;
10077#endif //WLAN_NS_OFFLOAD
10078 default:
10079 {
10080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10081 "No Handling for Offload Type %x in WDA "
10082 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
10083 //WDA_VOS_ASSERT(0) ;
10084 }
10085 }
Yue Madb90ac12013-04-04 13:39:13 -070010086 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
10087 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010088
Jeff Johnson295189b2012-06-20 16:38:30 -070010089 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010090 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010091 /* store Params pass it to WDI */
10092 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
10093 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010094
Jeff Johnson295189b2012-06-20 16:38:30 -070010095
Jeff Johnson43971f52012-07-17 12:26:56 -070010096 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -070010097 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010098
Jeff Johnson43971f52012-07-17 12:26:56 -070010099 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010100 {
10101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
c_hpothu86feba52014-10-28 15:51:18 +053010102 "Failure in host offload REQ WDI API, free all the memory %d",
10103 wstatus);
Jeff Johnson43971f52012-07-17 12:26:56 -070010104 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010105 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10106 vos_mem_free(pWdaParams->wdaMsgParam);
10107 vos_mem_free(pWdaParams) ;
10108 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010109 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010110
10111}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010112/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010113 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010114 *
10115 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010116void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010117{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010118 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
10119
Jeff Johnson295189b2012-06-20 16:38:30 -070010120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010121 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010122
10123 if(NULL == pWdaParams)
10124 {
10125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010126 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010127 VOS_ASSERT(0) ;
10128 return ;
10129 }
10130
10131 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10132 vos_mem_free(pWdaParams->wdaMsgParam);
10133 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010134
Jeff Johnson295189b2012-06-20 16:38:30 -070010135 //print a msg, nothing else to do
10136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010137 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010138 return ;
10139}
Jeff Johnson295189b2012-06-20 16:38:30 -070010140/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010141 * FUNCTION: WDA_KeepAliveReqCallback
10142 * Free memory.
10143 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
10144 */
10145void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
10146{
10147 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10148
10149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10150 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10151
10152 if(NULL == pWdaParams)
10153 {
10154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10155 "%s: pWdaParams received NULL", __func__);
10156 VOS_ASSERT(0);
10157 return;
10158 }
10159
10160 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10161 {
10162 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10163 vos_mem_free(pWdaParams->wdaMsgParam);
10164 vos_mem_free(pWdaParams);
10165 }
10166
10167 return;
10168}
10169/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010170 * FUNCTION: WDA_ProcessKeepAliveReq
10171 * Request to WDI to send Keep Alive packets to minimize unnecessary host
10172 * wakeup due to broadcast traffic (sta mode).
10173 */
10174VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
10175 tSirKeepAliveReq *pKeepAliveParams)
10176{
10177 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010178 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010179 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
10180 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
10181 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010182 tWDA_ReqParams *pWdaParams;
10183
Jeff Johnson295189b2012-06-20 16:38:30 -070010184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010185 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010186 if(NULL == wdiKeepAliveInfo)
10187 {
10188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010189 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010190 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010191 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010192 return VOS_STATUS_E_NOMEM;
10193 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010194
10195 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10196 if(NULL == pWdaParams)
10197 {
10198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010199 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010200 VOS_ASSERT(0);
10201 vos_mem_free(wdiKeepAliveInfo);
10202 vos_mem_free(pKeepAliveParams);
10203 return VOS_STATUS_E_NOMEM;
10204 }
10205
Jeff Johnson295189b2012-06-20 16:38:30 -070010206 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
10207 pKeepAliveParams->packetType;
10208 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
10209 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010210
10211 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
10212 pKeepAliveParams->bssId,
10213 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010214
10215 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
10216 {
10217 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
10218 pKeepAliveParams->hostIpv4Addr,
10219 SIR_IPV4_ADDR_LEN);
10220 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
10221 pKeepAliveParams->destIpv4Addr,
10222 SIR_IPV4_ADDR_LEN);
10223 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
10224 pKeepAliveParams->destMacAddr,
10225 SIR_MAC_ADDR_LEN);
10226 }
10227 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
10228 {
10229 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
10230 SIR_IPV4_ADDR_LEN,
10231 0);
10232 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
10233 SIR_IPV4_ADDR_LEN,
10234 0);
10235 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
10236 SIR_MAC_ADDR_LEN,
10237 0);
10238 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010239 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
10240 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010241
Jeff Johnson295189b2012-06-20 16:38:30 -070010242 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010243 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010244 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010245 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
10246 pWdaParams->pWdaContext = pWDA;
10247
Jeff Johnson295189b2012-06-20 16:38:30 -070010248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
10249 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
10250 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
10251 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
10252 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
10253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
10254 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
10255 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
10256 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
10257 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
10258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10259 "WDA DMAC : %d:%d:%d:%d:%d:%d",
10260 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
10261 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
10262 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
10263 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
10264 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
10265 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
10266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10267 "TimePeriod %d PacketType %d",
10268 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
10269 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -070010270 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010271 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010272
Jeff Johnson43971f52012-07-17 12:26:56 -070010273 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010274 {
10275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10276 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010277 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010278 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10279 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070010280 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010281 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010282 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010283
10284}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010285/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010286 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010287 *
10288 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010289void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010290 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
10291 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010292{
10293 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010295 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010296 if(NULL == pWdaParams)
10297 {
10298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010299 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010300 VOS_ASSERT(0) ;
10301 return ;
10302 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010303 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10304 vos_mem_free(pWdaParams->wdaMsgParam);
10305 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010306 return ;
10307}
Jeff Johnson295189b2012-06-20 16:38:30 -070010308/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010309 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
10310 * Free memory.
10311 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
10312 */
10313void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
10314{
10315 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10316
10317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10318 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10319
10320 if(NULL == pWdaParams)
10321 {
10322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10323 "%s: pWdaParams received NULL", __func__);
10324 VOS_ASSERT(0);
10325 return;
10326 }
10327
10328 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10329 {
10330 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10331 vos_mem_free(pWdaParams->wdaMsgParam);
10332 vos_mem_free(pWdaParams);
10333 }
10334
10335 return;
10336}
10337
10338/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010339 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
10340 * Request to WDI to add WOWL Bcast pattern
10341 */
10342VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
10343 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
10344{
10345 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010346 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010347 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
10348 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
10349 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
10350 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010352 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010353 if(NULL == wdiWowlAddBcPtrnInfo)
10354 {
10355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010356 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010357 VOS_ASSERT(0);
10358 return VOS_STATUS_E_NOMEM;
10359 }
10360 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10361 if(NULL == pWdaParams)
10362 {
10363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010364 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010365 VOS_ASSERT(0);
10366 vos_mem_free(wdiWowlAddBcPtrnInfo);
10367 return VOS_STATUS_E_NOMEM;
10368 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010369 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
10370 pWowlAddBcPtrnParams->ucPatternId;
10371 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
10372 pWowlAddBcPtrnParams->ucPatternByteOffset;
10373 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
10374 pWowlAddBcPtrnParams->ucPatternMaskSize;
10375 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
10376 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -070010377 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
10378 {
10379 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
10380 pWowlAddBcPtrnParams->ucPattern,
10381 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
10382 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
10383 pWowlAddBcPtrnParams->ucPatternMask,
10384 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
10385 }
10386 else
10387 {
10388 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
10389 pWowlAddBcPtrnParams->ucPattern,
10390 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10391 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
10392 pWowlAddBcPtrnParams->ucPatternMask,
10393 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10394
10395 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
10396 pWowlAddBcPtrnParams->ucPatternExt,
10397 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10398 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
10399 pWowlAddBcPtrnParams->ucPatternMaskExt,
10400 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10401 }
10402
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010403 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
10404 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
10405
Yue Ma7f44bbe2013-04-12 11:47:39 -070010406 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
10407 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010408 /* Store param pointer as passed in by caller */
10409 /* store Params pass it to WDI */
10410 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
10411 pWdaParams->pWdaContext = pWDA;
10412 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010413 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010414 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010415 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010416 {
10417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10418 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010419 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010420 vos_mem_free(pWdaParams->wdaMsgParam) ;
10421 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10422 vos_mem_free(pWdaParams) ;
10423 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010424 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010425
10426}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010427/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010428 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010429 *
10430 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010431void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010432 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
10433 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010434{
10435 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010437 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010438 if(NULL == pWdaParams)
10439 {
10440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010441 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010442 VOS_ASSERT(0) ;
10443 return ;
10444 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010445 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10446 vos_mem_free(pWdaParams->wdaMsgParam);
10447 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010448 return ;
10449}
Jeff Johnson295189b2012-06-20 16:38:30 -070010450/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010451 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
10452 * Free memory.
10453 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
10454 */
10455void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
10456{
10457 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10458
10459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10460 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10461
10462 if(NULL == pWdaParams)
10463 {
10464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10465 "%s: pWdaParams received NULL", __func__);
10466 VOS_ASSERT(0);
10467 return;
10468 }
10469
10470 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10471 {
10472 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10473 vos_mem_free(pWdaParams->wdaMsgParam);
10474 vos_mem_free(pWdaParams);
10475 }
10476
10477 return;
10478}
10479/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010480 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
10481 * Request to WDI to delete WOWL Bcast pattern
10482 */
10483VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
10484 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
10485{
10486 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010487 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010488 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
10489 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
10490 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
10491 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010493 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010494 if(NULL == wdiWowlDelBcPtrnInfo)
10495 {
10496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010497 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010498 VOS_ASSERT(0);
10499 return VOS_STATUS_E_NOMEM;
10500 }
10501 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10502 if(NULL == pWdaParams)
10503 {
10504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010505 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010506 VOS_ASSERT(0);
10507 vos_mem_free(wdiWowlDelBcPtrnInfo);
10508 return VOS_STATUS_E_NOMEM;
10509 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010510 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
10511 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010512
10513 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
10514 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
10515
Yue Ma7f44bbe2013-04-12 11:47:39 -070010516 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
10517 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010518 /* Store param pointer as passed in by caller */
10519 /* store Params pass it to WDI */
10520 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
10521 pWdaParams->pWdaContext = pWDA;
10522 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010523 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010524 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010525 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010526 {
10527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10528 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010529 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010530 vos_mem_free(pWdaParams->wdaMsgParam) ;
10531 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10532 vos_mem_free(pWdaParams) ;
10533 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010534 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010535
10536}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010537/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010538 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010539 *
10540 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010541void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010542{
10543 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010544 tWDA_CbContext *pWDA = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010545 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010547 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010548 if(NULL == pWdaParams)
10549 {
10550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010551 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010552 VOS_ASSERT(0) ;
10553 return ;
10554 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010555 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010556 if (NULL == pWDA)
10557 {
10558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10559 "%s:pWDA is NULL", __func__);
10560 VOS_ASSERT(0);
10561 return ;
10562 }
10563
Jeff Johnson295189b2012-06-20 16:38:30 -070010564 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
10565
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010566 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
10567
Jeff Johnson295189b2012-06-20 16:38:30 -070010568 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10569 vos_mem_free(pWdaParams) ;
10570
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010571 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010572 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -070010573 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010574 return ;
10575}
Jeff Johnson295189b2012-06-20 16:38:30 -070010576/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010577 * FUNCTION: WDA_WowlEnterReqCallback
10578 * Free memory and send WOWL Enter RSP back to PE.
10579 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
10580 */
10581void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
10582{
10583 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010584 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010585 tSirHalWowlEnterParams *pWowlEnterParams;
10586
10587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10588 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10589
10590 if(NULL == pWdaParams)
10591 {
10592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10593 "%s: pWdaParams received NULL", __func__);
10594 VOS_ASSERT(0);
10595 return;
10596 }
10597
10598 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010599 if (NULL == pWDA)
10600 {
10601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10602 "%s:pWDA is NULL", __func__);
10603 VOS_ASSERT(0);
10604 return ;
10605 }
10606
Yue Ma7f44bbe2013-04-12 11:47:39 -070010607 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
10608 pWowlEnterParams->status = wdiStatus;
10609
10610 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10611 {
10612 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10613 vos_mem_free(pWdaParams);
10614 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
10615 }
10616
10617 return;
10618}
10619/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010620 * FUNCTION: WDA_ProcessWowlEnterReq
10621 * Request to WDI to enter WOWL
10622 */
10623VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
10624 tSirHalWowlEnterParams *pWowlEnterParams)
10625{
10626 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010627 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010628 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
10629 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
10630 sizeof(WDI_WowlEnterReqParamsType)) ;
10631 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010633 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010634 if(NULL == wdiWowlEnterInfo)
10635 {
10636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010637 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010638 VOS_ASSERT(0);
10639 return VOS_STATUS_E_NOMEM;
10640 }
10641 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10642 if(NULL == pWdaParams)
10643 {
10644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010645 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010646 VOS_ASSERT(0);
10647 vos_mem_free(wdiWowlEnterInfo);
10648 return VOS_STATUS_E_NOMEM;
10649 }
Kumar Anandaca924e2013-07-22 14:35:34 -070010650
10651 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
10652
Jeff Johnson295189b2012-06-20 16:38:30 -070010653 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
10654 pWowlEnterParams->magicPtrn,
10655 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010656 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
10657 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010658 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
10659 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010660 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
10661 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010662 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
10663 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010664 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
10665 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010666 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
10667 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010668 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
10669 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -070010670 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
10671 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -070010672#ifdef WLAN_WAKEUP_EVENTS
10673 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
10674 pWowlEnterParams->ucWoWEAPIDRequestEnable;
10675
10676 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
10677 pWowlEnterParams->ucWoWEAPOL4WayEnable;
10678
10679 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
10680 pWowlEnterParams->ucWowNetScanOffloadMatch;
10681
10682 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
10683 pWowlEnterParams->ucWowGTKRekeyError;
10684
10685 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
10686 pWowlEnterParams->ucWoWBSSConnLoss;
10687#endif // WLAN_WAKEUP_EVENTS
10688
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010689 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
10690 pWowlEnterParams->bssIdx;
10691
Yue Ma7f44bbe2013-04-12 11:47:39 -070010692 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
10693 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010694 /* Store param pointer as passed in by caller */
10695 /* store Params pass it to WDI */
10696 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
10697 pWdaParams->pWdaContext = pWDA;
10698 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010699 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010700 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010701 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010702 {
10703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10704 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010705 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010706 vos_mem_free(pWdaParams->wdaMsgParam) ;
10707 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10708 vos_mem_free(pWdaParams) ;
10709 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010710 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010711
10712}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010713/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010714 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010715 *
10716 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010717void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010718{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010719 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010720 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010721 tSirHalWowlExitParams *pWowlExitParams;
10722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010723 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010724 if(NULL == pWdaParams)
10725 {
10726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010727 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010728 VOS_ASSERT(0) ;
10729 return ;
10730 }
10731 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010732 if (NULL == pWDA)
10733 {
10734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10735 "%s:pWDA is NULL", __func__);
10736 VOS_ASSERT(0);
10737 return ;
10738 }
10739
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010740 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
10741
10742 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010743 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010744
10745 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10746 vos_mem_free(pWdaParams) ;
10747
Jeff Johnson295189b2012-06-20 16:38:30 -070010748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010749 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010750 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010751 return ;
10752}
Jeff Johnson295189b2012-06-20 16:38:30 -070010753/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010754 * FUNCTION: WDA_WowlExitReqCallback
10755 * Free memory and send WOWL Exit RSP back to PE.
10756 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
10757 */
10758void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
10759{
10760 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010761 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010762 tSirHalWowlExitParams *pWowlExitParams;
10763
10764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10765 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10766
10767 if(NULL == pWdaParams)
10768 {
10769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10770 "%s: pWdaParams received NULL", __func__);
10771 VOS_ASSERT(0);
10772 return;
10773 }
10774
10775 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010776 if (NULL == pWDA)
10777 {
10778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10779 "%s:pWDA is NULL", __func__);
10780 VOS_ASSERT(0);
10781 return ;
10782 }
10783
Yue Ma7f44bbe2013-04-12 11:47:39 -070010784 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
10785 pWowlExitParams->status = wdiStatus;
10786
10787 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10788 {
10789 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10790 vos_mem_free(pWdaParams);
10791 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
10792 }
10793
10794 return;
10795}
10796/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010797 * FUNCTION: WDA_ProcessWowlExitReq
10798 * Request to WDI to add WOWL Bcast pattern
10799 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010800VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
10801 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010802{
10803 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010804 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010805 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
10806 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
10807 sizeof(WDI_WowlExitReqParamsType)) ;
10808 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010810 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010811 if(NULL == wdiWowlExitInfo)
10812 {
10813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010814 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010815 VOS_ASSERT(0);
10816 return VOS_STATUS_E_NOMEM;
10817 }
10818 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10819 if(NULL == pWdaParams)
10820 {
10821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010822 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010823 VOS_ASSERT(0);
10824 vos_mem_free(wdiWowlExitInfo);
10825 return VOS_STATUS_E_NOMEM;
10826 }
10827
10828 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
10829 pWowlExitParams->bssIdx;
10830
Yue Ma7f44bbe2013-04-12 11:47:39 -070010831 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
10832 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010833
10834 /* Store param pointer as passed in by caller */
10835 /* store Params pass it to WDI */
10836 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
10837 pWdaParams->pWdaContext = pWDA;
10838 pWdaParams->wdaMsgParam = pWowlExitParams;
10839
10840 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010841 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010842
Jeff Johnson43971f52012-07-17 12:26:56 -070010843 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010844 {
10845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10846 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010847 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010848 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10849 vos_mem_free(pWdaParams->wdaMsgParam);
10850 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010851 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010852 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010853}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010854/*
10855 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
10856 * Request to WDI to determine whether a given station is capable of
10857 * using HW-based frame translation
10858 */
10859v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
10860 tANI_U8 staIdx)
10861{
10862 return WDI_IsHwFrameTxTranslationCapable(staIdx);
10863}
Katya Nigam6201c3e2014-05-27 17:51:42 +053010864
10865/*
10866 * FUNCTION: WDA_IsSelfSTA
10867 * Request to WDI to determine whether a given STAID is self station
10868 * index.
10869 */
10870v_BOOL_t WDA_IsSelfSTA(v_PVOID_t pVosContext, tANI_U8 ucSTAIdx)
10871{
10872
10873 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
10874
Girish Gowli05cf44e2014-06-12 21:53:37 +053010875 if (NULL != pWDA)
10876 return WDI_IsSelfSTA(pWDA->pWdiContext,ucSTAIdx);
10877 else
10878 return VOS_TRUE;
Katya Nigam6201c3e2014-05-27 17:51:42 +053010879}
Jeff Johnson295189b2012-06-20 16:38:30 -070010880/*
10881 * FUNCTION: WDA_NvDownloadReqCallback
10882 * send NV Download RSP back to PE
10883 */
10884void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
10885 void* pUserData)
10886{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010887
10888 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010889 tWDA_CbContext *pWDA = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010890
Jeff Johnson295189b2012-06-20 16:38:30 -070010891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010892 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010893
10894 if(NULL == pWdaParams)
10895 {
10896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010897 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010898 VOS_ASSERT(0) ;
10899 return ;
10900 }
10901
10902 pWDA = pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010903 if (NULL == pWDA)
10904 {
10905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10906 "%s:pWDA is NULL", __func__);
10907 VOS_ASSERT(0);
10908 return ;
10909 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010910
Jeff Johnson295189b2012-06-20 16:38:30 -070010911 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010912 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10913 vos_mem_free(pWdaParams);
10914
Jeff Johnson295189b2012-06-20 16:38:30 -070010915 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070010916 return ;
10917}
Jeff Johnson295189b2012-06-20 16:38:30 -070010918/*
10919 * FUNCTION: WDA_ProcessNvDownloadReq
10920 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
10921 */
10922VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
10923{
10924 /* Initialize the local Variables*/
10925 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
10926 v_VOID_t *pNvBuffer=NULL;
10927 v_SIZE_t bufferSize = 0;
10928 WDI_Status status = WDI_STATUS_E_FAILURE;
10929 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010930 tWDA_ReqParams *pWdaParams ;
10931
Jeff Johnson295189b2012-06-20 16:38:30 -070010932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010933 "------> %s " ,__func__);
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010934 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070010935 {
10936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010937 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010938 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070010939 return VOS_STATUS_E_FAILURE;
10940 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053010941
Jeff Johnson295189b2012-06-20 16:38:30 -070010942 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -070010943 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
10944
Jeff Johnson295189b2012-06-20 16:38:30 -070010945 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
10946 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010947 if(NULL == wdiNvDownloadReqParam)
10948 {
10949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010950 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010951 VOS_ASSERT(0);
10952 return VOS_STATUS_E_NOMEM;
10953 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010954 /* Copy Params to wdiNvDownloadReqParam*/
10955 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
10956 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010957
10958 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10959 if(NULL == pWdaParams)
10960 {
10961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010962 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010963 VOS_ASSERT(0);
10964 vos_mem_free(wdiNvDownloadReqParam);
10965 return VOS_STATUS_E_NOMEM;
10966 }
10967
Jeff Johnson295189b2012-06-20 16:38:30 -070010968 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010969 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
10970 pWdaParams->wdaMsgParam = NULL;
10971 pWdaParams->pWdaContext = pWDA;
10972
10973
Jeff Johnson295189b2012-06-20 16:38:30 -070010974 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010975
Jeff Johnson295189b2012-06-20 16:38:30 -070010976 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010977 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
10978
Jeff Johnson295189b2012-06-20 16:38:30 -070010979 if(IS_WDI_STATUS_FAILURE(status))
10980 {
10981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10982 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010983 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10984 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010985 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010986 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010987}
10988/*
10989 * FUNCTION: WDA_FlushAcReqCallback
10990 * send Flush AC RSP back to TL
10991 */
10992void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
10993{
10994 vos_msg_t wdaMsg = {0} ;
10995 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10996 tFlushACReq *pFlushACReqParams;
10997 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010999 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011000 if(NULL == pWdaParams)
11001 {
11002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011003 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011004 VOS_ASSERT(0) ;
11005 return ;
11006 }
11007
11008 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
11009 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
11010 if(NULL == pFlushACRspParams)
11011 {
11012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011013 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011014 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070011015 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011016 return ;
11017 }
11018 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
11019 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
11020 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
11021 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
11022 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070011023 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011024 vos_mem_free(pWdaParams->wdaMsgParam) ;
11025 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11026 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011027 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
11028 wdaMsg.bodyptr = (void *)pFlushACRspParams;
11029 // POST message to TL
11030 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
11031
Jeff Johnson295189b2012-06-20 16:38:30 -070011032 return ;
11033}
Jeff Johnson295189b2012-06-20 16:38:30 -070011034/*
11035 * FUNCTION: WDA_ProcessFlushAcReq
11036 * Request to WDI to Update the DELBA REQ params.
11037 */
11038VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
11039 tFlushACReq *pFlushAcReqParams)
11040{
11041 WDI_Status status = WDI_STATUS_SUCCESS ;
11042 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
11043 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
11044 sizeof(WDI_FlushAcReqParamsType)) ;
11045 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011046 if(NULL == wdiFlushAcReqParam)
11047 {
11048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011049 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011050 VOS_ASSERT(0);
11051 return VOS_STATUS_E_NOMEM;
11052 }
11053 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11054 if(NULL == pWdaParams)
11055 {
11056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011057 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011058 VOS_ASSERT(0);
11059 vos_mem_free(wdiFlushAcReqParam);
11060 return VOS_STATUS_E_NOMEM;
11061 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011063 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011064 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
11065 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
11066 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
11067 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -070011068 /* Store Flush AC pointer, as this will be used for response */
11069 /* store Params pass it to WDI */
11070 pWdaParams->pWdaContext = pWDA;
11071 pWdaParams->wdaMsgParam = pFlushAcReqParams;
11072 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011073 status = WDI_FlushAcReq(wdiFlushAcReqParam,
11074 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011075 if(IS_WDI_STATUS_FAILURE(status))
11076 {
11077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11078 "Failure in Flush AC REQ Params WDI API, free all the memory " );
11079 vos_mem_free(pWdaParams->wdaMsgParam) ;
11080 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11081 vos_mem_free(pWdaParams) ;
11082 //TODO: respond to TL with failure
11083 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011084 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011085}
Jeff Johnson295189b2012-06-20 16:38:30 -070011086/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011087 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011088 *
11089 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011090void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011091{
11092 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011093 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070011094 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011095
11096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011097 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011098 if(NULL == pWdaParams)
11099 {
11100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011101 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011102 VOS_ASSERT(0) ;
11103 return ;
11104 }
11105 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011106 if (NULL == pWDA)
11107 {
11108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11109 "%s:pWDA is NULL", __func__);
11110 VOS_ASSERT(0);
11111 return ;
11112 }
11113
Jeff Johnson295189b2012-06-20 16:38:30 -070011114 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
11115 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
11116 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
11117 {
11118 pWDA->wdaAmpSessionOn = VOS_FALSE;
11119 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011120 vos_mem_free(pWdaParams->wdaMsgParam) ;
11121 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11122 vos_mem_free(pWdaParams) ;
11123 /*
11124 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
11125 * param here
11126 */
Jeff Johnson295189b2012-06-20 16:38:30 -070011127 return ;
11128}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011129/*
11130 * FUNCTION: WDA_BtAmpEventReqCallback
11131 * Free memory.
11132 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
11133 */
11134void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
11135{
11136 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011137 tWDA_CbContext *pWDA = NULL;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011138 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011139
Yue Ma7f44bbe2013-04-12 11:47:39 -070011140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11141 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11142
11143 if(NULL == pWdaParams)
11144 {
11145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11146 "%s: pWdaParams received NULL", __func__);
11147 VOS_ASSERT(0);
11148 return;
11149 }
11150
11151 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011152 if (NULL == pWDA)
11153 {
11154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11155 "%s:pWDA is NULL", __func__);
11156 VOS_ASSERT(0);
11157 return ;
11158 }
11159
Yue Ma7f44bbe2013-04-12 11:47:39 -070011160 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
11161
11162 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
11163 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
11164 {
11165 pWDA->wdaAmpSessionOn = VOS_FALSE;
11166 }
11167
11168 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11169 {
11170 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11171 vos_mem_free(pWdaParams->wdaMsgParam);
11172 vos_mem_free(pWdaParams);
11173 }
11174
11175 return;
11176}
Jeff Johnson295189b2012-06-20 16:38:30 -070011177/*
11178 * FUNCTION: WDA_ProcessBtAmpEventReq
11179 * Request to WDI to Update with BT AMP events.
11180 */
11181VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
11182 tSmeBtAmpEvent *pBtAmpEventParams)
11183{
11184 WDI_Status status = WDI_STATUS_SUCCESS ;
11185 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
11186 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
11187 sizeof(WDI_BtAmpEventParamsType)) ;
11188 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011190 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011191 if(NULL == wdiBtAmpEventParam)
11192 {
11193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011194 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011195 VOS_ASSERT(0);
11196 return VOS_STATUS_E_NOMEM;
11197 }
11198 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11199 if(NULL == pWdaParams)
11200 {
11201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011202 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011203 VOS_ASSERT(0);
11204 vos_mem_free(wdiBtAmpEventParam);
11205 return VOS_STATUS_E_NOMEM;
11206 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011207 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
11208 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011209 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
11210 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011211 /* Store BT AMP event pointer, as this will be used for response */
11212 /* store Params pass it to WDI */
11213 pWdaParams->pWdaContext = pWDA;
11214 pWdaParams->wdaMsgParam = pBtAmpEventParams;
11215 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011216 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011217 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011218 if(IS_WDI_STATUS_FAILURE(status))
11219 {
11220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11221 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
11222 vos_mem_free(pWdaParams->wdaMsgParam) ;
11223 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11224 vos_mem_free(pWdaParams) ;
11225 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011226 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
11227 {
11228 pWDA->wdaAmpSessionOn = VOS_TRUE;
11229 }
11230 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011231}
11232
Jeff Johnson295189b2012-06-20 16:38:30 -070011233/*
11234 * FUNCTION: WDA_FTMCommandReqCallback
11235 * Handle FTM CMD response came from HAL
11236 * Route responce to HDD FTM
11237 */
11238void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
11239 void *usrData)
11240{
11241 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011242 if((NULL == pWDA) || (NULL == ftmCmdRspData))
11243 {
11244 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053011245 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070011246 return;
11247 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011248 /* Release Current FTM Command Request */
11249 vos_mem_free(pWDA->wdaFTMCmdReq);
11250 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011251 /* Post FTM Responce to HDD FTM */
11252 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070011253 return;
11254}
Jeff Johnson295189b2012-06-20 16:38:30 -070011255/*
11256 * FUNCTION: WDA_ProcessFTMCommand
11257 * Send FTM command to WDI
11258 */
11259VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
11260 tPttMsgbuffer *pPTTFtmCmd)
11261{
11262 WDI_Status status = WDI_STATUS_SUCCESS;
11263 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011264 ftmCMDReq = (WDI_FTMCommandReqType *)
11265 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
11266 if(NULL == ftmCMDReq)
11267 {
11268 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11269 "WDA FTM Command buffer alloc fail");
11270 return VOS_STATUS_E_NOMEM;
11271 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011272 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
11273 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070011274 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070011275 /* Send command to WDI */
11276 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070011277 return status;
11278}
Jeff Johnsone7245742012-09-05 17:12:55 -070011279#ifdef FEATURE_OEM_DATA_SUPPORT
11280/*
11281 * FUNCTION: WDA_StartOemDataReqCallback
11282 *
11283 */
11284void WDA_StartOemDataReqCallback(
11285 WDI_oemDataRspParamsType *wdiOemDataRspParams,
11286 void* pUserData)
11287{
11288 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011289 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011290 tWDA_CbContext *pWDA = NULL;
Jeff Johnsone7245742012-09-05 17:12:55 -070011291 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011292
Jeff Johnsone7245742012-09-05 17:12:55 -070011293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011294 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011295
11296 if(NULL == pWdaParams)
11297 {
11298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011299 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011300 VOS_ASSERT(0) ;
11301 return ;
11302 }
11303 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
11304
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011305 if (NULL == pWDA)
Jeff Johnsone7245742012-09-05 17:12:55 -070011306 {
11307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011308 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011309 VOS_ASSERT(0);
11310 return ;
11311 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053011312
Jeff Johnsone7245742012-09-05 17:12:55 -070011313 /*
11314 * Allocate memory for response params sent to PE
11315 */
11316 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
11317
11318 // Check if memory is allocated for OemdataMeasRsp Params.
11319 if(NULL == pOemDataRspParams)
11320 {
11321 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11322 "OEM DATA WDA callback alloc fail");
11323 VOS_ASSERT(0) ;
11324 return;
11325 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011326
Jeff Johnsone7245742012-09-05 17:12:55 -070011327 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011328 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11329 vos_mem_free(pWdaParams->wdaMsgParam);
11330 vos_mem_free(pWdaParams) ;
11331
Jeff Johnsone7245742012-09-05 17:12:55 -070011332 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080011333 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070011334 * Also, here success always means that we have atleast one BSSID.
11335 */
11336 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
11337
11338 //enable Tx
11339 status = WDA_ResumeDataTx(pWDA);
11340 if(status != VOS_STATUS_SUCCESS)
11341 {
11342 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
11343 }
11344 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
11345 return ;
11346}
11347/*
11348 * FUNCTION: WDA_ProcessStartOemDataReq
11349 * Send Start Oem Data Req to WDI
11350 */
11351VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
11352 tStartOemDataReq *pOemDataReqParams)
11353{
11354 WDI_Status status = WDI_STATUS_SUCCESS;
11355 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011356 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070011357
11358 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
11359
11360 if(NULL == wdiOemDataReqParams)
11361 {
11362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011363 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011364 VOS_ASSERT(0);
11365 return VOS_STATUS_E_NOMEM;
11366 }
11367
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011368 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
11369 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
11370 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
11371 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070011372
11373 wdiOemDataReqParams->wdiReqStatusCB = NULL;
11374
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011375 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11376 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070011377 {
11378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011379 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011380 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011381 vos_mem_free(pOemDataReqParams);
11382 VOS_ASSERT(0);
11383 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070011384 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011385
Bernald44a1ae2013-01-09 08:30:39 -080011386 pWdaParams->pWdaContext = (void*)pWDA;
11387 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
11388 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011389
11390 status = WDI_StartOemDataReq(wdiOemDataReqParams,
11391 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011392
11393 if(IS_WDI_STATUS_FAILURE(status))
11394 {
11395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11396 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011397 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11398 vos_mem_free(pWdaParams->wdaMsgParam);
11399 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011400 }
11401 return CONVERT_WDI2VOS_STATUS(status) ;
11402}
11403#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070011404/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011405 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011406 *
11407 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011408void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011409{
11410 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011412 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011413 if(NULL == pWdaParams)
11414 {
11415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011416 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011417 VOS_ASSERT(0) ;
11418 return ;
11419 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011420
11421 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11422 vos_mem_free(pWdaParams->wdaMsgParam);
11423 vos_mem_free(pWdaParams);
11424
11425 return ;
11426}
11427/*
11428 * FUNCTION: WDA_SetTxPerTrackingReqCallback
11429 * Free memory.
11430 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
11431 */
11432void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
11433{
11434 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11435
11436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11437 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11438
11439 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070011440 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070011441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11442 "%s: pWdaParams received NULL", __func__);
11443 VOS_ASSERT(0);
11444 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011445 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011446
11447 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011448 {
11449 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011450 vos_mem_free(pWdaParams->wdaMsgParam);
11451 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011452 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011453
11454 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011455}
Jeff Johnson295189b2012-06-20 16:38:30 -070011456#ifdef WLAN_FEATURE_GTK_OFFLOAD
11457/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011458 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011459 *
11460 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011461void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011462 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011463{
11464 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11465
11466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011467 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080011468 if(NULL == pWdaParams)
11469 {
11470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11471 "%s: pWdaParams received NULL", __func__);
11472 VOS_ASSERT(0);
11473 return;
11474 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011475
Jeff Johnson295189b2012-06-20 16:38:30 -070011476 vos_mem_free(pWdaParams->wdaMsgParam) ;
11477 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11478 vos_mem_free(pWdaParams) ;
11479
11480 //print a msg, nothing else to do
11481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011482 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011483
11484 return ;
11485}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011486/*
11487 * FUNCTION: WDA_GTKOffloadReqCallback
11488 * Free memory.
11489 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
11490 */
11491void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
11492{
11493 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011494
Yue Ma7f44bbe2013-04-12 11:47:39 -070011495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11496 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11497
11498 if(NULL == pWdaParams)
11499 {
11500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11501 "%s: pWdaParams received NULL", __func__);
11502 VOS_ASSERT(0);
11503 return;
11504 }
11505
11506 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11507 {
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053011508 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
11509 sizeof(WDI_GtkOffloadReqMsg));
11510 vos_mem_zero(pWdaParams->wdaMsgParam,
11511 sizeof(tSirGtkOffloadParams));
Yue Ma7f44bbe2013-04-12 11:47:39 -070011512 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11513 vos_mem_free(pWdaParams->wdaMsgParam);
11514 vos_mem_free(pWdaParams);
11515 }
11516
11517 return;
11518}
Jeff Johnson295189b2012-06-20 16:38:30 -070011519/*
11520 * FUNCTION: WDA_ProcessGTKOffloadReq
11521 * Request to WDI to set the filter to minimize unnecessary host wakeup due
11522 * to broadcast traffic (sta mode).
11523 */
11524VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
11525 tpSirGtkOffloadParams pGtkOffloadParams)
11526{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011527 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011528 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
11529 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
11530 sizeof(WDI_GtkOffloadReqMsg)) ;
11531 tWDA_ReqParams *pWdaParams ;
11532
11533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011534 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011535
11536 if(NULL == wdiGtkOffloadReqMsg)
11537 {
11538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011539 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011540 VOS_ASSERT(0);
11541 return VOS_STATUS_E_NOMEM;
11542 }
11543
11544 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11545 if(NULL == pWdaParams)
11546 {
11547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011548 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011549 VOS_ASSERT(0);
11550 vos_mem_free(wdiGtkOffloadReqMsg);
11551 return VOS_STATUS_E_NOMEM;
11552 }
11553
11554 //
11555 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
11556 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011557
11558 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011559 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011560
Jeff Johnson295189b2012-06-20 16:38:30 -070011561 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
11562 // Copy KCK
11563 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
11564 // Copy KEK
11565 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
11566 // Copy KeyReplayCounter
11567 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
11568 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
11569
Yue Ma7f44bbe2013-04-12 11:47:39 -070011570 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
11571 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011572
Jeff Johnson295189b2012-06-20 16:38:30 -070011573
11574 /* Store Params pass it to WDI */
11575 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
11576 pWdaParams->pWdaContext = pWDA;
11577 /* Store param pointer as passed in by caller */
11578 pWdaParams->wdaMsgParam = pGtkOffloadParams;
11579
Yue Ma7f44bbe2013-04-12 11:47:39 -070011580 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011581
11582 if(IS_WDI_STATUS_FAILURE(status))
11583 {
11584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11585 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053011586 vos_mem_zero(wdiGtkOffloadReqMsg, sizeof(WDI_GtkOffloadReqMsg));
11587 vos_mem_zero(pGtkOffloadParams, sizeof(tSirGtkOffloadParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070011588 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11589 vos_mem_free(pWdaParams->wdaMsgParam);
11590 vos_mem_free(pWdaParams);
11591 }
11592
11593 return CONVERT_WDI2VOS_STATUS(status) ;
11594}
11595
11596/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011597 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011598 *
11599 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011600void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011601 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011602{
11603 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11604 tWDA_CbContext *pWDA;
11605 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Nirav Shah374de6e2014-02-13 16:40:01 +053011606 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070011607 vos_msg_t vosMsg;
11608
11609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011610 "<------ %s " ,__func__);
Nirav Shah374de6e2014-02-13 16:40:01 +053011611
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080011612 if(NULL == pWdaParams)
11613 {
11614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11615 "%s: pWdaParams received NULL", __func__);
11616 VOS_ASSERT(0);
11617 return;
11618 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011619
Nirav Shah374de6e2014-02-13 16:40:01 +053011620 pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams));
11621 if(NULL == pGtkOffloadGetInfoRsp)
11622 {
11623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11624 "%s: vos_mem_malloc failed ", __func__);
11625 VOS_ASSERT(0);
11626 return;
11627 }
11628
Jeff Johnson295189b2012-06-20 16:38:30 -070011629 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
11630 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
11631
11632 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
11633 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
11634
11635 /* Message Header */
11636 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070011637 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011638
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011639 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
11640 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
11641 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
11642 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
11643 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070011644
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011645 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
11646 pwdiGtkOffloadGetInfoRsparams->bssId,
11647 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011648 /* VOS message wrapper */
11649 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
11650 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
11651 vosMsg.bodyval = 0;
11652
11653 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11654 {
11655 /* free the mem and return */
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053011656 vos_mem_zero(pGtkOffloadGetInfoRsp,
11657 sizeof(tSirGtkOffloadGetInfoRspParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070011658 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
11659 }
11660
11661 vos_mem_free(pWdaParams->wdaMsgParam) ;
11662 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11663 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011664
11665 return;
11666}
11667/*
11668 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
11669 * Free memory and send RSP back to SME.
11670 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
11671 */
11672void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
11673{
11674 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11675 vos_msg_t vosMsg;
11676
11677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11678 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11679
11680 if(NULL == pWdaParams)
11681 {
11682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11683 "%s: pWdaParams received NULL", __func__);
11684 VOS_ASSERT(0);
11685 return;
11686 }
11687
11688 /* VOS message wrapper */
11689 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
11690 vosMsg.bodyptr = NULL;
11691 vosMsg.bodyval = 0;
11692
11693 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11694 {
11695 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11696 vos_mem_free(pWdaParams->wdaMsgParam);
11697 vos_mem_free(pWdaParams);
11698 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
11699 }
11700
11701 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011702}
11703#endif
11704
11705/*
11706 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
11707 * Request to WDI to set Tx Per Tracking configurations
11708 */
11709VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
11710{
11711 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011712 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011713 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
11714 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
11715 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
11716 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011718 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011719 if(NULL == pwdiSetTxPerTrackingReqParams)
11720 {
11721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011722 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011723 vos_mem_free(pTxPerTrackingParams);
11724 VOS_ASSERT(0);
11725 return VOS_STATUS_E_NOMEM;
11726 }
11727 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11728 if(NULL == pWdaParams)
11729 {
11730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011731 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011732 vos_mem_free(pwdiSetTxPerTrackingReqParams);
11733 vos_mem_free(pTxPerTrackingParams);
11734 VOS_ASSERT(0);
11735 return VOS_STATUS_E_NOMEM;
11736 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011737 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
11738 pTxPerTrackingParams->ucTxPerTrackingEnable;
11739 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
11740 pTxPerTrackingParams->ucTxPerTrackingPeriod;
11741 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
11742 pTxPerTrackingParams->ucTxPerTrackingRatio;
11743 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
11744 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011745 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
11746 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011747 /* Store param pointer as passed in by caller */
11748 /* store Params pass it to WDI
11749 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
11750 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
11751 pWdaParams->pWdaContext = pWDA;
11752 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011753 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011754 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011755 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011756 {
11757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11758 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011759 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011760 vos_mem_free(pWdaParams->wdaMsgParam) ;
11761 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11762 vos_mem_free(pWdaParams) ;
11763 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011764 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011765
11766}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011767/*
11768 * FUNCTION: WDA_HALDumpCmdCallback
11769 * Send the VOS complete .
11770 */
11771void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
11772 void* pUserData)
11773{
11774 tANI_U8 *buffer = NULL;
11775 tWDA_CbContext *pWDA = NULL;
11776 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011777 if(NULL == pWdaParams)
11778 {
11779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011780 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011781 VOS_ASSERT(0) ;
11782 return ;
11783 }
11784
11785 pWDA = pWdaParams->pWdaContext;
11786 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011787 if(wdiRspParams->usBufferLen > 0)
11788 {
11789 /*Copy the Resp data to UMAC supplied buffer*/
11790 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
11791 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011792 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11793 vos_mem_free(pWdaParams);
11794
11795 /* Indicate VOSS about the start complete */
11796 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070011797 return ;
11798}
11799
Jeff Johnson295189b2012-06-20 16:38:30 -070011800/*
11801 * FUNCTION: WDA_ProcessHALDumpCmdReq
11802 * Send Dump command to WDI
11803 */
11804VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
11805 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
11806 tANI_U32 arg4, tANI_U8 *pBuffer)
11807{
11808 WDI_Status status = WDI_STATUS_SUCCESS;
11809 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
11810 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
11811 tWDA_ReqParams *pWdaParams ;
11812 pVosContextType pVosContext = NULL;
11813 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011814 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
11815 (void *)pMac);
Katya Nigame4bafe02014-02-28 15:37:57 +053011816 if(pVosContext)
11817 {
11818 if (pVosContext->isLogpInProgress)
11819 {
11820 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
11821 "%s:LOGP in Progress. Ignore!!!", __func__);
11822 return VOS_STATUS_E_BUSY;
11823 }
11824 }
11825 else
11826 {
11827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11828 "%s: VOS Context Null", __func__);
11829 return VOS_STATUS_E_RESOURCES;
11830 }
11831
Jeff Johnson295189b2012-06-20 16:38:30 -070011832 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11833 if(NULL == pWdaParams)
11834 {
11835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011836 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011837 return VOS_STATUS_E_NOMEM;
11838 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011839 /* Allocate memory WDI request structure*/
11840 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
11841 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
11842 if(NULL == wdiHALDumpCmdReqParam)
11843 {
11844 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11845 "WDA HAL DUMP Command buffer alloc fail");
11846 vos_mem_free(pWdaParams);
11847 return WDI_STATUS_E_FAILURE;
11848 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011849 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070011850 /* Extract the arguments */
11851 wdiHalDumpCmdInfo->command = cmd;
11852 wdiHalDumpCmdInfo->argument1 = arg1;
11853 wdiHalDumpCmdInfo->argument2 = arg2;
11854 wdiHalDumpCmdInfo->argument3 = arg3;
11855 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070011856 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011857 pWdaParams->pWdaContext = pVosContext->pWDAContext;
11858
11859 /* Response message will be passed through the buffer */
11860 pWdaParams->wdaMsgParam = (void *)pBuffer;
11861
11862 /* store Params pass it to WDI */
11863 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011864 /* Send command to WDI */
11865 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -080011866 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), WDA_DUMPCMD_WAIT_TIMEOUT );
Jeff Johnson295189b2012-06-20 16:38:30 -070011867 if ( vStatus != VOS_STATUS_SUCCESS )
11868 {
11869 if ( vStatus == VOS_STATUS_E_TIMEOUT )
11870 {
11871 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011872 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011873 }
11874 else
11875 {
11876 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011877 "%s: WDA_HALDUMP reporting other error",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011878 }
11879 VOS_ASSERT(0);
11880 }
11881 return status;
11882}
Jeff Johnson295189b2012-06-20 16:38:30 -070011883#ifdef WLAN_FEATURE_GTK_OFFLOAD
11884/*
11885 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
11886 * Request to WDI to get GTK Offload Information
11887 */
11888VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
11889 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
11890{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011891 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011892 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
11893 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
11894 tWDA_ReqParams *pWdaParams ;
11895
11896 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
11897 {
11898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011899 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011900 VOS_ASSERT(0);
11901 return VOS_STATUS_E_NOMEM;
11902 }
11903
11904 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11905 if(NULL == pWdaParams)
11906 {
11907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011908 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011909 VOS_ASSERT(0);
11910 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
11911 return VOS_STATUS_E_NOMEM;
11912 }
11913
Yue Ma7f44bbe2013-04-12 11:47:39 -070011914 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
11915 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011916
Jeff Johnson295189b2012-06-20 16:38:30 -070011917 /* Store Params pass it to WDI */
11918 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
11919 pWdaParams->pWdaContext = pWDA;
11920 /* Store param pointer as passed in by caller */
11921 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
11922
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011923 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011924 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011925
Yue Ma7f44bbe2013-04-12 11:47:39 -070011926 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011927
11928 if(IS_WDI_STATUS_FAILURE(status))
11929 {
11930 /* failure returned by WDI API */
11931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11932 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
11933 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11934 vos_mem_free(pWdaParams) ;
11935 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
11936 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
11937 }
11938
11939 return CONVERT_WDI2VOS_STATUS(status) ;
11940}
11941#endif // WLAN_FEATURE_GTK_OFFLOAD
11942
11943/*
Yue Mab9c86f42013-08-14 15:59:08 -070011944 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
11945 *
11946 */
11947VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
11948 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
11949{
11950 WDI_Status wdiStatus;
11951 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
11952
11953 addPeriodicTxPtrnParams =
11954 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
11955
11956 if (NULL == addPeriodicTxPtrnParams)
11957 {
11958 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11959 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
11960 __func__);
11961
11962 return VOS_STATUS_E_NOMEM;
11963 }
11964
11965 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
11966 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
11967
11968 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
11969 addPeriodicTxPtrnParams->pUserData = pWDA;
11970
11971 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
11972
11973 if (WDI_STATUS_PENDING == wdiStatus)
11974 {
11975 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11976 "Pending received for %s:%d", __func__, __LINE__ );
11977 }
11978 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11979 {
11980 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11981 "Failure in %s:%d", __func__, __LINE__ );
11982 }
11983
11984 vos_mem_free(addPeriodicTxPtrnParams);
11985
11986 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11987}
11988
11989/*
11990 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
11991 *
11992 */
11993VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
11994 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
11995{
11996 WDI_Status wdiStatus;
11997 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
11998
11999 delPeriodicTxPtrnParams =
12000 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
12001
12002 if (NULL == delPeriodicTxPtrnParams)
12003 {
12004 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12005 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
12006 __func__);
12007
12008 return VOS_STATUS_E_NOMEM;
12009 }
12010
12011 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
12012 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
12013
12014 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
12015 delPeriodicTxPtrnParams->pUserData = pWDA;
12016
12017 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
12018
12019 if (WDI_STATUS_PENDING == wdiStatus)
12020 {
12021 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12022 "Pending received for %s:%d", __func__, __LINE__ );
12023 }
12024 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12025 {
12026 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12027 "Failure in %s:%d", __func__, __LINE__ );
12028 }
12029
12030 vos_mem_free(delPeriodicTxPtrnParams);
12031
12032 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12033}
12034
Rajeev79dbe4c2013-10-05 11:03:42 +053012035#ifdef FEATURE_WLAN_BATCH_SCAN
12036/*
12037 * FUNCTION: WDA_ProcessStopBatchScanInd
12038 *
12039 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
12040 *
12041 * PARAM:
12042 * pWDA: pointer to WDA context
12043 * pReq: pointer to stop batch scan request
12044 */
12045VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
12046 tSirStopBatchScanInd *pReq)
12047{
12048 WDI_Status wdiStatus;
12049 WDI_StopBatchScanIndType wdiReq;
12050
12051 wdiReq.param = pReq->param;
12052
12053 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
12054
12055 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12056 {
12057 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12058 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
12059 }
12060
12061 vos_mem_free(pReq);
12062
12063 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12064}
12065/*==========================================================================
12066 FUNCTION WDA_ProcessTriggerBatchScanResultInd
12067
12068 DESCRIPTION
12069 API to pull batch scan result from FW
12070
12071 PARAMETERS
12072 pWDA: Pointer to WDA context
12073 pGetBatchScanReq: Pointer to get batch scan result indication
12074
12075 RETURN VALUE
12076 NONE
12077
12078===========================================================================*/
12079VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
12080 tSirTriggerBatchScanResultInd *pReq)
12081{
12082 WDI_Status wdiStatus;
12083 WDI_TriggerBatchScanResultIndType wdiReq;
12084
12085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12086 "------> %s " ,__func__);
12087
12088 wdiReq.param = pReq->param;
12089
12090 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
12091
12092 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12093 {
12094 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12095 "Trigger batch scan result ind failed %s:%d",
12096 __func__, wdiStatus);
12097 }
12098
12099 vos_mem_free(pReq);
12100
12101 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12102}
12103
12104/*==========================================================================
12105 FUNCTION WDA_SetBatchScanRespCallback
12106
12107 DESCRIPTION
12108 API to process set batch scan response from FW
12109
12110 PARAMETERS
12111 pRsp: Pointer to set batch scan response
12112 pUserData: Pointer to user data
12113
12114 RETURN VALUE
12115 NONE
12116
12117===========================================================================*/
12118void WDA_SetBatchScanRespCallback
12119(
12120 WDI_SetBatchScanRspType *pRsp,
12121 void* pUserData
12122)
12123{
12124 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
12125 tpAniSirGlobal pMac;
12126 void *pCallbackContext;
12127 tWDA_CbContext *pWDA = NULL ;
12128 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12129
12130
12131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12132 "<------ %s " ,__func__);
12133 if (NULL == pWdaParams)
12134 {
12135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12136 "%s: pWdaParams received NULL", __func__);
12137 VOS_ASSERT(0) ;
12138 return ;
12139 }
12140
12141 /*extract WDA context*/
12142 pWDA = pWdaParams->pWdaContext;
12143 if (NULL == pWDA)
12144 {
12145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12146 "%s:pWDA is NULL can't invole HDD callback",
12147 __func__);
12148 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12149 vos_mem_free(pWdaParams->wdaMsgParam);
12150 vos_mem_free(pWdaParams);
12151 VOS_ASSERT(0);
12152 return;
12153 }
12154
12155 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12156 vos_mem_free(pWdaParams->wdaMsgParam);
12157 vos_mem_free(pWdaParams);
12158
12159 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12160 if (NULL == pMac)
12161 {
12162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12163 "%s:pMac is NULL", __func__);
12164 VOS_ASSERT(0);
12165 return;
12166 }
12167
12168 pHddSetBatchScanRsp =
12169 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
12170 if (NULL == pHddSetBatchScanRsp)
12171 {
12172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12173 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
12174 VOS_ASSERT(0);
12175 return;
12176 }
12177
12178 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
12179
12180 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
12181 /*call hdd callback with set batch scan response data*/
12182 if(pMac->pmc.setBatchScanReqCallback)
12183 {
12184 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
12185 }
12186 else
12187 {
12188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12189 "%s:HDD callback is null", __func__);
12190 VOS_ASSERT(0);
12191 }
12192
12193 vos_mem_free(pHddSetBatchScanRsp);
12194 return ;
12195}
12196
12197/*==========================================================================
12198 FUNCTION WDA_ProcessSetBatchScanReq
12199
12200 DESCRIPTION
12201 API to send set batch scan request to WDI
12202
12203 PARAMETERS
12204 pWDA: Pointer to WDA context
12205 pSetBatchScanReq: Pointer to set batch scan req
12206
12207 RETURN VALUE
12208 NONE
12209
12210===========================================================================*/
12211VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
12212 tSirSetBatchScanReq *pSetBatchScanReq)
12213{
12214 WDI_Status status;
12215 tWDA_ReqParams *pWdaParams ;
12216 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
12217
12218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12219 "------> %s " ,__func__);
12220
12221 pWdiSetBatchScanReq =
12222 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
12223 if (NULL == pWdiSetBatchScanReq)
12224 {
12225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12226 "%s: VOS MEM Alloc Failure", __func__);
12227 vos_mem_free(pSetBatchScanReq);
12228 VOS_ASSERT(0);
12229 return VOS_STATUS_E_NOMEM;
12230 }
12231
12232 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
12233 if (NULL == pWdaParams)
12234 {
12235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12236 "%s: VOS MEM Alloc Failure", __func__);
12237 VOS_ASSERT(0);
12238 vos_mem_free(pSetBatchScanReq);
12239 vos_mem_free(pWdiSetBatchScanReq);
12240 return VOS_STATUS_E_NOMEM;
12241 }
12242
12243 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
12244 pWdiSetBatchScanReq->numberOfScansToBatch =
12245 pSetBatchScanReq->numberOfScansToBatch;
12246 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
12247 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
12248 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
12249
12250 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
12251 pWdaParams->pWdaContext = pWDA;
12252 pWdaParams->wdaMsgParam = pSetBatchScanReq;
12253
12254 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
12255 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
12256 if (IS_WDI_STATUS_FAILURE(status))
12257 {
12258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12259 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
12260 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12261 vos_mem_free(pWdaParams->wdaMsgParam);
12262 vos_mem_free(pWdaParams);
12263 }
12264 return CONVERT_WDI2VOS_STATUS(status);
12265}
12266
12267#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053012268/*
12269 * FUNCTION: WDA_ProcessHT40OBSSScanInd
12270 *
12271 * DESCRIPTION: This function sends start/update OBSS scan
12272 * inidcation message to WDI
12273 *
12274 * PARAM:
12275 * pWDA: pointer to WDA context
12276 * pReq: pointer to start OBSS scan request
12277 */
12278VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
12279 tSirHT40OBSSScanInd *pReq)
12280{
12281 WDI_Status status;
12282 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
12283 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053012284
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053012285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12286 "------> %s " ,__func__);
12287 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
12288 wdiOBSSScanParams.pUserData = pWDA;
12289
12290 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
12291 pWdiOBSSScanInd->cmdType = pReq->cmdType;
12292 pWdiOBSSScanInd->scanType = pReq->scanType;
12293 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
12294 pReq->OBSSScanActiveDwellTime;
12295 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
12296 pReq->OBSSScanPassiveDwellTime;
12297 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
12298 pReq->BSSChannelWidthTriggerScanInterval;
12299 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
12300 pReq->BSSWidthChannelTransitionDelayFactor;
12301 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
12302 pReq->OBSSScanActiveTotalPerChannel;
12303 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
12304 pReq->OBSSScanPassiveTotalPerChannel;
12305 pWdiOBSSScanInd->OBSSScanActivityThreshold =
12306 pReq->OBSSScanActivityThreshold;
12307 pWdiOBSSScanInd->channelCount = pReq->channelCount;
12308 vos_mem_copy(pWdiOBSSScanInd->channels,
12309 pReq->channels,
12310 pReq->channelCount);
12311 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
12312 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
12313 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
12314 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
12315 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
12316
12317 vos_mem_copy(pWdiOBSSScanInd->ieField,
12318 pReq->ieField,
12319 pReq->ieFieldLen);
12320
12321 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
12322 if (WDI_STATUS_PENDING == status)
12323 {
12324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12325 "Pending received for %s:%d ",__func__,__LINE__ );
12326 }
12327 else if (WDI_STATUS_SUCCESS_SYNC != status)
12328 {
12329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12330 "Failure in %s:%d ",__func__,__LINE__ );
12331 }
12332 return CONVERT_WDI2VOS_STATUS(status) ;
12333}
12334/*
12335 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
12336 *
12337 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
12338 *
12339 * PARAM:
12340 * pWDA: pointer to WDA context
12341 * pReq: pointer to stop batch scan request
12342 */
12343VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
12344 tANI_U8 *bssIdx)
12345{
12346 WDI_Status status;
12347
12348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12349 "------> %s " ,__func__);
12350
12351 status = WDI_HT40OBSSStopScanInd(*bssIdx);
12352 if (WDI_STATUS_PENDING == status)
12353 {
12354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12355 "Pending received for %s:%d ",__func__,__LINE__ );
12356 }
12357 else if (WDI_STATUS_SUCCESS_SYNC != status)
12358 {
12359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12360 "Failure in %s:%d ",__func__,__LINE__ );
12361 }
12362 return CONVERT_WDI2VOS_STATUS(status) ;
12363}
Yue Mab9c86f42013-08-14 15:59:08 -070012364/*
Chittajit Mitraf5413a42013-10-18 14:20:08 -070012365 * FUNCTION: WDA_ProcessRateUpdateInd
12366 *
12367 */
12368VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
12369 tSirRateUpdateInd *pRateUpdateParams)
12370{
12371 WDI_Status wdiStatus;
12372 WDI_RateUpdateIndParams rateUpdateParams;
12373
12374 vos_mem_copy(rateUpdateParams.bssid,
12375 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
12376
12377 rateUpdateParams.ucastDataRateTxFlag =
12378 pRateUpdateParams->ucastDataRateTxFlag;
12379 rateUpdateParams.reliableMcastDataRateTxFlag =
12380 pRateUpdateParams->reliableMcastDataRateTxFlag;
12381 rateUpdateParams.mcastDataRate24GHzTxFlag =
12382 pRateUpdateParams->mcastDataRate24GHzTxFlag;
12383 rateUpdateParams.mcastDataRate5GHzTxFlag =
12384 pRateUpdateParams->mcastDataRate5GHzTxFlag;
12385
12386 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
12387 rateUpdateParams.reliableMcastDataRate =
12388 pRateUpdateParams->reliableMcastDataRate;
12389 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
12390 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
12391
12392 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
12393 rateUpdateParams.pUserData = pWDA;
12394
12395 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
12396
12397 if (WDI_STATUS_PENDING == wdiStatus)
12398 {
12399 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12400 "Pending received for %s:%d", __func__, __LINE__ );
12401 }
12402 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12403 {
12404 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12405 "Failure in %s:%d", __func__, __LINE__ );
12406 }
12407
12408 vos_mem_free(pRateUpdateParams);
12409
12410 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12411}
12412
12413/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012414 * -------------------------------------------------------------------------
12415 * DATA interface with WDI for Mgmt Frames
12416 * -------------------------------------------------------------------------
12417 */
Jeff Johnson295189b2012-06-20 16:38:30 -070012418/*
12419 * FUNCTION: WDA_TxComplete
12420 * Callback function for the WDA_TxPacket
12421 */
12422VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
12423 VOS_STATUS status )
12424{
12425
12426 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
12427 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012428 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012429
12430 if(NULL == wdaContext)
12431 {
12432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12433 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012434 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012435 VOS_ASSERT(0);
Sushant Kaushik8355d202014-12-17 16:48:10 +053012436 vos_pkt_return_packet(pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012437 return VOS_STATUS_E_FAILURE;
12438 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012439
12440 /*Check if frame was timed out or not*/
12441 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
12442 (v_PVOID_t)&uUserData);
12443
12444 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
12445 {
12446 /*Discard frame - no further processing is needed*/
12447 vos_pkt_return_packet(pData);
12448 return VOS_STATUS_SUCCESS;
12449 }
12450
Jeff Johnson295189b2012-06-20 16:38:30 -070012451 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
12452 if( NULL!=wdaContext->pTxCbFunc)
12453 {
12454 /*check if packet is freed already*/
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012455 if(vos_atomic_set((uintptr_t*)&wdaContext->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (uintptr_t)pData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012456 {
12457 wdaContext->pTxCbFunc(pMac, pData);
12458 }
12459 else
12460 {
12461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012462 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012463 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012464 //Return from here since we reaching here because the packet already timeout
12465 return status;
12466 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012467 }
12468
12469 /*
12470 * Trigger the event to bring the HAL TL Tx complete function to come
12471 * out of wait
12472 * Let the coe above to complete the packet first. When this event is set,
12473 * the thread waiting for the event may run and set Vospacket_freed causing the original
12474 * packet not being freed.
12475 */
12476 status = vos_event_set(&wdaContext->txFrameEvent);
12477 if(!VOS_IS_STATUS_SUCCESS(status))
12478 {
12479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012480 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012481 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012482 return status;
12483}
Jeff Johnson295189b2012-06-20 16:38:30 -070012484/*
12485 * FUNCTION: WDA_TxPacket
12486 * Forward TX management frame to WDI
12487 */
12488VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
12489 void *pFrmBuf,
12490 tANI_U16 frmLen,
12491 eFrameType frmType,
12492 eFrameTxDir txDir,
12493 tANI_U8 tid,
12494 pWDATxRxCompFunc pCompFunc,
12495 void *pData,
12496 pWDAAckFnTxComp pAckTxComp,
Kanchanapally, Vidyullathaf9426e52013-12-24 17:28:54 +053012497 tANI_U32 txFlag)
Jeff Johnson295189b2012-06-20 16:38:30 -070012498{
12499 VOS_STATUS status = VOS_STATUS_SUCCESS ;
12500 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
12501 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
12502 tANI_U8 eventIdx = 0;
12503 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
12504 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -070012505 if((NULL == pWDA)||(NULL == pFrmBuf))
12506 {
12507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012508 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012509 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070012510 VOS_ASSERT(0);
12511 return VOS_STATUS_E_FAILURE;
12512 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012513
Jeff Johnson295189b2012-06-20 16:38:30 -070012514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012515 "Tx Mgmt Frame Subtype: %d alloc(%p)", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070012516 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12517 if(NULL == pMac)
12518 {
12519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012520 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012521 VOS_ASSERT(0);
12522 return VOS_STATUS_E_FAILURE;
12523 }
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012524
Jeff Johnson295189b2012-06-20 16:38:30 -070012525 /* store the call back function in WDA context */
12526 pWDA->pTxCbFunc = pCompFunc;
12527 /* store the call back for the function of ackTxComplete */
12528 if( pAckTxComp )
12529 {
Jeff Johnsone7245742012-09-05 17:12:55 -070012530 if( NULL != pWDA->pAckTxCbFunc )
12531 {
12532 /* Already TxComp is active no need to active again */
12533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012534 "There is already one request pending for tx complete");
Jeff Johnsone7245742012-09-05 17:12:55 -070012535 pWDA->pAckTxCbFunc( pMac, 0);
12536 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012537
Jeff Johnsone7245742012-09-05 17:12:55 -070012538 if( VOS_STATUS_SUCCESS !=
12539 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12540 {
12541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12542 "Tx Complete timeout Timer Stop Failed ");
12543 }
12544 else
12545 {
12546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080012547 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070012548 }
12549 }
12550
12551 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
12552 pWDA->pAckTxCbFunc = pAckTxComp;
12553 if( VOS_STATUS_SUCCESS !=
12554 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
12555 {
12556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12557 "Tx Complete Timer Start Failed ");
12558 pWDA->pAckTxCbFunc = NULL;
12559 return eHAL_STATUS_FAILURE;
12560 }
12561 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012562 /* Reset the event to be not signalled */
12563 status = vos_event_reset(&pWDA->txFrameEvent);
12564 if(!VOS_IS_STATUS_SUCCESS(status))
12565 {
12566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012567 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012568 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
12569 if( pAckTxComp )
12570 {
12571 pWDA->pAckTxCbFunc = NULL;
12572 if( VOS_STATUS_SUCCESS !=
12573 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12574 {
12575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12576 "Tx Complete timeout Timer Stop Failed ");
12577 }
12578 }
12579 return VOS_STATUS_E_FAILURE;
12580 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012581
12582 /* If Peer Sta mask is set don't overwrite to self sta */
12583 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070012584 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012585 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070012586 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012587 else
12588 {
Ganesh K08bce952012-12-13 15:04:41 -080012589 /* Get system role, use the self station if in unknown role or STA role */
12590 systemRole = wdaGetGlobalSystemRole(pMac);
12591 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
12592 (( eSYSTEM_STA_ROLE == systemRole )
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012593#if defined FEATURE_WLAN_ESE || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080012594 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012595#endif
Ganesh K08bce952012-12-13 15:04:41 -080012596 ))
12597 {
12598 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
12599 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080012600 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012601
Jeff Johnsone7245742012-09-05 17:12:55 -070012602 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
12603 disassoc frame reaches the HW, HAL has already deleted the peer station */
12604 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070012605 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080012606 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070012607 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070012608 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012609 /*Send Probe request frames on self sta idx*/
12610 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070012611 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012612 /* Since we donot want probe responses to be retried, send probe responses
12613 through the NO_ACK queues */
12614 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
12615 {
12616 //probe response is sent out using self station and no retries options.
12617 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
12618 }
12619 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
12620 {
12621 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
12622 }
12623 }
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012624 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012625
12626 /*Set frame tag to 0
12627 We will use the WDA user data in order to tag a frame as expired*/
12628 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
12629 (v_PVOID_t)0);
12630
12631
12632 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
12633 frmLen, ucTypeSubType, tid,
12634 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
12635 {
12636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012637 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012638 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012639 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 -070012640 if( pAckTxComp )
12641 {
12642 pWDA->pAckTxCbFunc = NULL;
12643 if( VOS_STATUS_SUCCESS !=
12644 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12645 {
12646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12647 "Tx Complete timeout Timer Stop Failed ");
12648 }
12649 }
12650 return VOS_STATUS_E_FAILURE;
12651 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012652 /*
12653 * Wait for the event to be set by the TL, to get the response of TX
12654 * complete, this event should be set by the Callback function called by TL
12655 */
12656 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
12657 &eventIdx);
12658 if(!VOS_IS_STATUS_SUCCESS(status))
12659 {
12660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12661 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012662 __func__, status);
Sushant Kaushik8355d202014-12-17 16:48:10 +053012663
12664 /*Tag Frame as timed out for later deletion*/
12665 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
12666 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
Jeff Johnson295189b2012-06-20 16:38:30 -070012667 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
12668 after the packet gets completed(packet freed once)*/
12669
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070012670 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Katya Nigam53677462014-08-04 11:37:28 +053012671 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070012672
Jeff Johnson295189b2012-06-20 16:38:30 -070012673 /* check whether the packet was freed already,so need not free again when
12674 * TL calls the WDA_Txcomplete routine
12675 */
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012676 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED);
12677 /*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 -070012678 {
12679 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012680 } */
12681
Jeff Johnson295189b2012-06-20 16:38:30 -070012682 if( pAckTxComp )
12683 {
12684 pWDA->pAckTxCbFunc = NULL;
12685 if( VOS_STATUS_SUCCESS !=
12686 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12687 {
12688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12689 "Tx Complete timeout Timer Stop Failed ");
12690 }
12691 }
12692 status = VOS_STATUS_E_FAILURE;
12693 }
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053012694#ifdef WLAN_DUMP_MGMTFRAMES
12695 if (VOS_IS_STATUS_SUCCESS(status))
12696 {
12697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12698 "%s() TX packet : SubType %d", __func__,pFc->subType);
12699 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12700 pData, frmLen);
12701 }
12702#endif
12703
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080012704 if (VOS_IS_STATUS_SUCCESS(status))
12705 {
12706 if (pMac->fEnableDebugLog & 0x1)
12707 {
12708 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
12709 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
12710 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
12711 {
12712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
12713 pFc->type, pFc->subType);
12714 }
12715 }
12716 }
12717
12718
Jeff Johnson295189b2012-06-20 16:38:30 -070012719 return status;
12720}
Jeff Johnson295189b2012-06-20 16:38:30 -070012721/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012722 * FUNCTION: WDA_ProcessDHCPStartInd
12723 * Forward DHCP Start to WDI
12724 */
12725static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
12726 tAniDHCPInd *dhcpStartInd)
12727{
12728 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053012729 WDI_DHCPInd wdiDHCPInd;
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012730
c_hpothu0b0cab72014-02-13 21:52:40 +053012731 wdiDHCPInd.device_mode = dhcpStartInd->device_mode;
12732 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStartInd->macAddr,
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012733 sizeof(tSirMacAddr));
12734
c_hpothu0b0cab72014-02-13 21:52:40 +053012735 status = WDI_dhcpStartInd(&wdiDHCPInd);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012736
c_hpothu0b0cab72014-02-13 21:52:40 +053012737 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012738 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12740 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012741 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012742 else if (WDI_STATUS_SUCCESS_SYNC != status)
12743 {
12744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12745 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
12746 }
12747
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012748 vos_mem_free(dhcpStartInd);
12749 return CONVERT_WDI2VOS_STATUS(status) ;
12750}
12751
12752 /*
12753 * FUNCTION: WDA_ProcessDHCPStopInd
12754 * Forward DHCP Stop to WDI
12755 */
12756 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
12757 tAniDHCPInd *dhcpStopInd)
12758 {
12759 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053012760 WDI_DHCPInd wdiDHCPInd;
12761
12762 wdiDHCPInd.device_mode = dhcpStopInd->device_mode;
12763 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
12764
12765 status = WDI_dhcpStopInd(&wdiDHCPInd);
12766
12767 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012768 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12770 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012771 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012772 else if (WDI_STATUS_SUCCESS_SYNC != status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012773 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12775 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012776 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012777
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012778 vos_mem_free(dhcpStopInd);
c_hpothu0b0cab72014-02-13 21:52:40 +053012779
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012780 return CONVERT_WDI2VOS_STATUS(status) ;
12781 }
12782
12783/*
Siddharth Bhal171788a2014-09-29 21:02:40 +053012784 * FUNCTION: WDA_ProcessSetSpoofMacAddrReq
12785 *
12786 * DESCRIPTION: This function sends Spoof Mac Addr Req to WDI
12787 *
12788 * PARAM:
12789 * pWDA: pointer to WDA context
12790 * pReq: pointer to stop batch scan request
12791 */
12792VOS_STATUS WDA_ProcessSetSpoofMacAddrReq(tWDA_CbContext *pWDA,
12793 tpSpoofMacAddrReqParams pReq)
12794{
12795 WDI_Status wdiStatus;
12796 WDI_SpoofMacAddrInfoType *WDI_SpoofMacAddrInfoParams;
12797 tWDA_ReqParams *pWdaParams;
12798
12799 WDI_SpoofMacAddrInfoParams = (WDI_SpoofMacAddrInfoType *)vos_mem_malloc(
12800 sizeof(WDI_SpoofMacAddrInfoType));
12801 if(NULL == WDI_SpoofMacAddrInfoParams) {
12802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12803 "%s: VOS MEM Alloc Failure in Spoof Req", __func__);
12804 VOS_ASSERT(0);
12805 return VOS_STATUS_E_NOMEM;
12806 }
12807 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12808 if(NULL == pWdaParams) {
12809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12810 "%s: VOS MEM Alloc Failure", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +053012811 vos_mem_free(WDI_SpoofMacAddrInfoParams);
Siddharth Bhal171788a2014-09-29 21:02:40 +053012812 VOS_ASSERT(0);
12813 return VOS_STATUS_E_NOMEM;
12814 }
12815
12816 vos_mem_copy(WDI_SpoofMacAddrInfoParams->macAddr,
12817 pReq->macAddr, VOS_MAC_ADDRESS_LEN);
12818
12819 pWdaParams->pWdaContext = pWDA;
12820 /* Store Upper layer req pointer, as this will be used for response */
Siddharth Bhal029d6732014-10-09 21:31:23 +053012821 pWdaParams->wdaMsgParam = (void *)pReq;
12822
12823 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, WDA_MAC_ADDRESS_STR,
12824 WDA_MAC_ADDR_ARRAY(WDI_SpoofMacAddrInfoParams->macAddr));
12825
Siddharth Bhal171788a2014-09-29 21:02:40 +053012826 /* store Params pass it to WDI */
12827 pWdaParams->wdaWdiApiMsgParam = (void *)WDI_SpoofMacAddrInfoParams ;
12828
12829 wdiStatus = WDI_SetSpoofMacAddrReq(WDI_SpoofMacAddrInfoParams,
Siddharth Bhal029d6732014-10-09 21:31:23 +053012830 (WDI_SetSpoofMacAddrRspCb) WDA_SpoofMacAddrRspCallback,
12831 pWdaParams );
Siddharth Bhal171788a2014-09-29 21:02:40 +053012832
12833 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12834 {
12835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12836 "Failure in SetSpoofMacAddrReq Params WDI API, free all the memory " );
12837 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12838 vos_mem_free(pWdaParams->wdaMsgParam);
12839 vos_mem_free(pWdaParams);
12840 }
12841
12842 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
12843}
12844
12845/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012846 * FUNCTION: WDA_McProcessMsg
12847 * Trigger DAL-AL to start CFG download
12848 */
12849VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
12850{
12851 VOS_STATUS status = VOS_STATUS_SUCCESS;
12852 tWDA_CbContext *pWDA = NULL ;
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012853 if(NULL == pMsg)
Jeff Johnson295189b2012-06-20 16:38:30 -070012854 {
12855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012856 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012857 VOS_ASSERT(0);
12858 return VOS_STATUS_E_FAILURE;
12859 }
12860
12861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012862 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070012863
12864 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
12865 if(NULL == pWDA )
12866 {
12867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053012868 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012869 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070012870 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012871 return VOS_STATUS_E_FAILURE;
12872 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012873 /* Process all the WDA messages.. */
12874 switch( pMsg->type )
12875 {
12876 case WNI_CFG_DNLD_REQ:
12877 {
12878 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070012879 /* call WDA complete event if config download success */
12880 if( VOS_IS_STATUS_SUCCESS(status) )
12881 {
12882 vos_WDAComplete_cback(pVosContext);
12883 }
12884 else
12885 {
12886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12887 "WDA Config Download failure" );
12888 }
12889 break ;
12890 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012891 /*
12892 * Init SCAN request from PE, convert it into DAL format
12893 * and send it to DAL
12894 */
12895 case WDA_INIT_SCAN_REQ:
12896 {
12897 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
12898 break ;
12899 }
12900 /* start SCAN request from PE */
12901 case WDA_START_SCAN_REQ:
12902 {
12903 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
12904 break ;
12905 }
12906 /* end SCAN request from PE */
12907 case WDA_END_SCAN_REQ:
12908 {
12909 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
12910 break ;
12911 }
12912 /* end SCAN request from PE */
12913 case WDA_FINISH_SCAN_REQ:
12914 {
12915 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
12916 break ;
12917 }
12918 /* join request from PE */
12919 case WDA_CHNL_SWITCH_REQ:
12920 {
12921 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
12922 {
12923 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
12924 }
12925 else
12926 {
Kalikinkar dhara1e83b772014-02-06 12:59:22 -080012927 if (IS_FEATURE_SUPPORTED_BY_FW(CH_SWITCH_V1) &&
12928 eHAL_CHANNEL_SWITCH_SOURCE_CSA ==
12929 ((tSwitchChannelParams*)pMsg->bodyptr)->channelSwitchSrc )
12930 {
12931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12932 "call ProcessChannelSwitchReq_V1" );
12933 WDA_ProcessChannelSwitchReq_V1(pWDA,
12934 (tSwitchChannelParams*)pMsg->bodyptr) ;
12935 }
12936 else
12937 {
12938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12939 "call ProcessChannelSwitchReq" );
12940 WDA_ProcessChannelSwitchReq(pWDA,
12941 (tSwitchChannelParams*)pMsg->bodyptr) ;
12942 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012943 }
12944 break ;
12945 }
12946 /* ADD BSS request from PE */
12947 case WDA_ADD_BSS_REQ:
12948 {
12949 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
12950 break ;
12951 }
12952 case WDA_ADD_STA_REQ:
12953 {
12954 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
12955 break ;
12956 }
12957 case WDA_DELETE_BSS_REQ:
12958 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012959 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
12960 break ;
12961 }
12962 case WDA_DELETE_STA_REQ:
12963 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012964 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
12965 break ;
12966 }
12967 case WDA_CONFIG_PARAM_UPDATE_REQ:
12968 {
12969 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
12970 break ;
12971 }
12972 case WDA_SET_BSSKEY_REQ:
12973 {
12974 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
12975 break ;
12976 }
12977 case WDA_SET_STAKEY_REQ:
12978 {
12979 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
12980 break ;
12981 }
12982 case WDA_SET_STA_BCASTKEY_REQ:
12983 {
12984 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
12985 break ;
12986 }
12987 case WDA_REMOVE_BSSKEY_REQ:
12988 {
12989 WDA_ProcessRemoveBssKeyReq(pWDA,
12990 (tRemoveBssKeyParams *)pMsg->bodyptr);
12991 break ;
12992 }
12993 case WDA_REMOVE_STAKEY_REQ:
12994 {
12995 WDA_ProcessRemoveStaKeyReq(pWDA,
12996 (tRemoveStaKeyParams *)pMsg->bodyptr);
12997 break ;
12998 }
12999 case WDA_REMOVE_STA_BCASTKEY_REQ:
13000 {
13001 /* TODO: currently UMAC is not sending this request, Add the code for
13002 handling this request when UMAC supports */
13003 break;
13004 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013005#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -070013006 case WDA_TSM_STATS_REQ:
13007 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070013008 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070013009 break;
13010 }
13011#endif
13012 case WDA_UPDATE_EDCA_PROFILE_IND:
13013 {
13014 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
13015 break;
13016 }
13017 case WDA_ADD_TS_REQ:
13018 {
13019 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
13020 break;
13021 }
13022 case WDA_DEL_TS_REQ:
13023 {
13024 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
13025 break;
13026 }
13027 case WDA_ADDBA_REQ:
13028 {
13029 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
13030 break;
13031 }
13032 case WDA_DELBA_IND:
13033 {
13034 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
13035 break;
13036 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080013037 case WDA_UPDATE_CHAN_LIST_REQ:
13038 {
13039 WDA_ProcessUpdateChannelList(pWDA,
13040 (tSirUpdateChanList *)pMsg->bodyptr);
13041 break;
13042 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013043 case WDA_SET_LINK_STATE:
13044 {
13045 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
13046 break;
13047 }
13048 case WDA_GET_STATISTICS_REQ:
13049 {
13050 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
13051 break;
13052 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013053#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080013054 case WDA_GET_ROAM_RSSI_REQ:
13055 {
13056 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
13057 break;
13058 }
13059#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013060 case WDA_PWR_SAVE_CFG:
13061 {
13062 if(pWDA->wdaState == WDA_READY_STATE)
13063 {
13064 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
13065 }
13066 else
13067 {
13068 if(NULL != pMsg->bodyptr)
13069 {
13070 vos_mem_free(pMsg->bodyptr);
13071 }
13072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13073 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
13074 }
13075 break;
13076 }
13077 case WDA_ENTER_IMPS_REQ:
13078 {
13079 if(pWDA->wdaState == WDA_READY_STATE)
13080 {
13081 WDA_ProcessEnterImpsReq(pWDA);
13082 }
13083 else
13084 {
13085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13086 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
13087 }
13088 break;
13089 }
13090 case WDA_EXIT_IMPS_REQ:
13091 {
13092 if(pWDA->wdaState == WDA_READY_STATE)
13093 {
13094 WDA_ProcessExitImpsReq(pWDA);
13095 }
13096 else
13097 {
13098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13099 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
13100 }
13101 break;
13102 }
13103 case WDA_ENTER_BMPS_REQ:
13104 {
13105 if(pWDA->wdaState == WDA_READY_STATE)
13106 {
13107 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
13108 }
13109 else
13110 {
13111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13112 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
13113 }
13114 break;
13115 }
13116 case WDA_EXIT_BMPS_REQ:
13117 {
13118 if(pWDA->wdaState == WDA_READY_STATE)
13119 {
13120 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
13121 }
13122 else
13123 {
13124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13125 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
13126 }
13127 break;
13128 }
13129 case WDA_ENTER_UAPSD_REQ:
13130 {
13131 if(pWDA->wdaState == WDA_READY_STATE)
13132 {
13133 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
13134 }
13135 else
13136 {
13137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13138 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
13139 }
13140 break;
13141 }
13142 case WDA_EXIT_UAPSD_REQ:
13143 {
13144 if(pWDA->wdaState == WDA_READY_STATE)
13145 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013146 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070013147 }
13148 else
13149 {
13150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13151 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
13152 }
13153 break;
13154 }
13155 case WDA_UPDATE_UAPSD_IND:
13156 {
13157 if(pWDA->wdaState == WDA_READY_STATE)
13158 {
13159 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
13160 }
13161 else
13162 {
13163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13164 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
13165 }
13166 break;
13167 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013168 case WDA_REGISTER_PE_CALLBACK :
13169 {
13170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13171 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
13172 /*TODO: store the PE callback */
13173 /* Do Nothing? MSG Body should be freed at here */
13174 if(NULL != pMsg->bodyptr)
13175 {
13176 vos_mem_free(pMsg->bodyptr);
13177 }
13178 break;
13179 }
13180 case WDA_SYS_READY_IND :
13181 {
13182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13183 "Handling msg type WDA_SYS_READY_IND " );
13184 pWDA->wdaState = WDA_READY_STATE;
13185 if(NULL != pMsg->bodyptr)
13186 {
13187 vos_mem_free(pMsg->bodyptr);
13188 }
13189 break;
13190 }
13191 case WDA_BEACON_FILTER_IND :
13192 {
13193 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
13194 break;
13195 }
13196 case WDA_BTC_SET_CFG:
13197 {
13198 /*TODO: handle this while dealing with BTC */
13199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13200 "Handling msg type WDA_BTC_SET_CFG " );
13201 /* Do Nothing? MSG Body should be freed at here */
13202 if(NULL != pMsg->bodyptr)
13203 {
13204 vos_mem_free(pMsg->bodyptr);
13205 }
13206 break;
13207 }
13208 case WDA_SIGNAL_BT_EVENT:
13209 {
13210 /*TODO: handle this while dealing with BTC */
13211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13212 "Handling msg type WDA_SIGNAL_BT_EVENT " );
13213 /* Do Nothing? MSG Body should be freed at here */
13214 if(NULL != pMsg->bodyptr)
13215 {
13216 vos_mem_free(pMsg->bodyptr);
13217 }
13218 break;
13219 }
13220 case WDA_CFG_RXP_FILTER_REQ:
13221 {
13222 WDA_ProcessConfigureRxpFilterReq(pWDA,
13223 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
13224 break;
13225 }
13226 case WDA_SET_HOST_OFFLOAD:
13227 {
13228 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
13229 break;
13230 }
13231 case WDA_SET_KEEP_ALIVE:
13232 {
13233 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
13234 break;
13235 }
13236#ifdef WLAN_NS_OFFLOAD
13237 case WDA_SET_NS_OFFLOAD:
13238 {
13239 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
13240 break;
13241 }
13242#endif //WLAN_NS_OFFLOAD
13243 case WDA_ADD_STA_SELF_REQ:
13244 {
13245 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
13246 break;
13247 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013248 case WDA_DEL_STA_SELF_REQ:
13249 {
13250 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
13251 break;
13252 }
13253 case WDA_WOWL_ADD_BCAST_PTRN:
13254 {
13255 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
13256 break;
13257 }
13258 case WDA_WOWL_DEL_BCAST_PTRN:
13259 {
13260 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
13261 break;
13262 }
13263 case WDA_WOWL_ENTER_REQ:
13264 {
13265 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
13266 break;
13267 }
13268 case WDA_WOWL_EXIT_REQ:
13269 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013270 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070013271 break;
13272 }
13273 case WDA_TL_FLUSH_AC_REQ:
13274 {
13275 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
13276 break;
13277 }
13278 case WDA_SIGNAL_BTAMP_EVENT:
13279 {
13280 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
13281 break;
13282 }
Abhishek Singh85b74712014-10-08 11:38:19 +053013283 case WDA_FW_STATS_GET_REQ:
13284 {
13285 WDA_ProcessFWStatsGetReq(pWDA,
13286 (tSirFWStatsGetReq *)pMsg->bodyptr);
13287 break;
13288 }
Sunil Duttbd736ed2014-05-26 21:19:41 +053013289#ifdef WLAN_FEATURE_LINK_LAYER_STATS
13290 case WDA_LINK_LAYER_STATS_SET_REQ:
13291 {
13292 WDA_ProcessLLStatsSetReq(pWDA, (tSirLLStatsSetReq *)pMsg->bodyptr);
13293 break;
13294 }
13295 case WDA_LINK_LAYER_STATS_GET_REQ:
13296 {
13297 WDA_ProcessLLStatsGetReq(pWDA, (tSirLLStatsGetReq *)pMsg->bodyptr);
13298 break;
13299 }
13300 case WDA_LINK_LAYER_STATS_CLEAR_REQ:
13301 {
13302 WDA_ProcessLLStatsClearReq(pWDA, (tSirLLStatsClearReq *)pMsg->bodyptr);
13303 break;
13304 }
13305#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Dino Mycle41bdc942014-06-10 11:30:24 +053013306#ifdef WLAN_FEATURE_EXTSCAN
13307 case WDA_EXTSCAN_GET_CAPABILITIES_REQ:
13308 {
13309 WDA_ProcessEXTScanGetCapabilitiesReq(pWDA,
13310 (tSirGetEXTScanCapabilitiesReqParams *)pMsg->bodyptr);
13311 break;
13312 }
13313 case WDA_EXTSCAN_START_REQ:
13314 {
13315 WDA_ProcessEXTScanStartReq(pWDA,
13316 (tSirEXTScanStartReqParams *)pMsg->bodyptr);
13317 break;
13318 }
13319 case WDA_EXTSCAN_STOP_REQ:
13320 {
13321 WDA_ProcessEXTScanStopReq(pWDA,
13322 (tSirEXTScanStopReqParams *)pMsg->bodyptr);
13323 break;
13324 }
13325 case WDA_EXTSCAN_GET_CACHED_RESULTS_REQ:
13326 {
13327 WDA_ProcessEXTScanGetCachedResultsReq(pWDA,
13328 (tSirEXTScanGetCachedResultsReqParams *)pMsg->bodyptr);
13329 break;
13330 }
13331 case WDA_EXTSCAN_SET_BSSID_HOTLIST_REQ:
13332 {
13333 WDA_ProcessEXTScanSetBSSIDHotlistReq(pWDA,
13334 (tSirEXTScanSetBssidHotListReqParams *)pMsg->bodyptr);
13335 break;
13336 }
13337 case WDA_EXTSCAN_RESET_BSSID_HOTLIST_REQ:
13338 {
13339 WDA_ProcessEXTScanResetBSSIDHotlistReq(pWDA,
13340 (tSirEXTScanResetBssidHotlistReqParams *)pMsg->bodyptr);
13341 break;
13342 }
13343 case WDA_EXTSCAN_SET_SIGNF_RSSI_CHANGE_REQ:
13344 {
13345 WDA_ProcessEXTScanSetSignfRSSIChangeReq(pWDA,
13346 (tSirEXTScanSetSignificantChangeReqParams *)pMsg->bodyptr);
13347 break;
13348 }
13349 case WDA_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_REQ:
13350 {
13351 WDA_ProcessEXTScanResetSignfRSSIChangeReq(pWDA,
13352 (tSirEXTScanResetSignificantChangeReqParams *)pMsg->bodyptr);
13353 break;
13354 }
13355#endif /* WLAN_FEATURE_EXTSCAN */
Jeff Johnson295189b2012-06-20 16:38:30 -070013356#ifdef WDA_UT
13357 case WDA_WDI_EVENT_MSG:
13358 {
13359 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
13360 break ;
13361 }
13362#endif
13363 case WDA_UPDATE_BEACON_IND:
13364 {
13365 WDA_ProcessUpdateBeaconParams(pWDA,
13366 (tUpdateBeaconParams *)pMsg->bodyptr);
13367 break;
13368 }
13369 case WDA_SEND_BEACON_REQ:
13370 {
13371 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
13372 break;
13373 }
13374 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
13375 {
13376 WDA_ProcessUpdateProbeRspTemplate(pWDA,
13377 (tSendProbeRespParams *)pMsg->bodyptr);
13378 break;
13379 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013380#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -070013381 case WDA_SET_MAX_TX_POWER_REQ:
13382 {
13383 WDA_ProcessSetMaxTxPowerReq(pWDA,
13384 (tMaxTxPowerParams *)pMsg->bodyptr);
13385 break;
13386 }
13387#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070013388 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
13389 {
13390 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
13391 pMsg->bodyptr);
13392 break;
13393 }
schang86c22c42013-03-13 18:41:24 -070013394 case WDA_SET_TX_POWER_REQ:
13395 {
13396 WDA_ProcessSetTxPowerReq(pWDA,
13397 (tSirSetTxPowerReq *)pMsg->bodyptr);
13398 break;
13399 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013400 case WDA_SET_P2P_GO_NOA_REQ:
13401 {
13402 WDA_ProcessSetP2PGONOAReq(pWDA,
13403 (tP2pPsParams *)pMsg->bodyptr);
13404 break;
13405 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013406 /* timer related messages */
13407 case WDA_TIMER_BA_ACTIVITY_REQ:
13408 {
13409 WDA_BaCheckActivity(pWDA) ;
13410 break ;
13411 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013412
13413 /* timer related messages */
13414 case WDA_TIMER_TRAFFIC_STATS_IND:
13415 {
13416 WDA_TimerTrafficStatsInd(pWDA);
13417 break;
13418 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013419#ifdef WLAN_FEATURE_VOWIFI_11R
13420 case WDA_AGGR_QOS_REQ:
13421 {
13422 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
13423 break;
13424 }
13425#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070013426 case WDA_FTM_CMD_REQ:
13427 {
13428 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
13429 break ;
13430 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013431#ifdef FEATURE_OEM_DATA_SUPPORT
13432 case WDA_START_OEM_DATA_REQ:
13433 {
13434 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
13435 break;
13436 }
13437#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070013438 /* Tx Complete Time out Indication */
13439 case WDA_TX_COMPLETE_TIMEOUT_IND:
13440 {
13441 WDA_ProcessTxCompleteTimeOutInd(pWDA);
13442 break;
13443 }
13444 case WDA_WLAN_SUSPEND_IND:
13445 {
13446 WDA_ProcessWlanSuspendInd(pWDA,
13447 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
13448 break;
13449 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013450 case WDA_WLAN_RESUME_REQ:
13451 {
13452 WDA_ProcessWlanResumeReq(pWDA,
13453 (tSirWlanResumeParam *)pMsg->bodyptr) ;
13454 break;
13455 }
13456
13457 case WDA_UPDATE_CF_IND:
13458 {
13459 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
13460 pMsg->bodyptr = NULL;
13461 break;
13462 }
13463#ifdef FEATURE_WLAN_SCAN_PNO
13464 case WDA_SET_PNO_REQ:
13465 {
13466 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
13467 break;
13468 }
13469 case WDA_UPDATE_SCAN_PARAMS_REQ:
13470 {
13471 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
13472 break;
13473 }
13474 case WDA_SET_RSSI_FILTER_REQ:
13475 {
13476 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
13477 break;
13478 }
13479#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013480#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013481 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013482 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013483 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013484 break;
13485 }
13486#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013487 case WDA_SET_TX_PER_TRACKING_REQ:
13488 {
13489 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
13490 break;
13491 }
13492
13493#ifdef WLAN_FEATURE_PACKET_FILTERING
13494 case WDA_8023_MULTICAST_LIST_REQ:
13495 {
13496 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
13497 break;
13498 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013499 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
13500 {
13501 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
13502 break;
13503 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013504 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
13505 {
13506 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
13507 break;
13508 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013509 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
13510 {
13511 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
13512 break;
13513 }
13514#endif // WLAN_FEATURE_PACKET_FILTERING
13515
13516
13517 case WDA_TRANSMISSION_CONTROL_IND:
13518 {
13519 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
13520 break;
13521 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013522 case WDA_SET_POWER_PARAMS_REQ:
13523 {
13524 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
13525 break;
13526 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013527#ifdef WLAN_FEATURE_GTK_OFFLOAD
13528 case WDA_GTK_OFFLOAD_REQ:
13529 {
13530 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
13531 break;
13532 }
13533
13534 case WDA_GTK_OFFLOAD_GETINFO_REQ:
13535 {
13536 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
13537 break;
13538 }
13539#endif //WLAN_FEATURE_GTK_OFFLOAD
13540
13541 case WDA_SET_TM_LEVEL_REQ:
13542 {
13543 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
13544 break;
13545 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053013546
Mohit Khanna4a70d262012-09-11 16:30:12 -070013547 case WDA_UPDATE_OP_MODE:
13548 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053013549 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
13550 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
13551 {
13552 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
13553 }
13554 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070013555 {
13556 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
13557 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
13558 else
13559 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013560 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070013561 }
13562 else
13563 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013564 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070013565 break;
13566 }
Chet Lanctot186b5732013-03-18 10:26:30 -070013567#ifdef WLAN_FEATURE_11W
13568 case WDA_EXCLUDE_UNENCRYPTED_IND:
13569 {
13570 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
13571 break;
13572 }
13573#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053013574#ifdef FEATURE_WLAN_TDLS
13575 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
13576 {
13577 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
13578 break;
13579 }
13580#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013581 case WDA_DHCP_START_IND:
13582 {
13583 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
13584 break;
13585 }
13586 case WDA_DHCP_STOP_IND:
13587 {
13588 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
13589 break;
13590 }
Leo Chang9056f462013-08-01 19:21:11 -070013591#ifdef FEATURE_WLAN_LPHB
13592 case WDA_LPHB_CONF_REQ:
13593 {
13594 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
13595 break;
13596 }
13597#endif
Yue Mab9c86f42013-08-14 15:59:08 -070013598 case WDA_ADD_PERIODIC_TX_PTRN_IND:
13599 {
13600 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
13601 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
13602 break;
13603 }
13604 case WDA_DEL_PERIODIC_TX_PTRN_IND:
13605 {
13606 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
13607 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
13608 break;
13609 }
13610
Rajeev79dbe4c2013-10-05 11:03:42 +053013611#ifdef FEATURE_WLAN_BATCH_SCAN
13612 case WDA_SET_BATCH_SCAN_REQ:
13613 {
13614 WDA_ProcessSetBatchScanReq(pWDA,
13615 (tSirSetBatchScanReq *)pMsg->bodyptr);
13616 break;
13617 }
Chittajit Mitraf5413a42013-10-18 14:20:08 -070013618 case WDA_RATE_UPDATE_IND:
13619 {
13620 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
13621 break;
13622 }
Rajeev79dbe4c2013-10-05 11:03:42 +053013623 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
13624 {
13625 WDA_ProcessTriggerBatchScanResultInd(pWDA,
13626 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
13627 break;
13628 }
13629 case WDA_STOP_BATCH_SCAN_IND:
13630 {
13631 WDA_ProcessStopBatchScanInd(pWDA,
13632 (tSirStopBatchScanInd *)pMsg->bodyptr);
13633 break;
13634 }
c_hpothu92367912014-05-01 15:18:17 +053013635 case WDA_GET_BCN_MISS_RATE_REQ:
13636 WDA_ProcessGetBcnMissRateReq(pWDA,
13637 (tSirBcnMissRateReq *)pMsg->bodyptr);
13638 break;
Rajeev79dbe4c2013-10-05 11:03:42 +053013639#endif
13640
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053013641 case WDA_HT40_OBSS_SCAN_IND:
13642 {
13643 WDA_ProcessHT40OBSSScanInd(pWDA,
13644 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
13645 break;
13646 }
13647 case WDA_HT40_OBSS_STOP_SCAN_IND:
13648 {
13649 WDA_ProcessHT40OBSSStopScanInd(pWDA,
13650 (tANI_U8*)pMsg->bodyptr);
13651 break;
13652 }
Atul Mittalc0f739f2014-07-31 13:47:47 +053013653// tdlsoffchan
13654#ifdef FEATURE_WLAN_TDLS
13655 case WDA_SET_TDLS_CHAN_SWITCH_REQ:
13656 {
13657 WDA_ProcessSetTdlsChanSwitchReq(pWDA, (tTdlsChanSwitchParams *)pMsg->bodyptr);
13658 break;
13659 }
13660#endif
Siddharth Bhal171788a2014-09-29 21:02:40 +053013661 case WDA_SPOOF_MAC_ADDR_REQ:
13662 {
13663 WDA_ProcessSetSpoofMacAddrReq(pWDA, (tpSpoofMacAddrReqParams)pMsg->bodyptr);
13664 break;
13665 }
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053013666 case WDA_ENCRYPT_MSG_REQ:
13667 {
13668 WDA_ProcessEncryptMsgReq(pWDA, (u8 *)pMsg->bodyptr);
13669 break;
13670 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013671 default:
13672 {
Agarwal Ashishbf98caf2014-03-25 13:29:11 +053013673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070013674 "No Handling for msg type %x in WDA "
13675 ,pMsg->type);
13676 /* Do Nothing? MSG Body should be freed at here */
13677 if(NULL != pMsg->bodyptr)
13678 {
13679 vos_mem_free(pMsg->bodyptr);
13680 }
13681 //WDA_VOS_ASSERT(0) ;
13682 }
13683 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013684 return status ;
13685}
13686
Jeff Johnson295189b2012-06-20 16:38:30 -070013687/*
13688 * FUNCTION: WDA_LowLevelIndCallback
13689 * IND API callback from WDI, send Ind to PE
13690 */
13691void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
13692 void* pUserData )
13693{
13694 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
13695#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
13696 tSirRSSINotification rssiNotification;
13697#endif
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013698 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070013699 {
13700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053013701 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013702 VOS_ASSERT(0);
13703 return ;
13704 }
13705
13706 switch(wdiLowLevelInd->wdiIndicationType)
13707 {
13708 case WDI_RSSI_NOTIFICATION_IND:
13709 {
13710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13711 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013712#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
13713 rssiNotification.bReserved =
13714 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
13715 rssiNotification.bRssiThres1NegCross =
13716 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
13717 rssiNotification.bRssiThres1PosCross =
13718 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
13719 rssiNotification.bRssiThres2NegCross =
13720 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
13721 rssiNotification.bRssiThres2PosCross =
13722 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
13723 rssiNotification.bRssiThres3NegCross =
13724 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
13725 rssiNotification.bRssiThres3PosCross =
13726 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080013727 rssiNotification.avgRssi = (v_S7_t)
13728 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070013729 WLANTL_BMPSRSSIRegionChangedNotification(
13730 pWDA->pVosContext,
13731 &rssiNotification);
13732#endif
13733 break ;
13734 }
13735 case WDI_MISSED_BEACON_IND:
13736 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080013737 tpSirSmeMissedBeaconInd pMissBeacInd =
13738 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070013739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13740 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013741 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080013742 if(NULL == pMissBeacInd)
13743 {
13744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13745 "%s: VOS MEM Alloc Failure", __func__);
13746 break;
13747 }
13748 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
13749 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
13750 pMissBeacInd->bssIdx =
13751 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
13752 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013753 break ;
13754 }
13755 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
13756 {
13757 /* TODO: Decode Ind and send Ind to PE */
13758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13759 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
13760 break ;
13761 }
13762
13763 case WDI_MIC_FAILURE_IND:
13764 {
13765 tpSirSmeMicFailureInd pMicInd =
13766 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
13767
13768 if(NULL == pMicInd)
13769 {
13770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013771 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013772 break;
13773 }
13774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13775 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013776 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
13777 pMicInd->length = sizeof(tSirSmeMicFailureInd);
13778 vos_mem_copy(pMicInd->bssId,
13779 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
13780 sizeof(tSirMacAddr));
13781 vos_mem_copy(pMicInd->info.srcMacAddr,
13782 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
13783 sizeof(tSirMacAddr));
13784 vos_mem_copy(pMicInd->info.taMacAddr,
13785 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
13786 sizeof(tSirMacAddr));
13787 vos_mem_copy(pMicInd->info.dstMacAddr,
13788 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
13789 sizeof(tSirMacAddr));
13790 vos_mem_copy(pMicInd->info.rxMacAddr,
13791 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
13792 sizeof(tSirMacAddr));
13793 pMicInd->info.multicast =
13794 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
13795 pMicInd->info.keyId=
13796 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
13797 pMicInd->info.IV1=
13798 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
13799 vos_mem_copy(pMicInd->info.TSC,
13800 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070013801 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
13802 (void *)pMicInd , 0) ;
13803 break ;
13804 }
13805 case WDI_FATAL_ERROR_IND:
13806 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070013807 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070013808 /* TODO: Decode Ind and send Ind to PE */
13809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13810 "Received WDI_FATAL_ERROR_IND from WDI ");
13811 break ;
13812 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013813 case WDI_DEL_STA_IND:
13814 {
Jeff Johnson295189b2012-06-20 16:38:30 -070013815 tpDeleteStaContext pDelSTACtx =
13816 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
13817
13818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13819 "Received WDI_DEL_STA_IND from WDI ");
13820 if(NULL == pDelSTACtx)
13821 {
13822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013823 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013824 break;
13825 }
13826 vos_mem_copy(pDelSTACtx->addr2,
13827 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
13828 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013829 vos_mem_copy(pDelSTACtx->bssId,
13830 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
13831 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013832 pDelSTACtx->assocId =
13833 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
13834 pDelSTACtx->reasonCode =
13835 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
13836 pDelSTACtx->staId =
13837 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070013838 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
13839 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013840 break ;
13841 }
13842 case WDI_COEX_IND:
13843 {
13844 tANI_U32 index;
13845 vos_msg_t vosMsg;
c_hpothub3458992014-09-19 19:58:57 +053013846 tSirSmeCoexInd *pSmeCoexInd;
13847
13848 if (SIR_COEX_IND_TYPE_CXM_FEATURES_NOTIFICATION ==
13849 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType)
13850 {
13851 if(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData)
13852 {
13853 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13854 FL("Coex state: 0x%x coex feature: 0x%x"),
13855 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[0],
13856 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[1]);
13857
13858 if (wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2] << 16)
13859 {
13860 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, FL("power limit: 0x%x"),
13861 (tANI_U16)(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2]));
13862 }
13863 }
13864 break;
13865 }
13866
13867 pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070013868 if(NULL == pSmeCoexInd)
13869 {
13870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013871 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013872 break;
13873 }
13874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13875 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013876 /* Message Header */
13877 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
13878 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070013879 /* Info from WDI Indication */
13880 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
13881 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
13882 {
13883 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
13884 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013885 /* VOS message wrapper */
13886 vosMsg.type = eWNI_SME_COEX_IND;
13887 vosMsg.bodyptr = (void *)pSmeCoexInd;
13888 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013889 /* Send message to SME */
13890 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13891 {
13892 /* free the mem and return */
13893 vos_mem_free((v_VOID_t *)pSmeCoexInd);
13894 }
13895 else
13896 {
13897 /* DEBUG */
13898 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13899 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
13900 pSmeCoexInd->coexIndType,
13901 pSmeCoexInd->coexIndData[0],
13902 pSmeCoexInd->coexIndData[1],
13903 pSmeCoexInd->coexIndData[2],
13904 pSmeCoexInd->coexIndData[3]);
13905 }
13906 break;
13907 }
13908 case WDI_TX_COMPLETE_IND:
13909 {
13910 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
13911 /* Calling TxCompleteAck Indication from wda context*/
13912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13913 "Complete Indication received from HAL");
13914 if( pWDA->pAckTxCbFunc )
13915 {
13916 if( VOS_STATUS_SUCCESS !=
13917 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
13918 {
13919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13920 "Tx Complete timeout Timer Stop Failed ");
13921 }
13922 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
13923 pWDA->pAckTxCbFunc = NULL;
13924 }
13925 else
13926 {
13927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13928 "Tx Complete Indication is received after timeout ");
13929 }
13930 break;
13931 }
Viral Modid86bde22012-12-10 13:09:21 -080013932 case WDI_P2P_NOA_START_IND :
13933 {
13934 tSirP2PNoaStart *pP2pNoaStart =
13935 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
13936
13937 if (NULL == pP2pNoaStart)
13938 {
13939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13940 "Memory allocation failure, "
13941 "WDI_P2P_NOA_START_IND not forwarded");
13942 break;
13943 }
13944 pP2pNoaStart->status =
13945 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
13946 pP2pNoaStart->bssIdx =
13947 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
13948 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
13949 (void *)pP2pNoaStart , 0) ;
13950 break;
13951 }
13952
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053013953#ifdef FEATURE_WLAN_TDLS
13954 case WDI_TDLS_IND :
13955 {
13956 tSirTdlsInd *pTdlsInd =
13957 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
13958
13959 if (NULL == pTdlsInd)
13960 {
13961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13962 "Memory allocation failure, "
13963 "WDI_TDLS_IND not forwarded");
13964 break;
13965 }
13966 pTdlsInd->status =
13967 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
13968 pTdlsInd->assocId =
13969 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
13970 pTdlsInd->staIdx =
13971 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
13972 pTdlsInd->reasonCode =
13973 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
13974 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
13975 (void *)pTdlsInd , 0) ;
13976 break;
13977 }
13978#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013979 case WDI_P2P_NOA_ATTR_IND :
13980 {
13981 tSirP2PNoaAttr *pP2pNoaAttr =
13982 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13984 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070013985 if (NULL == pP2pNoaAttr)
13986 {
13987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13988 "Memory allocation failure, "
13989 "WDI_P2P_NOA_ATTR_IND not forwarded");
13990 break;
13991 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013992 pP2pNoaAttr->index =
13993 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
13994 pP2pNoaAttr->oppPsFlag =
13995 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
13996 pP2pNoaAttr->ctWin =
13997 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
13998
13999 pP2pNoaAttr->uNoa1IntervalCnt =
14000 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
14001 pP2pNoaAttr->uNoa1Duration =
14002 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
14003 pP2pNoaAttr->uNoa1Interval =
14004 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
14005 pP2pNoaAttr->uNoa1StartTime =
14006 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070014007 pP2pNoaAttr->uNoa2IntervalCnt =
14008 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
14009 pP2pNoaAttr->uNoa2Duration =
14010 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
14011 pP2pNoaAttr->uNoa2Interval =
14012 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
14013 pP2pNoaAttr->uNoa2StartTime =
14014 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070014015 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
14016 (void *)pP2pNoaAttr , 0) ;
14017 break;
14018 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014019#ifdef FEATURE_WLAN_SCAN_PNO
14020 case WDI_PREF_NETWORK_FOUND_IND:
14021 {
14022 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070014023 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
14024 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
14025 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
14026 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
14027
Jeff Johnson295189b2012-06-20 16:38:30 -070014028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14029 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070014030 if (NULL == pPrefNetworkFoundInd)
14031 {
14032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14033 "Memory allocation failure, "
14034 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053014035 if (NULL !=
14036 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
14037 {
14038 wpalMemoryFree(
14039 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
14040 );
14041 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
14042 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014043 break;
14044 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014045 /* Message Header */
14046 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070014047 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070014048
14049 /* Info from WDI Indication */
14050 pPrefNetworkFoundInd->ssId.length =
14051 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070014052 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070014053 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
14054 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
14055 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070014056 if (NULL !=
14057 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
14058 {
14059 pPrefNetworkFoundInd->frameLength =
14060 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
14061 vos_mem_copy( pPrefNetworkFoundInd->data,
14062 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
14063 pPrefNetworkFoundInd->frameLength);
14064 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
14065 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
14066 }
14067 else
14068 {
14069 pPrefNetworkFoundInd->frameLength = 0;
14070 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014071 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070014072 /* VOS message wrapper */
14073 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
14074 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
14075 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070014076 /* Send message to SME */
14077 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14078 {
14079 /* free the mem and return */
14080 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
14081 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014082 break;
14083 }
14084#endif // FEATURE_WLAN_SCAN_PNO
14085
14086#ifdef WLAN_WAKEUP_EVENTS
14087 case WDI_WAKE_REASON_IND:
14088 {
14089 vos_msg_t vosMsg;
14090 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
14091 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
14092 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
14093
14094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Sushant Kaushik1b645382014-10-13 16:39:36 +053014095 "[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 -070014096 wdiLowLevelInd->wdiIndicationType,
14097 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
14098 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
14099 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
14100
14101 if (NULL == pWakeReasonInd)
14102 {
14103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14104 "Memory allocation failure, "
14105 "WDI_WAKE_REASON_IND not forwarded");
14106 break;
14107 }
14108
14109 vos_mem_zero(pWakeReasonInd, allocSize);
14110
14111 /* Message Header */
14112 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
14113 pWakeReasonInd->mesgLen = allocSize;
14114
14115 /* Info from WDI Indication */
14116 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
14117 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
14118 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
14119 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
14120 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
14121 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
14122 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
14123 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
14124
14125 /* VOS message wrapper */
14126 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
14127 vosMsg.bodyptr = (void *) pWakeReasonInd;
14128 vosMsg.bodyval = 0;
14129
14130 /* Send message to SME */
14131 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14132 {
14133 /* free the mem and return */
14134 vos_mem_free((v_VOID_t *) pWakeReasonInd);
14135 }
14136
14137 break;
14138 }
14139#endif // WLAN_WAKEUP_EVENTS
14140
14141 case WDI_TX_PER_HIT_IND:
14142 {
14143 vos_msg_t vosMsg;
14144 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
14145 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
14146 /* VOS message wrapper */
14147 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
14148 vosMsg.bodyptr = NULL;
14149 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070014150 /* Send message to SME */
14151 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14152 {
14153 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
14154 }
14155 break;
14156 }
14157
Leo Chang9056f462013-08-01 19:21:11 -070014158#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070014159 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070014160 {
Leo Changd9df8aa2013-09-26 13:32:26 -070014161 vos_msg_t vosMsg;
14162 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070014163
Leo Changd9df8aa2013-09-26 13:32:26 -070014164 lphbInd =
14165 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
14166 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070014167 {
14168 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14169 "%s: LPHB IND buffer alloc Fail", __func__);
14170 return ;
14171 }
14172
Leo Changd9df8aa2013-09-26 13:32:26 -070014173 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070014174 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070014175 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070014176 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070014177 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070014178 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
14179
14180 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070014181 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070014182 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
14183
Leo Changd9df8aa2013-09-26 13:32:26 -070014184 vosMsg.type = eWNI_SME_LPHB_IND;
14185 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070014186 vosMsg.bodyval = 0;
14187 /* Send message to SME */
14188 if (VOS_STATUS_SUCCESS !=
14189 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14190 {
14191 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
14192 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070014193 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070014194 }
14195 break;
14196 }
14197#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070014198 case WDI_PERIODIC_TX_PTRN_FW_IND:
14199 {
14200 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14201 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
14202 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
14203 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
14204 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
14205 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
14206 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
14207
14208 break;
14209 }
Leo Chang9056f462013-08-01 19:21:11 -070014210
Ravi Joshid2ca7c42013-07-23 08:37:49 -070014211 case WDI_IBSS_PEER_INACTIVITY_IND:
14212 {
14213 tSirIbssPeerInactivityInd *pIbssInd =
14214 (tSirIbssPeerInactivityInd *)
14215 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
14216
14217 if (NULL == pIbssInd)
14218 {
14219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14220 "Memory allocation failure, "
14221 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
14222 break;
14223 }
14224
14225 pIbssInd->bssIdx =
14226 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
14227 pIbssInd->staIdx =
14228 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
14229 vos_mem_copy(pIbssInd->peerAddr,
14230 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
14231 sizeof(tSirMacAddr));
14232 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
14233 break;
14234 }
14235
Rajeev79dbe4c2013-10-05 11:03:42 +053014236#ifdef FEATURE_WLAN_BATCH_SCAN
14237 case WDI_BATCH_SCAN_RESULT_IND:
14238 {
14239 void *pBatchScanResult;
14240 void *pCallbackContext;
14241 tpAniSirGlobal pMac;
14242
14243 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14244 "Received WDI_BATCHSCAN_RESULT_IND from FW");
14245
14246 /*sanity check*/
Sunil Duttbd736ed2014-05-26 21:19:41 +053014247 if (NULL == pWDA)
Rajeev79dbe4c2013-10-05 11:03:42 +053014248 {
14249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14250 "%s:pWDA is NULL", __func__);
14251 VOS_ASSERT(0);
14252 return;
14253 }
14254
14255 pBatchScanResult =
14256 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
14257 if (NULL == pBatchScanResult)
14258 {
14259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14260 "%s:Batch scan result from FW is null can't invoke HDD callback",
14261 __func__);
14262 VOS_ASSERT(0);
14263 return;
14264 }
14265
14266 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14267 if (NULL == pMac)
14268 {
14269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14270 "%s:pMac is NULL", __func__);
14271 VOS_ASSERT(0);
14272 return;
14273 }
14274
14275 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
14276 /*call hdd callback with set batch scan response data*/
14277 if(pMac->pmc.batchScanResultCallback)
14278 {
14279 pMac->pmc.batchScanResultCallback(pCallbackContext,
14280 pBatchScanResult);
14281 }
14282 else
14283 {
14284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14285 "%s:HDD callback is null", __func__);
14286 VOS_ASSERT(0);
14287 }
14288 break;
14289 }
14290#endif
14291
Leo Chang0b0e45a2013-12-15 15:18:55 -080014292#ifdef FEATURE_WLAN_CH_AVOID
14293 case WDI_CH_AVOID_IND:
14294 {
14295 vos_msg_t vosMsg;
14296 tSirChAvoidIndType *chAvoidInd;
14297
14298 chAvoidInd =
14299 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
14300 if (NULL == chAvoidInd)
14301 {
14302 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14303 "%s: CH_AVOID IND buffer alloc Fail", __func__);
14304 return ;
14305 }
14306
14307 chAvoidInd->avoidRangeCount =
14308 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
14309 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
14310 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
14311 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
14312
14313 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14314 "%s : WDA CH avoid notification", __func__);
14315
14316 vosMsg.type = eWNI_SME_CH_AVOID_IND;
14317 vosMsg.bodyptr = chAvoidInd;
14318 vosMsg.bodyval = 0;
14319 /* Send message to SME */
14320 if (VOS_STATUS_SUCCESS !=
14321 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14322 {
14323 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14324 "post eWNI_SME_CH_AVOID_IND to SME Failed");
14325 vos_mem_free(chAvoidInd);
14326 }
14327 break;
14328 }
14329#endif /* FEATURE_WLAN_CH_AVOID */
14330
Sunil Duttbd736ed2014-05-26 21:19:41 +053014331#ifdef WLAN_FEATURE_LINK_LAYER_STATS
14332 case WDI_LL_STATS_RESULTS_IND:
14333 {
14334 void *pLinkLayerStatsInd;
Sunil Duttbd736ed2014-05-26 21:19:41 +053014335 tpAniSirGlobal pMac;
14336
14337 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14338 "Received WDI_LL_STATS_RESULTS_IND from FW");
14339
14340 /*sanity check*/
14341 if (NULL == pWDA)
14342 {
14343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14344 "%s:pWDA is NULL", __func__);
14345 VOS_ASSERT(0);
14346 return;
14347 }
14348
14349 pLinkLayerStatsInd =
Dino Mycled3d50022014-07-07 12:58:25 +053014350 (void *)wdiLowLevelInd->
14351 wdiIndicationData.wdiLinkLayerStatsResults.pLinkLayerStatsResults;
Sunil Duttbd736ed2014-05-26 21:19:41 +053014352 if (NULL == pLinkLayerStatsInd)
14353 {
14354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14355 "%s:Link Layer Statistics from FW is null can't invoke HDD callback",
14356 __func__);
14357 VOS_ASSERT(0);
14358 return;
14359 }
14360
14361 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14362 if (NULL == pMac)
14363 {
14364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14365 "%s:pMac is NULL", __func__);
14366 VOS_ASSERT(0);
14367 return;
14368 }
14369
Dino Mycled3d50022014-07-07 12:58:25 +053014370 /* call hdd callback with Link Layer Statistics.
14371 * vdev_id/ifacId in link_stats_results will be
14372 * used to retrieve the correct HDD context
14373 */
Sunil Duttbd736ed2014-05-26 21:19:41 +053014374 if (pMac->sme.pLinkLayerStatsIndCallback)
14375 {
Dino Mycled3d50022014-07-07 12:58:25 +053014376 pMac->sme.pLinkLayerStatsIndCallback(pMac->pAdapter,
Sunil Duttbd736ed2014-05-26 21:19:41 +053014377 WDA_LINK_LAYER_STATS_RESULTS_RSP,
Dino Mycled3d50022014-07-07 12:58:25 +053014378 pLinkLayerStatsInd,
14379 wdiLowLevelInd->
14380 wdiIndicationData.wdiLinkLayerStatsResults.macAddr);
Sunil Duttbd736ed2014-05-26 21:19:41 +053014381 }
14382 else
14383 {
14384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14385 "%s:HDD callback is null", __func__);
14386 }
14387 break;
14388 }
14389#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
14390
Dino Mycle41bdc942014-06-10 11:30:24 +053014391#ifdef WLAN_FEATURE_EXTSCAN
14392 case WDI_EXTSCAN_PROGRESS_IND:
14393 case WDI_EXTSCAN_SCAN_AVAILABLE_IND:
14394 case WDI_EXTSCAN_SCAN_RESULT_IND:
14395 case WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND:
14396 case WDI_EXTSCAN_SIGN_RSSI_RESULT_IND:
14397 {
14398 void *pEXTScanData;
14399 void *pCallbackContext;
14400 tpAniSirGlobal pMac;
14401 tANI_U16 indType;
14402
14403 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14404 "Received WDI_EXTSCAN Indications from FW");
14405 /*sanity check*/
14406 if (NULL == pWDA)
14407 {
14408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14409 "%s:pWDA is NULL", __func__);
14410 VOS_ASSERT(0);
14411 return;
14412 }
14413 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_PROGRESS_IND)
14414 {
14415 indType = WDA_EXTSCAN_PROGRESS_IND;
14416
14417 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14418 "WDI_EXTSCAN Indication is WDI_EXTSCAN_PROGRESS_IND");
14419 }
14420 if (wdiLowLevelInd->wdiIndicationType ==
14421 WDI_EXTSCAN_SCAN_AVAILABLE_IND)
14422 {
14423 indType = WDA_EXTSCAN_SCAN_AVAILABLE_IND;
14424
14425 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14426 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_AVAILABLE_IND");
14427 }
14428 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_SCAN_RESULT_IND)
14429 {
14430 indType = WDA_EXTSCAN_SCAN_RESULT_IND;
14431
14432 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14433 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_RESULT_IND");
14434 }
14435 if (wdiLowLevelInd->wdiIndicationType ==
14436 WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND)
14437 {
14438 indType = WDA_EXTSCAN_BSSID_HOTLIST_RESULT_IND;
14439
14440 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14441 "WDI_EXTSCAN Indication is WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND");
14442 }
14443 if (wdiLowLevelInd->wdiIndicationType ==
14444 WDI_EXTSCAN_SIGN_RSSI_RESULT_IND)
14445 {
14446 indType = WDA_EXTSCAN_SIGNF_RSSI_RESULT_IND;
14447
14448 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14449 "WDI_EXTSCAN Indication is WDA_EXTSCAN_SIGNF_RSSI_RESULT_IND");
14450 }
14451
14452 pEXTScanData =
14453 (void *)wdiLowLevelInd->wdiIndicationData.pEXTScanIndData;
14454 if (NULL == pEXTScanData)
14455 {
14456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14457 "%s: EXTSCAN Indication Data is null, can't invoke HDD callback",
14458 __func__);
14459 VOS_ASSERT(0);
14460 return;
14461 }
14462
14463 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14464 if (NULL == pMac)
14465 {
14466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14467 "%s:pMac is NULL", __func__);
14468 VOS_ASSERT(0);
14469 return;
14470 }
14471
14472 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
14473
14474 if(pMac->sme.pEXTScanIndCb)
14475 {
14476 pMac->sme.pEXTScanIndCb(pCallbackContext,
14477 indType,
14478 pEXTScanData);
14479 }
14480 else
14481 {
14482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14483 "%s:HDD callback is null", __func__);
14484 }
14485 break;
14486 }
14487#endif /* WLAN_FEATURE_EXTSCAN */
Abhishek Singh66c16762014-08-14 19:13:19 +053014488 case WDI_DEL_BA_IND:
14489 {
14490 tpBADeleteParams pDelBAInd =
14491 (tpBADeleteParams)vos_mem_malloc(sizeof(tpBADeleteParams));
14492
14493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14494 "Received WDI_DEL_BA_IND from WDI ");
14495 if(NULL == pDelBAInd)
14496 {
14497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14498 "%s: VOS MEM Alloc Failure", __func__);
14499 break;
14500 }
14501 vos_mem_copy(pDelBAInd->peerMacAddr,
14502 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.peerMacAddr,
14503 sizeof(tSirMacAddr));
14504 vos_mem_copy(pDelBAInd->bssId,
14505 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.bssId,
14506 sizeof(tSirMacAddr));
14507 pDelBAInd->staIdx =
14508 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.staIdx;
14509 pDelBAInd->baTID =
14510 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baTID;
14511 pDelBAInd->baDirection =
14512 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baDirection;
14513 pDelBAInd->reasonCode =
14514 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.reasonCode;
14515
14516 WDA_SendMsg(pWDA, SIR_LIM_DEL_BA_IND,
14517 (void *)pDelBAInd , 0) ;
14518 break;
14519 }
Dino Mycle41bdc942014-06-10 11:30:24 +053014520
Jeff Johnson295189b2012-06-20 16:38:30 -070014521 default:
14522 {
14523 /* TODO error */
14524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14525 "Received UNKNOWN Indication from WDI ");
14526 }
14527 }
14528 return ;
14529}
14530
Jeff Johnson295189b2012-06-20 16:38:30 -070014531/*
14532 * BA related processing in WDA.
14533 */
Jeff Johnson295189b2012-06-20 16:38:30 -070014534void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
14535 void* pUserData)
14536{
14537 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14538 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070014539 if(NULL == pWdaParams)
14540 {
14541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014542 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014543 VOS_ASSERT(0) ;
14544 return ;
14545 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014546 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070014547 vos_mem_free(pWdaParams->wdaMsgParam) ;
14548 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14549 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014551 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014552 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
14553 {
14554 tANI_U8 i = 0 ;
14555 tBaActivityInd *baActivityInd = NULL ;
14556 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
14557 tANI_U8 allocSize = sizeof(tBaActivityInd)
14558 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
14559 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
14560 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014561 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014562 if(NULL == baActivityInd)
14563 {
14564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014565 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014566 VOS_ASSERT(0) ;
14567 return;
14568 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014569 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
14570 sizeof(tSirMacAddr)) ;
14571 baActivityInd->baCandidateCnt = baCandidateCount ;
14572
14573 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
14574 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
14575
14576 for(i = 0 ; i < baCandidateCount ; i++)
14577 {
14578 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014579 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
14580 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014581 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
14582 {
14583 baCandidate->baInfo[tid].fBaEnable =
14584 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
14585 baCandidate->baInfo[tid].startingSeqNum =
14586 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
14587 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070014588 wdiBaCandidate++ ;
14589 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014590 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014591 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
14592 }
14593 else
14594 {
14595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14596 "BA Trigger RSP with Failure received ");
14597 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014598 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014599}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014600
14601
14602/*
14603 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
14604 * during MCC
14605 */
14606void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
14607{
14608 wpt_uint32 enabled;
14609 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
14610 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
14611 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
14612
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014613 if (NULL == pMac )
14614 {
14615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14616 "%s: Invoked with invalid MAC context ", __func__ );
14617 VOS_ASSERT(0);
14618 return;
14619 }
14620
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014621 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
14622 != eSIR_SUCCESS)
14623 {
14624 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14625 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
14626 return;
14627 }
14628
14629 if(!enabled)
14630 {
14631 return;
14632 }
14633
14634 if(NULL == pWDA)
14635 {
14636 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14637 "%s:WDA context is NULL", __func__);
14638 VOS_ASSERT(0);
14639 return;
14640 }
14641
14642 if(activate)
14643 {
14644 if( VOS_STATUS_SUCCESS !=
14645 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
14646 {
14647 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14648 "Traffic Stats Timer Start Failed ");
14649 return;
14650 }
14651 WDI_DS_ActivateTrafficStats();
14652 }
14653 else
14654 {
14655 WDI_DS_DeactivateTrafficStats();
14656 WDI_DS_ClearTrafficStats();
14657
14658 if( VOS_STATUS_SUCCESS !=
14659 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
14660 {
14661 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14662 "Traffic Stats Timer Stop Failed ");
14663 return;
14664 }
14665 }
14666}
14667
14668/*
14669 * Traffic Stats Timer handler
14670 */
14671void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
14672{
14673 WDI_Status wdiStatus;
14674 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
14675 WDI_TrafficStatsIndType trafficStatsIndParams;
14676 wpt_uint32 length, enabled;
14677 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14678
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014679 if (NULL == pMac )
14680 {
14681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14682 "%s: Invoked with invalid MAC context ", __func__ );
14683 VOS_ASSERT(0);
14684 return;
14685 }
14686
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014687 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
14688 != eSIR_SUCCESS)
14689 {
14690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14691 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
14692 return;
14693 }
14694
14695 if(!enabled)
14696 {
14697 WDI_DS_DeactivateTrafficStats();
14698 return;
14699 }
14700
14701 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
14702
14703 if(pWdiTrafficStats != NULL)
14704 {
14705 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
14706 trafficStatsIndParams.length = length;
14707 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080014708 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014709 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
14710 trafficStatsIndParams.pUserData = pWDA;
14711
14712 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
14713
14714 if(WDI_STATUS_PENDING == wdiStatus)
14715 {
14716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14717 "Pending received for %s:%d ",__func__,__LINE__ );
14718 }
14719 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
14720 {
14721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14722 "Failure in %s:%d ",__func__,__LINE__ );
14723 }
14724
14725 WDI_DS_ClearTrafficStats();
14726 }
14727 else
14728 {
14729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
14730 "pWdiTrafficStats is Null");
14731 }
14732
14733 if( VOS_STATUS_SUCCESS !=
14734 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
14735 {
14736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
14737 "Traffic Stats Timer Start Failed ");
14738 return;
14739 }
14740}
14741
Jeff Johnson295189b2012-06-20 16:38:30 -070014742/*
14743 * BA Activity check timer handler
14744 */
14745void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
14746{
14747 tANI_U8 curSta = 0 ;
14748 tANI_U8 tid = 0 ;
14749 tANI_U8 size = 0 ;
14750 tANI_U8 baCandidateCount = 0 ;
14751 tANI_U8 newBaCandidate = 0 ;
Abhishek Singh0644e482014-10-06 18:38:23 +053014752 tANI_U32 val;
Jeff Johnson295189b2012-06-20 16:38:30 -070014753 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
Abhishek Singh0644e482014-10-06 18:38:23 +053014754 tpAniSirGlobal pMac;
14755
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014756 if (NULL == pWDA)
Jeff Johnson295189b2012-06-20 16:38:30 -070014757 {
14758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Deepthi Gowri2bbf56f2014-12-22 13:15:14 +053014759 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014760 VOS_ASSERT(0);
14761 return ;
14762 }
14763 if(WDA_MAX_STA < pWDA->wdaMaxSta)
14764 {
14765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14766 "Inconsistent STA entries in WDA");
14767 VOS_ASSERT(0) ;
Abhishek Singh0644e482014-10-06 18:38:23 +053014768 }
14769 if(NULL == pWDA->pVosContext)
14770 {
14771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14772 "%s: pVosContext is NULL",__func__);
14773 VOS_ASSERT(0);
14774 return ;
14775 }
14776 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Abhishek Singh68883952014-10-14 11:59:05 +053014777 if(NULL == pMac)
14778 {
14779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14780 "%s: pMac is NULL",__func__);
14781 VOS_ASSERT(0);
14782 return ;
14783 }
14784
Abhishek Singh0644e482014-10-06 18:38:23 +053014785 if (wlan_cfgGetInt(pMac,
14786 WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC, &val) !=
14787 eSIR_SUCCESS)
14788 {
14789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14790 "Unable to get WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC");
14791 val = 0;
14792 }
14793
Jeff Johnson295189b2012-06-20 16:38:30 -070014794 /* walk through all STA entries and find out TX packet count */
14795 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
14796 {
Abhishek Singh0644e482014-10-06 18:38:23 +053014797 tANI_U32 currentOperChan = pWDA->wdaStaInfo[curSta].currentOperChan;
Gopichand Nakkala976e3252013-01-03 15:45:56 -080014798#ifdef WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053014799 // We can only do BA on "hard" STAs.
14800 if (!(IS_HWSTA_IDX(curSta)))
14801 {
14802 continue;
14803 }
Gopichand Nakkala976e3252013-01-03 15:45:56 -080014804#endif //WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053014805 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
14806 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070014807 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014808 tANI_U32 txPktCount = 0 ;
14809 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014810 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070014811 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
14812 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070014813 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
14814 curSta, tid, &txPktCount)))
14815 {
14816#if 0
14817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
14818 "************* %d:%d, %d ",curSta, txPktCount,
14819 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
14820#endif
Abhishek Singh0644e482014-10-06 18:38:23 +053014821 if(val && ( (currentOperChan >= SIR_11B_CHANNEL_BEGIN) &&
14822 (currentOperChan <= SIR_11B_CHANNEL_END)))
14823 {
14824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14825 "%s: BTC disabled aggregation - dont start "
14826 "TX ADDBA req",__func__);
14827 }
14828 else if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070014829 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Abhishek Singh424ae432014-12-05 11:54:54 +053014830 && (((eSYSTEM_STA_IN_IBSS_ROLE ==
14831 pWDA->wdaGlobalSystemRole) && txPktCount )
14832 || (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
14833 curSta, tid))))
Jeff Johnson295189b2012-06-20 16:38:30 -070014834 {
14835 /* get prepare for sending message to HAL */
14836 //baCandidate[baCandidateCount].staIdx = curSta ;
14837 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
14838 newBaCandidate = WDA_ENABLE_BA ;
14839 }
14840 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
14841 }
14842 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014843 /* fill the entry for all the sta with given TID's */
14844 if(WDA_ENABLE_BA == newBaCandidate)
14845 {
14846 /* move to next BA candidate */
14847 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
14848 size += sizeof(WDI_TriggerBAReqCandidateType) ;
14849 baCandidateCount++ ;
14850 newBaCandidate = WDA_DISABLE_BA ;
14851 }
14852 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014853 /* prepare and send message to hal */
14854 if( 0 < baCandidateCount)
14855 {
14856 WDI_Status status = WDI_STATUS_SUCCESS ;
14857 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
14858 tWDA_ReqParams *pWdaParams =
14859 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014860 if(NULL == pWdaParams)
14861 {
14862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014863 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014864 VOS_ASSERT(0) ;
14865 return;
14866 }
14867 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
14868 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
14869 if(NULL == wdiTriggerBaReq)
14870 {
14871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014872 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014873 VOS_ASSERT(0) ;
14874 vos_mem_free(pWdaParams);
14875 return;
14876 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014877 do
14878 {
14879 WDI_TriggerBAReqinfoType *triggerBaInfo =
14880 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
14881 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
14882 /* TEMP_FIX: Need to see if WDI need check for assoc session for
14883 * for each request */
14884 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
14885 triggerBaInfo->ucBASessionID = 0;
14886 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
14887 } while(0) ;
14888 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
14889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014890 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014891 pWdaParams->pWdaContext = pWDA;
14892 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
14893 pWdaParams->wdaMsgParam = NULL;
14894 status = WDI_TriggerBAReq(wdiTriggerBaReq,
14895 WDA_TriggerBaReqCallback, pWdaParams) ;
14896 if(IS_WDI_STATUS_FAILURE(status))
14897 {
14898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14899 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
14900 vos_mem_free(pWdaParams->wdaMsgParam) ;
14901 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14902 vos_mem_free(pWdaParams) ;
14903 }
14904 }
14905 else
14906 {
14907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
14908 "There is no TID for initiating BA");
14909 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014910 if( VOS_STATUS_SUCCESS !=
14911 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
14912 {
14913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14914 "BA Activity Timer Stop Failed ");
14915 return ;
14916 }
14917 if( VOS_STATUS_SUCCESS !=
14918 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
14919 {
14920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14921 "BA Activity Timer Start Failed ");
14922 return;
14923 }
14924 return ;
14925}
Jeff Johnson295189b2012-06-20 16:38:30 -070014926/*
14927 * WDA common routine to create timer used by WDA.
14928 */
14929static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
14930{
Jeff Johnson295189b2012-06-20 16:38:30 -070014931 VOS_STATUS status = VOS_STATUS_SUCCESS ;
14932 tANI_U32 val = 0 ;
14933 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14934
14935 if(NULL == pMac)
14936 {
14937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014938 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014939 VOS_ASSERT(0);
14940 return VOS_STATUS_E_FAILURE;
14941 }
14942 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
14943 != eSIR_SUCCESS)
14944 {
14945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14946 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
14947 return VOS_STATUS_E_FAILURE;
14948 }
14949 val = SYS_MS_TO_TICKS(val) ;
14950
14951 /* BA activity check timer */
14952 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
14953 "BA Activity Check timer", WDA_TimerHandler,
14954 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
14955 if(status != TX_SUCCESS)
14956 {
14957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14958 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014959 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014960 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014961 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014962 /* Tx Complete Timeout timer */
14963 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
14964 "Tx Complete Check timer", WDA_TimerHandler,
14965 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014966 if(status != TX_SUCCESS)
14967 {
14968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14969 "Unable to create Tx Complete Timeout timer");
14970 /* Destroy timer of BA activity check timer */
14971 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
14972 if(status != TX_SUCCESS)
14973 {
14974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14975 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014976 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014977 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014978 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014979 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014980
14981 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
14982
14983 /* Traffic Stats timer */
14984 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
14985 "Traffic Stats timer", WDA_TimerHandler,
14986 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
14987 if(status != TX_SUCCESS)
14988 {
14989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14990 "Unable to create traffic stats timer");
14991 /* Destroy timer of BA activity check timer */
14992 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
14993 if(status != TX_SUCCESS)
14994 {
14995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14996 "Unable to Destroy BA activity timer");
14997 }
14998 /* Destroy timer of tx complete timer */
14999 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
15000 if(status != TX_SUCCESS)
15001 {
15002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15003 "Unable to Tx complete timer");
15004 }
15005 return VOS_STATUS_E_FAILURE ;
15006 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015007 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015008}
Jeff Johnson295189b2012-06-20 16:38:30 -070015009/*
15010 * WDA common routine to destroy timer used by WDA.
15011 */
15012static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
15013{
15014 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015015 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
15016 if(status != TX_SUCCESS)
15017 {
15018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15019 "Unable to Destroy Tx Complete Timeout timer");
15020 return eSIR_FAILURE ;
15021 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015022 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
15023 if(status != TX_SUCCESS)
15024 {
15025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15026 "Unable to Destroy BA activity timer");
15027 return eSIR_FAILURE ;
15028 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080015029 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
15030 if(status != TX_SUCCESS)
15031 {
15032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15033 "Unable to Destroy traffic stats timer");
15034 return eSIR_FAILURE ;
15035 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015036 return eSIR_SUCCESS ;
15037}
Jeff Johnson295189b2012-06-20 16:38:30 -070015038/*
15039 * WDA timer handler.
15040 */
15041void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
15042{
15043 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
15044 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015045 /*
15046 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
15047 */
15048 wdaMsg.type = timerInfo ;
15049 wdaMsg.bodyptr = NULL;
15050 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070015051 /* post the message.. */
15052 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
15053 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
15054 {
15055 vosStatus = VOS_STATUS_E_BADMSG;
15056 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015057}
Jeff Johnson295189b2012-06-20 16:38:30 -070015058/*
15059 * WDA Tx Complete timeout Indication.
15060 */
15061void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
15062{
15063 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015064 if( pWDA->pAckTxCbFunc )
15065 {
15066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015067 "TxComplete timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070015068 pWDA->pAckTxCbFunc( pMac, 0);
15069 pWDA->pAckTxCbFunc = NULL;
15070 }
15071 else
15072 {
15073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015074 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070015075 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015076}
Jeff Johnson295189b2012-06-20 16:38:30 -070015077/*
15078 * WDA Set REG Domain to VOS NV
15079 */
Abhishek Singha306a442013-11-07 18:39:01 +053015080eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
15081 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070015082{
Abhishek Singha306a442013-11-07 18:39:01 +053015083 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070015084 {
15085 return eHAL_STATUS_INVALID_PARAMETER;
15086 }
15087 return eHAL_STATUS_SUCCESS;
15088}
Jeff Johnson295189b2012-06-20 16:38:30 -070015089
Jeff Johnson295189b2012-06-20 16:38:30 -070015090#ifdef FEATURE_WLAN_SCAN_PNO
15091/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015092 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015093 *
15094 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015095void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015096{
15097 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015098 tSirPNOScanReq *pPNOScanReqParams;
15099
Jeff Johnson295189b2012-06-20 16:38:30 -070015100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015101 "<------ %s, wdiStatus: %d",__func__, status);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015102 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070015103 {
15104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015105 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015106 VOS_ASSERT(0) ;
15107 return ;
15108 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015109
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015110 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
15111 if(pPNOScanReqParams->statusCallback)
15112 {
15113 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
15114 (status == WDI_STATUS_SUCCESS) ?
15115 VOS_STATUS_SUCCESS : VOS_STATUS_E_FAILURE);
15116 }
15117
Yue Ma7f44bbe2013-04-12 11:47:39 -070015118 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15119 vos_mem_free(pWdaParams->wdaMsgParam);
15120 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015121
15122 return ;
15123}
Jeff Johnson295189b2012-06-20 16:38:30 -070015124/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015125 * FUNCTION: WDA_PNOScanReqCallback
15126 * Free memory.
15127 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
15128 */
15129void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015130{
Yue Ma7f44bbe2013-04-12 11:47:39 -070015131 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015132 tSirPNOScanReq *pPNOScanReqParams;
Yue Ma7f44bbe2013-04-12 11:47:39 -070015133
15134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15135 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15136
15137 if(NULL == pWdaParams)
15138 {
15139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15140 "%s: pWdaParams received NULL", __func__);
15141 VOS_ASSERT(0);
15142 return;
15143 }
15144
15145 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15146 {
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015147 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
15148 if(pPNOScanReqParams->statusCallback)
15149 {
15150 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
15151 VOS_STATUS_E_FAILURE);
15152 }
15153
Yue Ma7f44bbe2013-04-12 11:47:39 -070015154 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15155 vos_mem_free(pWdaParams->wdaMsgParam);
15156 vos_mem_free(pWdaParams);
15157 }
15158
15159 return;
15160}
15161/*
15162 * FUNCTION: WDA_UpdateScanParamsRespCallback
15163 *
15164 */
15165void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
15166{
15167 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070015168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015169 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015170 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070015171 {
15172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015173 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015174 VOS_ASSERT(0) ;
15175 return ;
15176 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015177
15178 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15179 vos_mem_free(pWdaParams->wdaMsgParam);
15180 vos_mem_free(pWdaParams);
15181
Jeff Johnson295189b2012-06-20 16:38:30 -070015182 return ;
15183}
Jeff Johnson295189b2012-06-20 16:38:30 -070015184/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015185 * FUNCTION: WDA_UpdateScanParamsReqCallback
15186 * Free memory.
15187 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
15188 */
15189void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
15190{
15191 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15192
15193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15194 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15195
15196 if(NULL == pWdaParams)
15197 {
15198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15199 "%s: pWdaParams received NULL", __func__);
15200 VOS_ASSERT(0);
15201 return;
15202 }
15203
15204 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15205 {
15206 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15207 vos_mem_free(pWdaParams->wdaMsgParam);
15208 vos_mem_free(pWdaParams);
15209 }
15210
15211 return;
15212}
15213/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015214 * FUNCTION: WDA_ProcessSetPreferredNetworkList
15215 * Request to WDI to set Preferred Network List.Offload
15216 */
15217VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
15218 tSirPNOScanReq *pPNOScanReqParams)
15219{
Jeff Johnson43971f52012-07-17 12:26:56 -070015220 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015221 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
15222 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
15223 tWDA_ReqParams *pWdaParams ;
15224 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070015225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015226 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015227 if(NULL == pwdiPNOScanReqInfo)
15228 {
15229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015230 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015231 VOS_ASSERT(0);
15232 return VOS_STATUS_E_NOMEM;
15233 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015234 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15235 if(NULL == pWdaParams)
15236 {
15237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015238 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015239 VOS_ASSERT(0);
15240 vos_mem_free(pwdiPNOScanReqInfo);
15241 return VOS_STATUS_E_NOMEM;
15242 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015243 //
15244 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
15245 //
15246 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
15247 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070015248 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
15249 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
15250 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015251 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
15252 {
15253 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
15254 &pPNOScanReqParams->aNetworks[i],
15255 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
15256 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015257 /*Scan timer intervals*/
15258 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
15259 &pPNOScanReqParams->scanTimers,
15260 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070015261 /*Probe template for 2.4GHz band*/
15262 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
15263 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15264 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015265 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
15266 pPNOScanReqParams->p24GProbeTemplate,
15267 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070015268 /*Probe template for 5GHz band*/
15269 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
15270 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15271 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015272 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
15273 pPNOScanReqParams->p5GProbeTemplate,
15274 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015275 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
15276 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015277
Jeff Johnson295189b2012-06-20 16:38:30 -070015278 /* Store Params pass it to WDI */
15279 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
15280 pWdaParams->pWdaContext = pWDA;
15281 /* Store param pointer as passed in by caller */
15282 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015283 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015284 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015285 if(IS_WDI_STATUS_FAILURE(status))
15286 {
15287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15288 "Failure in Set PNO REQ WDI API, free all the memory " );
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015289 if(pPNOScanReqParams->statusCallback)
15290 {
15291 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
15292 VOS_STATUS_E_FAILURE);
15293 }
15294
Jeff Johnson295189b2012-06-20 16:38:30 -070015295 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15296 vos_mem_free(pWdaParams->wdaMsgParam);
15297 pWdaParams->wdaWdiApiMsgParam = NULL;
15298 pWdaParams->wdaMsgParam = NULL;
15299 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015300 return CONVERT_WDI2VOS_STATUS(status) ;
15301}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015302
15303#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
15304
15305void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
15306{
15307 /*Convert the CSR Auth types to WDI Auth types */
15308 switch (csrAuthType)
15309 {
15310 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
15311 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
15312 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015313#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015314 case eCSR_AUTH_TYPE_CCKM_WPA:
15315 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
15316 break;
15317#endif
15318 case eCSR_AUTH_TYPE_WPA:
15319 *AuthType = eWDA_AUTH_TYPE_WPA;
15320 break;
15321 case eCSR_AUTH_TYPE_WPA_PSK:
15322 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
15323 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015324#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015325 case eCSR_AUTH_TYPE_CCKM_RSN:
15326 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
15327 break;
15328#endif
15329 case eCSR_AUTH_TYPE_RSN:
15330 *AuthType = eWDA_AUTH_TYPE_RSN;
15331 break;
15332 case eCSR_AUTH_TYPE_RSN_PSK:
15333 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
15334 break;
15335#if defined WLAN_FEATURE_VOWIFI_11R
15336 case eCSR_AUTH_TYPE_FT_RSN:
15337 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
15338 break;
15339 case eCSR_AUTH_TYPE_FT_RSN_PSK:
15340 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
15341 break;
15342#endif
15343#ifdef FEATURE_WLAN_WAPI
15344 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
15345 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
15346 break;
15347 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
15348 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
15349 break;
15350#endif /* FEATURE_WLAN_WAPI */
15351 case eCSR_AUTH_TYPE_SHARED_KEY:
15352 case eCSR_AUTH_TYPE_AUTOSWITCH:
15353 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
15354 break;
15355#if 0
15356 case eCSR_AUTH_TYPE_SHARED_KEY:
15357 *AuthType = eWDA_AUTH_TYPE_SHARED_KEY;
15358 break;
15359 case eCSR_AUTH_TYPE_AUTOSWITCH:
15360 *AuthType = eWDA_AUTH_TYPE_AUTOSWITCH;
15361#endif
15362 default:
Deepthi Gowribfd17132014-11-14 17:59:04 +053015363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015364 "%s: Unknown Auth Type", __func__);
15365 break;
15366 }
15367}
15368void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
15369{
15370 switch (csrEncrType)
15371 {
15372 case eCSR_ENCRYPT_TYPE_NONE:
15373 *EncrType = WDI_ED_NONE;
15374 break;
15375 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
15376 case eCSR_ENCRYPT_TYPE_WEP40:
15377 *EncrType = WDI_ED_WEP40;
15378 break;
15379 case eCSR_ENCRYPT_TYPE_WEP104:
15380 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
15381 *EncrType = WDI_ED_WEP104;
15382 break;
15383 case eCSR_ENCRYPT_TYPE_TKIP:
15384 *EncrType = WDI_ED_TKIP;
15385 break;
15386 case eCSR_ENCRYPT_TYPE_AES:
15387 *EncrType = WDI_ED_CCMP;
15388 break;
15389#ifdef WLAN_FEATURE_11W
15390 case eCSR_ENCRYPT_TYPE_AES_CMAC:
15391 *EncrType = WDI_ED_AES_128_CMAC;
15392 break;
15393#endif
15394#ifdef FEATURE_WLAN_WAPI
15395 case eCSR_ENCRYPT_TYPE_WPI:
15396 *EncrType = WDI_ED_WPI;
15397 break;
15398#endif
15399 case eCSR_ENCRYPT_TYPE_ANY:
15400 *EncrType = WDI_ED_ANY;
15401 break;
15402
15403 default:
15404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15405 "%s: Unknown Encryption Type", __func__);
15406 break;
15407 }
15408}
15409
15410/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015411 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015412 * Request to WDI to set Roam Offload Scan
15413 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015414VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015415 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
15416{
15417 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015418 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
15419 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015420 tWDA_ReqParams *pWdaParams ;
15421 v_U8_t csrAuthType;
15422 WDI_RoamNetworkType *pwdiRoamNetworkType;
15423 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
15424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15425 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015426 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015427 {
15428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15429 "%s: VOS MEM Alloc Failure", __func__);
15430 VOS_ASSERT(0);
15431 return VOS_STATUS_E_NOMEM;
15432 }
15433 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15434 if (NULL == pWdaParams)
15435 {
15436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15437 "%s: VOS MEM Alloc Failure", __func__);
15438 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015439 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015440 return VOS_STATUS_E_NOMEM;
15441 }
15442
15443 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015444 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015445 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015446 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
15447 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015448 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
15449 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
15450 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
15451 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
15452 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
15453 sizeof(pwdiRoamNetworkType->currAPbssid));
15454 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
15455 csrAuthType);
15456 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
15457 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
15458 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
15459 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
15460 pwdiRoamOffloadScanInfo->LookupThreshold =
15461 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080015462 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
15463 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015464 pwdiRoamOffloadScanInfo->RoamRssiDiff =
15465 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080015466 pwdiRoamOffloadScanInfo->MAWCEnabled =
15467 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015468 pwdiRoamOffloadScanInfo->Command =
15469 pRoamOffloadScanReqParams->Command ;
15470 pwdiRoamOffloadScanInfo->StartScanReason =
15471 pRoamOffloadScanReqParams->StartScanReason ;
15472 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
15473 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
15474 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
15475 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
15476 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
15477 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
15478 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
15479 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
15480 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
15481 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015482 pwdiRoamOffloadScanInfo->IsESEEnabled =
15483 pRoamOffloadScanReqParams->IsESEEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015484 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
15485 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
15486 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
15487 pwdiRoamNetworkType->ssId.ucLength =
15488 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
15489 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
15490 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
15491 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
15492 pwdiRoamNetworkType->ChannelCount =
15493 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
15494 pwdiRoamOffloadScanInfo->ChannelCacheType =
15495 pRoamOffloadScanReqParams->ChannelCacheType;
15496 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
15497 pRoamOffloadScanReqParams->ValidChannelList,
15498 pRoamOffloadScanReqParams->ValidChannelCount);
15499 pwdiRoamOffloadScanInfo->ValidChannelCount =
15500 pRoamOffloadScanReqParams->ValidChannelCount;
15501 pwdiRoamOffloadScanInfo->us24GProbeSize =
15502 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15503 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
15504 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
15505 pRoamOffloadScanReqParams->p24GProbeTemplate,
15506 pwdiRoamOffloadScanInfo->us24GProbeSize);
15507 pwdiRoamOffloadScanInfo->us5GProbeSize =
15508 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15509 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
15510 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
15511 pRoamOffloadScanReqParams->p5GProbeTemplate,
15512 pwdiRoamOffloadScanInfo->us5GProbeSize);
15513 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
15514 pRoamOffloadScanReqParams->MDID.mdiePresent;
15515 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
15516 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015517 pwdiRoamOffloadScanInfo->nProbes =
15518 pRoamOffloadScanReqParams->nProbes;
15519 pwdiRoamOffloadScanInfo->HomeAwayTime =
15520 pRoamOffloadScanReqParams->HomeAwayTime;
15521 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015522 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015523 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015524 pWdaParams->pWdaContext = pWDA;
15525 /* Store param pointer as passed in by caller */
15526 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015527 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015528 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
15529 if(IS_WDI_STATUS_FAILURE(status))
15530 {
15531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15532 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
15533 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15534 vos_mem_free(pWdaParams->wdaMsgParam);
15535 pWdaParams->wdaWdiApiMsgParam = NULL;
15536 pWdaParams->wdaMsgParam = NULL;
15537 }
15538 return CONVERT_WDI2VOS_STATUS(status) ;
15539}
15540#endif
15541
Jeff Johnson295189b2012-06-20 16:38:30 -070015542/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015543 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015544 *
15545 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015546void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015547{
15548 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15549
15550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015551 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015552
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015553 if(NULL == pWdaParams)
15554 {
15555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015556 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015557 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015558 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015559 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015560
Jeff Johnson295189b2012-06-20 16:38:30 -070015561 vos_mem_free(pWdaParams->wdaMsgParam) ;
15562 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15563 vos_mem_free(pWdaParams) ;
15564
15565 return ;
15566}
15567/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015568 * FUNCTION: WDA_RssiFilterReqCallback
15569 * Free memory.
15570 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
15571 */
15572void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
15573{
15574 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15575
15576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15577 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15578
15579 if(NULL == pWdaParams)
15580 {
15581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15582 "%s: pWdaParams received NULL", __func__);
15583 VOS_ASSERT(0);
15584 return;
15585 }
15586
15587 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15588 {
15589 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15590 vos_mem_free(pWdaParams->wdaMsgParam);
15591 vos_mem_free(pWdaParams);
15592 }
15593
15594 return;
15595}
15596/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015597 * FUNCTION: WDA_ProcessSetPreferredNetworkList
15598 * Request to WDI to set Preferred Network List.Offload
15599 */
15600VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
15601 tSirSetRSSIFilterReq* pRssiFilterParams)
15602{
Jeff Johnson43971f52012-07-17 12:26:56 -070015603 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015604 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
15605 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
15606 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015608 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015609 if(NULL == pwdiSetRssiFilterReqInfo)
15610 {
15611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015612 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015613 VOS_ASSERT(0);
15614 return VOS_STATUS_E_NOMEM;
15615 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015616 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15617 if(NULL == pWdaParams)
15618 {
15619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015620 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015621 VOS_ASSERT(0);
15622 vos_mem_free(pwdiSetRssiFilterReqInfo);
15623 return VOS_STATUS_E_NOMEM;
15624 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015625 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070015626 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
15627 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015628
Jeff Johnson295189b2012-06-20 16:38:30 -070015629 /* Store Params pass it to WDI */
15630 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
15631 pWdaParams->pWdaContext = pWDA;
15632 /* Store param pointer as passed in by caller */
15633 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015634 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015635 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015636 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015637 if(IS_WDI_STATUS_FAILURE(status))
15638 {
15639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15640 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
15641 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15642 vos_mem_free(pWdaParams->wdaMsgParam);
15643 pWdaParams->wdaWdiApiMsgParam = NULL;
15644 pWdaParams->wdaMsgParam = NULL;
15645 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015646 return CONVERT_WDI2VOS_STATUS(status) ;
15647}
15648
Jeff Johnson295189b2012-06-20 16:38:30 -070015649/*
15650 * FUNCTION: WDA_ProcessUpdateScanParams
15651 * Request to WDI to update Scan Parameters
15652 */
15653VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
15654 tSirUpdateScanParams *pUpdateScanParams)
15655{
Jeff Johnson43971f52012-07-17 12:26:56 -070015656 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015657 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
15658 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
15659 sizeof(WDI_UpdateScanParamsInfoType)) ;
15660 tWDA_ReqParams *pWdaParams ;
15661 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070015662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015663 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015664 if(NULL == wdiUpdateScanParamsInfoType)
15665 {
15666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015667 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015668 VOS_ASSERT(0);
15669 return VOS_STATUS_E_NOMEM;
15670 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015671 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15672 if ( NULL == pWdaParams )
15673 {
15674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015675 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015676 VOS_ASSERT(0);
15677 vos_mem_free(wdiUpdateScanParamsInfoType);
15678 return VOS_STATUS_E_NOMEM;
15679 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015680 //
15681 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
15682 //
Jeff Johnson295189b2012-06-20 16:38:30 -070015683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15684 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
15685 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
15686 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080015687 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070015688 pUpdateScanParams->b11dEnabled,
15689 pUpdateScanParams->b11dResolved,
15690 pUpdateScanParams->ucChannelCount,
15691 pUpdateScanParams->usPassiveMinChTime,
15692 pUpdateScanParams->usPassiveMaxChTime,
15693 pUpdateScanParams->usActiveMinChTime,
15694 pUpdateScanParams->usActiveMaxChTime,
15695 sizeof(tSirUpdateScanParams),
15696 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
15697
Jeff Johnson295189b2012-06-20 16:38:30 -070015698 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
15699 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070015700 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
15701 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070015702 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
15703 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070015704 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
15705 pUpdateScanParams->usActiveMaxChTime;
15706 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
15707 pUpdateScanParams->usActiveMinChTime;
15708 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
15709 pUpdateScanParams->usPassiveMaxChTime;
15710 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
15711 pUpdateScanParams->usPassiveMinChTime;
15712
Jeff Johnson295189b2012-06-20 16:38:30 -070015713 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053015714 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
15715 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070015716
Jeff Johnson295189b2012-06-20 16:38:30 -070015717 for ( i = 0; i <
15718 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
15719 i++)
15720 {
15721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15722 "Update Scan Parameters channel: %d",
15723 pUpdateScanParams->aChannels[i]);
15724
15725 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
15726 pUpdateScanParams->aChannels[i];
15727 }
15728
Yue Ma7f44bbe2013-04-12 11:47:39 -070015729 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
15730 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015731
Jeff Johnson295189b2012-06-20 16:38:30 -070015732 /* Store Params pass it to WDI */
15733 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
15734 pWdaParams->pWdaContext = pWDA;
15735 /* Store param pointer as passed in by caller */
15736 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070015737
Jeff Johnson295189b2012-06-20 16:38:30 -070015738
15739
15740 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015741 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015742 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015743 if(IS_WDI_STATUS_FAILURE(status))
15744 {
15745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15746 "Failure in Update Scan Params EQ WDI API, free all the memory " );
15747 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15748 vos_mem_free(pWdaParams->wdaMsgParam);
15749 vos_mem_free(pWdaParams);
15750 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015751 return CONVERT_WDI2VOS_STATUS(status) ;
15752}
15753#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015754
15755#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
15756/*
15757 * FUNCTION: WDA_RoamOffloadScanReqCallback
15758 *
15759 */
15760void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
15761{
15762 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070015763 vos_msg_t vosMsg;
15764 wpt_uint8 reason = 0;
15765
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070015766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015767 "<------ %s " ,__func__);
15768 if (NULL == pWdaParams)
15769 {
15770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15771 "%s: pWdaParams received NULL", __func__);
15772 VOS_ASSERT(0) ;
15773 return ;
15774 }
15775 if ( pWdaParams != NULL )
15776 {
15777 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
15778 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070015779 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015780 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15781 }
15782 if ( pWdaParams->wdaMsgParam != NULL)
15783 {
15784 vos_mem_free(pWdaParams->wdaMsgParam);
15785 }
15786
15787 vos_mem_free(pWdaParams) ;
15788 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070015789 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
15790 vosMsg.bodyptr = NULL;
15791 if (WDI_STATUS_SUCCESS != status)
15792 {
15793 reason = 0;
15794 }
15795 vosMsg.bodyval = reason;
15796 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15797 {
15798 /* free the mem and return */
15799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070015800 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070015801 }
15802
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015803 return ;
15804}
15805#endif
15806
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015807/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015808 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015809 *
15810 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015811void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015812{
15813 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15814
15815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15816 "<------ %s " ,__func__);
15817
15818 if(NULL == pWdaParams)
15819 {
15820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15821 "%s: pWdaParams received NULL", __func__);
15822 VOS_ASSERT(0);
15823 return;
15824 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015825
15826 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15827 vos_mem_free(pWdaParams->wdaMsgParam);
15828 vos_mem_free(pWdaParams);
15829
15830 return;
15831}
15832/*
15833 * FUNCTION: WDA_SetPowerParamsReqCallback
15834 * Free memory.
15835 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
15836 */
15837void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
15838{
15839 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15840
15841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15842 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15843
15844 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015845 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070015846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15847 "%s: pWdaParams received NULL", __func__);
15848 VOS_ASSERT(0);
15849 return;
15850 }
15851
15852 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15853 {
15854 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15855 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015856 vos_mem_free(pWdaParams);
15857 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015858
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015859 return;
15860}
15861
Jeff Johnson295189b2012-06-20 16:38:30 -070015862#ifdef WLAN_FEATURE_PACKET_FILTERING
15863/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015864 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015865 *
15866 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015867void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015868 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
15869 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015870{
15871 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070015872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015873 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015874 if(NULL == pWdaParams)
15875 {
15876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015877 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015878 VOS_ASSERT(0) ;
15879 return ;
15880 }
15881
15882 vos_mem_free(pWdaParams->wdaMsgParam) ;
15883 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15884 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015885 //print a msg, nothing else to do
15886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015887 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070015888 return ;
15889}
Jeff Johnson295189b2012-06-20 16:38:30 -070015890/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015891 * FUNCTION: WDA_8023MulticastListReqCallback
15892 * Free memory.
15893 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
15894 */
15895void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
15896{
15897 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15898
15899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15900 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15901
15902 if(NULL == pWdaParams)
15903 {
15904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15905 "%s: pWdaParams received NULL", __func__);
15906 VOS_ASSERT(0);
15907 return;
15908 }
15909
15910 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15911 {
15912 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15913 vos_mem_free(pWdaParams->wdaMsgParam);
15914 vos_mem_free(pWdaParams);
15915 }
15916
15917 return;
15918}
15919/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015920 * FUNCTION: WDA_Process8023MulticastListReq
15921 * Request to WDI to add 8023 Multicast List
15922 */
15923VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
15924 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
15925{
Jeff Johnson43971f52012-07-17 12:26:56 -070015926 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015927 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
15928 tWDA_ReqParams *pWdaParams ;
15929 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070015930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015931 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015932 pwdiFltPktSetMcListReqParamsType =
15933 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
15934 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
15935 ) ;
15936 if(NULL == pwdiFltPktSetMcListReqParamsType)
15937 {
15938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015939 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015940 return VOS_STATUS_E_NOMEM;
15941 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015942 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15943 if(NULL == pWdaParams)
15944 {
15945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015946 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015947 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
15948 return VOS_STATUS_E_NOMEM;
15949 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015950
Jeff Johnson295189b2012-06-20 16:38:30 -070015951 //
15952 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
15953 //
15954 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070015955 pRcvFltMcAddrList->ulMulticastAddrCnt;
15956
15957 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
15958 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
15959 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
15960 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
15961
Jeff Johnson295189b2012-06-20 16:38:30 -070015962 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
15963 {
15964 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
15965 &(pRcvFltMcAddrList->multicastAddr[i]),
15966 sizeof(tSirMacAddr));
15967 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015968 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
15969 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015970
Jeff Johnson295189b2012-06-20 16:38:30 -070015971 /* Store Params pass it to WDI */
15972 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
15973 pWdaParams->pWdaContext = pWDA;
15974 /* Store param pointer as passed in by caller */
15975 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070015976 status = WDI_8023MulticastListReq(
15977 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015978 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015979 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015980 if(IS_WDI_STATUS_FAILURE(status))
15981 {
15982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15983 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
15984 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15985 vos_mem_free(pWdaParams->wdaMsgParam);
15986 vos_mem_free(pWdaParams);
15987 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015988 return CONVERT_WDI2VOS_STATUS(status) ;
15989}
Jeff Johnson295189b2012-06-20 16:38:30 -070015990/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015991 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015992 *
15993 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015994void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015995 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
15996 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015997{
15998 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070015999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016000 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016001 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070016002 if(NULL == pWdaParams)
16003 {
16004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016005 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016006 VOS_ASSERT(0) ;
16007 return ;
16008 }
16009
16010 vos_mem_free(pWdaParams->wdaMsgParam) ;
16011 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16012 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016013 //print a msg, nothing else to do
16014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016015 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070016016 return ;
16017}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016018
16019/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016020 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
16021 * Free memory.
16022 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016023 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016024void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016025 void* pUserData)
16026{
16027 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16028
16029 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16030 "<------ %s, wdiStatus: %d",
16031 __func__, wdiStatus);
16032
16033 if (NULL == pWdaParams)
16034 {
16035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16036 "%s: Invalid pWdaParams pointer", __func__);
16037 VOS_ASSERT(0);
16038 return;
16039 }
16040
16041 if (IS_WDI_STATUS_FAILURE(wdiStatus))
16042 {
16043 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16044 vos_mem_free(pWdaParams->wdaMsgParam);
16045 vos_mem_free(pWdaParams);
16046 }
16047
16048 return;
16049}
16050
Jeff Johnson295189b2012-06-20 16:38:30 -070016051/*
16052 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
16053 * Request to WDI to set Receive Filters
16054 */
16055VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
16056 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
16057{
Jeff Johnson43971f52012-07-17 12:26:56 -070016058 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016059 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
16060 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
16061 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
16062 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
16063 tWDA_ReqParams *pWdaParams ;
16064 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070016065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016066 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016067 if(NULL == pwdiSetRcvPktFilterReqParamsType)
16068 {
16069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016070 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016071 VOS_ASSERT(0);
16072 return VOS_STATUS_E_NOMEM;
16073 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016074 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16075 if(NULL == pWdaParams)
16076 {
16077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016078 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016079 VOS_ASSERT(0);
16080 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
16081 return VOS_STATUS_E_NOMEM;
16082 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016083 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
16084 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
16085 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
16086 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070016087 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
16088 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
16089
16090 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
16091 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016092
16093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16094 "FID %d FT %d NParams %d CT %d",
16095 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
16096 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
16097 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
16098 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070016099 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
16100 {
16101 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
16102 &pRcvPktFilterCfg->paramsData[i],
16103 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070016104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016105 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070016106 pwdiSetRcvPktFilterReqParamsType->
16107 wdiPktFilterCfg.paramsData[i].protocolLayer,
16108 pwdiSetRcvPktFilterReqParamsType->
16109 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070016110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016111 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070016112 pwdiSetRcvPktFilterReqParamsType->
16113 wdiPktFilterCfg.paramsData[i].dataOffset,
16114 pwdiSetRcvPktFilterReqParamsType->
16115 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070016116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016117 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070016118 pwdiSetRcvPktFilterReqParamsType->
16119 wdiPktFilterCfg.paramsData[i].compareData[0],
16120 pwdiSetRcvPktFilterReqParamsType->
16121 wdiPktFilterCfg.paramsData[i].compareData[1],
16122 pwdiSetRcvPktFilterReqParamsType->
16123 wdiPktFilterCfg.paramsData[i].compareData[2],
16124 pwdiSetRcvPktFilterReqParamsType->
16125 wdiPktFilterCfg.paramsData[i].compareData[3],
16126 pwdiSetRcvPktFilterReqParamsType->
16127 wdiPktFilterCfg.paramsData[i].compareData[4],
16128 pwdiSetRcvPktFilterReqParamsType->
16129 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070016130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016131 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070016132 pwdiSetRcvPktFilterReqParamsType->
16133 wdiPktFilterCfg.paramsData[i].dataMask[0],
16134 pwdiSetRcvPktFilterReqParamsType->
16135 wdiPktFilterCfg.paramsData[i].dataMask[1],
16136 pwdiSetRcvPktFilterReqParamsType->
16137 wdiPktFilterCfg.paramsData[i].dataMask[2],
16138 pwdiSetRcvPktFilterReqParamsType->
16139 wdiPktFilterCfg.paramsData[i].dataMask[3],
16140 pwdiSetRcvPktFilterReqParamsType->
16141 wdiPktFilterCfg.paramsData[i].dataMask[4],
16142 pwdiSetRcvPktFilterReqParamsType->
16143 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070016144 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070016145 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016146 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016147 /* Store Params pass it to WDI */
16148 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
16149 pWdaParams->pWdaContext = pWDA;
16150 /* Store param pointer as passed in by caller */
16151 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070016152 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016153 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016154 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016155 if(IS_WDI_STATUS_FAILURE(status))
16156 {
16157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16158 "Failure in SetFilter(),free all the memory,status %d ",status);
16159 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16160 vos_mem_free(pWdaParams->wdaMsgParam);
16161 vos_mem_free(pWdaParams);
16162 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016163 return CONVERT_WDI2VOS_STATUS(status) ;
16164}
Jeff Johnson295189b2012-06-20 16:38:30 -070016165/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016166 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016167 *
16168 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070016169void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016170 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
16171 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016172{
16173 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16174 tWDA_CbContext *pWDA;
16175 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
16176 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
16177 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
16178 tANI_U8 i;
16179 vos_msg_t vosMsg;
16180
16181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016182 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016183 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
16184
Jeff Johnsone7245742012-09-05 17:12:55 -070016185 if(NULL == pRcvFltPktMatchCntRsp)
16186 {
16187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016188 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070016189 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016190 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070016191 return ;
16192 }
16193
Jeff Johnson295189b2012-06-20 16:38:30 -070016194 if(NULL == pWdaParams)
16195 {
16196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016197 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016198 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016199 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070016200 return ;
16201 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016202 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
16203 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070016204 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
16205 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
16206
16207 /* Message Header */
16208 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
16209 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
16210
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016211 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070016212
16213 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
16214 {
16215 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
16216 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
16217 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016218 /* VOS message wrapper */
16219 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
16220 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
16221 vosMsg.bodyval = 0;
16222 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16223 {
16224 /* free the mem and return */
16225 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
16226 }
16227
16228 vos_mem_free(pWdaParams->wdaMsgParam) ;
16229 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16230 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070016231
16232 return;
16233}
16234/*
16235 * FUNCTION: WDA_FilterMatchCountReqCallback
16236 * Free memory and send RSP back to SME.
16237 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
16238 */
16239void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
16240{
16241 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16242 vos_msg_t vosMsg;
16243
16244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16245 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16246
16247 if(NULL == pWdaParams)
16248 {
16249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16250 "%s: pWdaParams received NULL", __func__);
16251 VOS_ASSERT(0);
16252 return;
16253 }
16254
16255 /* VOS message wrapper */
16256 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
16257 vosMsg.bodyptr = NULL;
16258 vosMsg.bodyval = 0;
16259
16260 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16261 {
16262 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16263 vos_mem_free(pWdaParams->wdaMsgParam);
16264 vos_mem_free(pWdaParams);
16265 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
16266 }
16267
16268 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070016269}
Jeff Johnson295189b2012-06-20 16:38:30 -070016270/*
16271 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
16272 * Request to WDI to get PC Filter Match Count
16273 */
16274VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
16275{
Jeff Johnson43971f52012-07-17 12:26:56 -070016276 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016277 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
16278 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
16279 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016281 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016282 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
16283 {
16284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016285 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016286 VOS_ASSERT(0);
16287 return VOS_STATUS_E_NOMEM;
16288 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016289 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16290 if(NULL == pWdaParams)
16291 {
16292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016293 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016294 VOS_ASSERT(0);
16295 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
16296 return VOS_STATUS_E_NOMEM;
16297 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016298
Yue Ma7f44bbe2013-04-12 11:47:39 -070016299 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
16300 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016301
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016302 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
16303 pRcvFltPktMatchRsp->bssId,
16304 sizeof(wpt_macAddr));
16305
Jeff Johnson295189b2012-06-20 16:38:30 -070016306 /* Store Params pass it to WDI */
16307 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
16308 pWdaParams->pWdaContext = pWDA;
16309 /* Store param pointer as passed in by caller */
16310 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070016311 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016312 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016313 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016314 if(IS_WDI_STATUS_FAILURE(status))
16315 {
16316 /* failure returned by WDI API */
16317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16318 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
16319 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16320 vos_mem_free(pWdaParams) ;
16321 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
16322 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
16323 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016324 return CONVERT_WDI2VOS_STATUS(status) ;
16325}
Jeff Johnson295189b2012-06-20 16:38:30 -070016326/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016327 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016328 *
16329 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016330void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016331 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
16332 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016333{
16334 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070016335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016336 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016337/* WDA_VOS_ASSERT(NULL != pWdaParams); */
16338 if(NULL == pWdaParams)
16339 {
16340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016341 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016342 VOS_ASSERT(0) ;
16343 return ;
16344 }
16345
16346 vos_mem_free(pWdaParams->wdaMsgParam) ;
16347 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16348 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016349 //print a msg, nothing else to do
16350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016351 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070016352 return ;
16353}
Jeff Johnson295189b2012-06-20 16:38:30 -070016354/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016355 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
16356 * Free memory.
16357 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
16358 */
16359void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
16360{
16361 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16362
16363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16364 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16365
16366 if(NULL == pWdaParams)
16367 {
16368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16369 "%s: Invalid pWdaParams pointer", __func__);
16370 VOS_ASSERT(0);
16371 return;
16372 }
16373
16374 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16375 {
16376 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16377 vos_mem_free(pWdaParams->wdaMsgParam);
16378 vos_mem_free(pWdaParams);
16379 }
16380
16381 return;
16382}
16383/*
Jeff Johnson295189b2012-06-20 16:38:30 -070016384 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
16385 * Request to WDI to clear Receive Filters
16386 */
16387VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
16388 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
16389{
Jeff Johnson43971f52012-07-17 12:26:56 -070016390 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016391 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
16392 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
16393 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016395 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016396 if(NULL == pwdiRcvFltPktClearReqParamsType)
16397 {
16398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016399 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016400 VOS_ASSERT(0);
16401 return VOS_STATUS_E_NOMEM;
16402 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016403 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16404 if(NULL == pWdaParams)
16405 {
16406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016407 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016408 VOS_ASSERT(0);
16409 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
16410 return VOS_STATUS_E_NOMEM;
16411 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016412 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
16413 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070016414 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
16415 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
16416 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
16417 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016418
Yue Ma7f44bbe2013-04-12 11:47:39 -070016419 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016420 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016421 /* Store Params pass it to WDI */
16422 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
16423 pWdaParams->pWdaContext = pWDA;
16424 /* Store param pointer as passed in by caller */
16425 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070016426 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016427 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016428 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016429 if(IS_WDI_STATUS_FAILURE(status))
16430 {
16431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16432 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
16433 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080016434 vos_mem_free(pWdaParams->wdaMsgParam);
16435 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016436 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016437 return CONVERT_WDI2VOS_STATUS(status) ;
16438}
16439#endif // WLAN_FEATURE_PACKET_FILTERING
16440
Jeff Johnson295189b2012-06-20 16:38:30 -070016441/*
16442 * FUNCTION: WDA_ProcessSetPowerParamsReq
16443 * Request to WDI to set power params
16444 */
16445VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
16446 tSirSetPowerParamsReq *pPowerParams)
16447{
Jeff Johnson43971f52012-07-17 12:26:56 -070016448 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016449 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
16450 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016451 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016453 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016454 if(NULL == pwdiSetPowerParamsReqInfo)
16455 {
16456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016457 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016458 VOS_ASSERT(0);
16459 return VOS_STATUS_E_NOMEM;
16460 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016461 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16462 if(NULL == pWdaParams)
16463 {
16464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016465 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016466 VOS_ASSERT(0);
16467 vos_mem_free(pwdiSetPowerParamsReqInfo);
16468 return VOS_STATUS_E_NOMEM;
16469 }
Jeff Johnsone7245742012-09-05 17:12:55 -070016470
Jeff Johnson295189b2012-06-20 16:38:30 -070016471
16472 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
16473 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070016474 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
16475 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070016476 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
16477 pPowerParams->uListenInterval;
16478 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
16479 pPowerParams->uBcastMcastFilter;
16480 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
16481 pPowerParams->uEnableBET;
16482 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
16483 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070016484 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
16485 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070016486 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
16487 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016488
Jeff Johnson295189b2012-06-20 16:38:30 -070016489 /* Store Params pass it to WDI */
16490 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
16491 pWdaParams->pWdaContext = pWDA;
16492 /* Store param pointer as passed in by caller */
16493 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016494 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016495 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016496 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016497 if(IS_WDI_STATUS_FAILURE(status))
16498 {
16499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16500 "Failure in Set power params REQ WDI API, free all the memory " );
16501 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16502 vos_mem_free(pWdaParams->wdaMsgParam);
16503 pWdaParams->wdaWdiApiMsgParam = NULL;
16504 pWdaParams->wdaMsgParam = NULL;
16505 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016506 return CONVERT_WDI2VOS_STATUS(status) ;
16507}
16508
16509/*
16510 * FUNCTION: WDA_SetTmLevelRspCallback
16511 * Set TM Level response
16512 */
16513void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
16514{
16515 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16516
16517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016518 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016519
16520 if(NULL == pWdaParams)
16521 {
16522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016523 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016524 VOS_ASSERT(0) ;
16525 return ;
16526 }
16527
16528 /* Dose not need to send notification to upper layer
16529 * Just free allocated resources */
16530 if( pWdaParams != NULL )
16531 {
16532 if( pWdaParams->wdaWdiApiMsgParam != NULL )
16533 {
16534 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16535 }
16536 vos_mem_free(pWdaParams->wdaMsgParam) ;
16537 vos_mem_free(pWdaParams) ;
16538 }
16539}
16540
16541/*
16542 * FUNCTION: WDA_ProcessSetTmLevelReq
16543 * Set TM Level request
16544 */
16545VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
16546 tAniSetTmLevelReq *setTmLevelReq)
16547{
16548 WDI_Status status = WDI_STATUS_SUCCESS ;
16549 tWDA_ReqParams *pWdaParams ;
16550 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
16551 (WDI_SetTmLevelReqType *)vos_mem_malloc(
16552 sizeof(WDI_SetTmLevelReqType)) ;
16553 if(NULL == wdiSetTmLevelReq)
16554 {
16555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016556 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016557 VOS_ASSERT(0);
16558 return VOS_STATUS_E_NOMEM;
16559 }
16560
16561 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16562 if(NULL == pWdaParams)
16563 {
16564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016565 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016566 VOS_ASSERT(0);
16567 vos_mem_free(wdiSetTmLevelReq);
16568 return VOS_STATUS_E_NOMEM;
16569 }
16570
16571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016572 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016573
16574 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
16575 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
16576
16577 pWdaParams->pWdaContext = pWDA;
16578 pWdaParams->wdaMsgParam = setTmLevelReq;
16579 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
16580
16581 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
16582 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
16583
16584 if(IS_WDI_STATUS_FAILURE(status))
16585 {
16586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080016587 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070016588 vos_mem_free(pWdaParams->wdaMsgParam) ;
16589 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16590 vos_mem_free(pWdaParams) ;
16591 }
16592
16593 return CONVERT_WDI2VOS_STATUS(status) ;
16594}
16595
16596VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
16597 tpTxControlParams pTxCtrlParam)
16598{
16599 VOS_STATUS wdaStatus;
16600
16601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016602 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016603 if( pTxCtrlParam == NULL )
16604 {
16605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016606 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016607 return VOS_STATUS_E_FAILURE;
16608 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016609 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
16610 {
16611 wdaStatus = WDA_SuspendDataTx(pWDA);
16612 }
16613 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
16614 {
16615 wdaStatus = WDA_ResumeDataTx(pWDA);
16616 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016617 return wdaStatus;
16618}
16619
16620 /* FUNCTION WDA_featureCapsExchange
16621 * WDA API to invoke capability exchange between host and FW.
16622 */
16623void WDA_featureCapsExchange(v_PVOID_t pVosContext)
16624{
16625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016626 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070016627 WDI_featureCapsExchangeReq( NULL, pVosContext);
16628}
16629
Yathish9f22e662012-12-10 14:21:35 -080016630/* FUNCTION WDA_disableCapablityFeature
16631 * WDA API to diable Active mode offload in host.
16632 */
16633void WDA_disableCapablityFeature(tANI_U8 feature_index)
16634{
16635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16636 "%s:enter", __func__ );
16637 WDI_disableCapablityFeature(feature_index);
16638}
16639
Jeff Johnson295189b2012-06-20 16:38:30 -070016640 /* FUNCTION WDA_getHostWlanFeatCaps
16641 * Wrapper for WDI API, that will return if the feature (enum value).passed
16642 * to this API is supported or not in Host
16643 * return value
16644 * 0 - implies feature is NOT Supported
16645 * any non zero value - implies feature is SUPPORTED
16646 */
16647tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
16648{
16649 return WDI_getHostWlanFeatCaps(featEnumValue);
16650}
16651
16652 /* FUNCTION WDA_getFwWlanFeatCaps
16653 * Wrapper for WDI API, that will return if the feature (enum value).passed
16654 * to this API is supported or not in FW
16655 * return value
16656 * 0 - implies feature is NOT Supported
16657 * any non zero value - implies feature is SUPPORTED
16658 */
16659tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
16660{
16661 return WDI_getFwWlanFeatCaps(featEnumValue);
16662}
16663
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053016664
Jeff Johnson295189b2012-06-20 16:38:30 -070016665/*
16666 * FUNCTION: WDA_shutdown
16667 * Shutdown WDA/WDI without handshaking with Riva.
16668 * Synchronous function.
16669 */
16670VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
16671{
16672 WDI_Status wdiStatus;
16673 //tANI_U8 eventIdx = 0;
16674 VOS_STATUS status = VOS_STATUS_SUCCESS;
16675 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070016676 if (NULL == pWDA)
16677 {
16678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016679 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070016680 VOS_ASSERT(0);
16681 return VOS_STATUS_E_FAILURE;
16682 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016683 /* FTM mode stay START_STATE */
16684 if( (WDA_READY_STATE != pWDA->wdaState) &&
16685 (WDA_INIT_STATE != pWDA->wdaState) &&
16686 (WDA_START_STATE != pWDA->wdaState) )
16687 {
16688 VOS_ASSERT(0);
16689 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016690
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080016691 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
16692 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070016693 {
16694 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080016695 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070016696 }
Leo Chang9d76f622013-08-23 16:34:52 -070016697 else
16698 {
16699 vos_event_destroy(&pWDA->ftmStopDoneEvent);
16700 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016701
Jeff Johnson295189b2012-06-20 16:38:30 -070016702 /* call WDI shutdown */
16703 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070016704 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
16705 {
16706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16707 "error in WDA Stop" );
16708 status = VOS_STATUS_E_FAILURE;
16709 }
16710 /* WDI stop is synchrnous, shutdown is complete when it returns */
16711 pWDA->wdaState = WDA_STOP_STATE;
16712
Jeff Johnson295189b2012-06-20 16:38:30 -070016713 /* shutdown should perform the stop & close actions. */
16714 /* Destroy the event */
16715 status = vos_event_destroy(&pWDA->txFrameEvent);
16716 if(!VOS_IS_STATUS_SUCCESS(status))
16717 {
16718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016719 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070016720 status = VOS_STATUS_E_FAILURE;
16721 }
16722 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
16723 if(!VOS_IS_STATUS_SUCCESS(status))
16724 {
16725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016726 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070016727 status = VOS_STATUS_E_FAILURE;
16728 }
16729 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
16730 if(!VOS_IS_STATUS_SUCCESS(status))
16731 {
16732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016733 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070016734 status = VOS_STATUS_E_FAILURE;
16735 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016736 /* free WDA context */
16737 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
16738 if ( !VOS_IS_STATUS_SUCCESS(status) )
16739 {
16740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16741 "error in WDA close " );
16742 status = VOS_STATUS_E_FAILURE;
16743 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016744 return status;
16745}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080016746
Jeff Johnsone7245742012-09-05 17:12:55 -070016747/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080016748 * FUNCTION: WDA_setNeedShutdown
16749 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070016750 */
16751
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080016752void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070016753{
16754 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070016755 if(pWDA == NULL)
16756 {
16757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16758 "Could not get the WDA Context pointer" );
16759 return;
16760 }
Jeff Johnsone7245742012-09-05 17:12:55 -070016761 pWDA->needShutdown = TRUE;
16762}
16763/*
16764 * FUNCTION: WDA_needShutdown
16765 * WDA needs a shutdown
16766 */
16767
16768v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
16769{
16770 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070016771 if(pWDA == NULL)
16772 {
16773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16774 "Could not get the WDA Context pointer" );
16775 return 0;
16776 }
16777 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070016778}
16779
Mohit Khanna4a70d262012-09-11 16:30:12 -070016780#ifdef WLAN_FEATURE_11AC
16781/*
16782 * FUNCTION: WDA_SetBeaconFilterReqCallback
16783 *
16784 */
16785void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
16786{
16787 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016789 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016790 if(NULL == pWdaParams)
16791 {
16792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016793 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016794 VOS_ASSERT(0) ;
16795 return ;
16796 }
Jeff Johnsone7245742012-09-05 17:12:55 -070016797
Mohit Khanna4a70d262012-09-11 16:30:12 -070016798 vos_mem_free(pWdaParams->wdaMsgParam) ;
16799 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16800 vos_mem_free(pWdaParams) ;
16801 /*
16802 * No respone required for SetBeaconFilter req so just free the request
16803 * param here
16804 */
16805
16806 return ;
16807}
16808
16809VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
16810 tUpdateVHTOpMode *pData)
16811{
16812 WDI_Status status = WDI_STATUS_SUCCESS ;
16813 tWDA_ReqParams *pWdaParams ;
16814 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
16815 sizeof(WDI_UpdateVHTOpMode)) ;
16816 if(NULL == wdiTemp)
16817 {
16818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016819 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016820 VOS_ASSERT(0);
16821 return VOS_STATUS_E_NOMEM;
16822 }
16823 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16824 if(NULL == pWdaParams)
16825 {
16826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016827 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016828 VOS_ASSERT(0);
16829 vos_mem_free(wdiTemp);
16830 return VOS_STATUS_E_NOMEM;
16831 }
Abhishek Singhdf8eb312014-11-15 00:49:28 +053016832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16833 "------> %s Opmode = %d and staid = %d" ,
16834 __func__, pData->opMode, pData->staId);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016835 wdiTemp->opMode = pData->opMode;
16836 wdiTemp->staId = pData->staId;
16837
16838 pWdaParams->pWdaContext = pWDA;
16839 /* Store Req pointer, as this will be used for response */
16840 pWdaParams->wdaMsgParam = (void *)pData;
16841 /* store Params pass it to WDI */
16842 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
16843
16844 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
16845
16846 if(IS_WDI_STATUS_FAILURE(status))
16847 {
16848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16849 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
16850 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16851 vos_mem_free(pWdaParams->wdaMsgParam);
16852 vos_mem_free(pWdaParams);
16853 }
16854 return CONVERT_WDI2VOS_STATUS(status) ;
16855}
16856#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016857
16858/*==========================================================================
16859 FUNCTION WDA_TransportChannelDebug
16860
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070016861 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016862 Display Transport Channel debugging information
16863 User may request to display DXE channel snapshot
16864 Or if host driver detects any abnormal stcuk may display
16865
16866 PARAMETERS
schang6295e542013-03-12 15:31:23 -070016867 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080016868 displaySnapshot : Display DXE snapshot option
Mihir Shete40a55652014-03-02 14:14:47 +053016869 debugFlags : Enable stall detect features
16870 defined by WPAL_DeviceDebugFlags
16871 These features may effect
16872 data performance.
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016873
16874 RETURN VALUE
16875 NONE
16876
16877===========================================================================*/
16878void WDA_TransportChannelDebug
16879(
schang6295e542013-03-12 15:31:23 -070016880 tpAniSirGlobal pMac,
16881 v_BOOL_t displaySnapshot,
Mihir Shete40a55652014-03-02 14:14:47 +053016882 v_U8_t debugFlags
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016883)
16884{
Mihir Shete40a55652014-03-02 14:14:47 +053016885 WDI_TransportChannelDebug(displaySnapshot, debugFlags);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016886 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070016887}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070016888
16889/*==========================================================================
16890 FUNCTION WDA_SetEnableSSR
16891
16892 DESCRIPTION
16893 API to enable/disable SSR on WDI timeout
16894
16895 PARAMETERS
16896 enableSSR : enable/disable SSR
16897
16898 RETURN VALUE
16899 NONE
16900
16901===========================================================================*/
16902void WDA_SetEnableSSR(v_BOOL_t enableSSR)
16903{
16904 WDI_SetEnableSSR(enableSSR);
16905}
Leo Chang9056f462013-08-01 19:21:11 -070016906
16907#ifdef FEATURE_WLAN_LPHB
16908/*
16909 * FUNCTION: WDA_LPHBconfRspCallback
16910 *
16911 */
16912void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
16913{
16914 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16915
16916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16917 "<------ %s " ,__func__);
16918 if (NULL == pWdaParams)
16919 {
16920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16921 "%s: pWdaParams received NULL", __func__);
16922 VOS_ASSERT(0) ;
16923 return ;
16924 }
16925
16926 /* Do not need to send notification to upper layer
16927 * Just free allocated resources */
16928 if (pWdaParams != NULL)
16929 {
16930 if (pWdaParams->wdaWdiApiMsgParam != NULL)
16931 {
16932 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16933 }
16934 vos_mem_free(pWdaParams->wdaMsgParam) ;
16935 vos_mem_free(pWdaParams) ;
16936 }
16937
16938 return;
16939}
16940
16941/*
16942 * FUNCTION: WDA_ProcessLPHBConfReq
16943 *
16944 */
16945VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
16946 tSirLPHBReq *pData)
16947{
16948 WDI_Status wdiStatus;
16949 tWDA_ReqParams *pWdaParams ;
16950
16951 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16952 "------> %s " , __func__);
16953
16954 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16955 if (NULL == pWdaParams)
16956 {
16957 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16958 "%s: VOS MEM Alloc Failure", __func__);
16959 VOS_ASSERT(0);
16960 vos_mem_free(pData);
16961 return VOS_STATUS_E_NOMEM;
16962 }
16963
16964 pWdaParams->pWdaContext = pWDA;
16965 pWdaParams->wdaMsgParam = (void *)pData;
16966 pWdaParams->wdaWdiApiMsgParam = NULL;
16967
16968 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
16969 if (WDI_STATUS_PENDING == wdiStatus)
16970 {
16971 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16972 "Pending received for %s:%d ", __func__, __LINE__);
16973 }
16974 else if (WDI_STATUS_SUCCESS != wdiStatus)
16975 {
16976 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16977 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
16978 vos_mem_free(pWdaParams->wdaMsgParam);
16979 vos_mem_free(pWdaParams);
16980 }
16981
16982 return CONVERT_WDI2VOS_STATUS(wdiStatus);
16983}
16984#endif /* FEATURE_WLAN_LPHB */
16985
c_hpothu92367912014-05-01 15:18:17 +053016986void WDA_GetBcnMissRateCallback(tANI_U8 status, tANI_U32 bcnMissRate,
16987 void* pUserData)
16988{
16989 tSirBcnMissRateInfo *pBcnMissRateInfo = (tSirBcnMissRateInfo *)pUserData;
16990
16991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16992 "<------ %s " ,__func__);
16993 if (NULL == pBcnMissRateInfo)
16994 {
16995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16996 "%s: pWdaParams received NULL", __func__);
16997 VOS_ASSERT(0) ;
16998 return ;
16999 }
17000 if (pBcnMissRateInfo->callback)
17001 {
17002 pBcnMissRateInfo->callback(status, bcnMissRate,
17003 pBcnMissRateInfo->data);
17004 }
17005 vos_mem_free(pUserData);
17006
17007 return;
17008}
17009
17010v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
17011 tSirBcnMissRateReq *pData)
17012{
17013 WDI_Status wdiStatus;
17014 tSirBcnMissRateInfo *pBcnMissRateInfo;
17015
17016 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17017 "------> %s " , __func__);
17018
17019 pBcnMissRateInfo =
17020 (tSirBcnMissRateInfo *)vos_mem_malloc(sizeof(tSirBcnMissRateInfo));
17021 if (NULL == pBcnMissRateInfo)
17022 {
17023 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17024 "%s: VOS MEM Alloc Failure", __func__);
17025 VOS_ASSERT(0);
17026 vos_mem_free(pData);
17027 return;
17028 }
17029
17030 pBcnMissRateInfo->callback = (pGetBcnMissRateCB)(pData->callback);
17031 pBcnMissRateInfo->data = pData->data;
17032
17033 wdiStatus = WDI_GetBcnMissRate(pBcnMissRateInfo,
17034 WDA_GetBcnMissRateCallback,
17035 pData->bssid);
17036 if (WDI_STATUS_PENDING == wdiStatus)
17037 {
17038 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17039 "Pending received for %s:%d ", __func__, __LINE__);
17040 }
17041 else if (WDI_STATUS_SUCCESS != wdiStatus)
17042 {
17043 if (pBcnMissRateInfo->callback)
17044 {
17045 pBcnMissRateInfo->callback(VOS_STATUS_E_FAILURE,
17046 -1, pBcnMissRateInfo->data);
17047 }
17048 }
17049 vos_mem_free(pData);
17050}
Dino Mycle41bdc942014-06-10 11:30:24 +053017051
17052#ifdef WLAN_FEATURE_EXTSCAN
17053
17054/*==========================================================================
17055 FUNCTION WDA_EXTScanStartRspCallback
17056
17057 DESCRIPTION
17058 API to send EXTScan Start Response to HDD
17059
17060 PARAMETERS
17061 pEventData: Response from FW
17062 pUserData:
17063===========================================================================*/
17064void WDA_EXTScanStartRspCallback(void *pEventData, void* pUserData)
17065{
17066 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17067 tWDA_CbContext *pWDA = NULL;
17068 void *pCallbackContext;
17069 tpAniSirGlobal pMac;
17070
17071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17072 "%s:", __func__);
17073 if (NULL == pWdaParams)
17074 {
17075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17076 "%s: pWdaParams received NULL", __func__);
17077 VOS_ASSERT(0);
17078 return;
17079 }
17080
17081 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17082
17083 if (NULL == pWDA)
17084 {
17085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17086 "%s: pWDA received NULL", __func__);
17087 VOS_ASSERT(0);
17088 goto error;
17089 }
17090
17091 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17092 if (NULL == pMac)
17093 {
17094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17095 "%s:pMac is NULL", __func__);
17096 VOS_ASSERT(0);
17097 goto error;
17098 }
17099
17100 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17101
17102 if (pMac->sme.pEXTScanIndCb)
17103 {
17104 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_START_RSP,
17105 pEventData);
17106 }
17107 else
17108 {
17109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17110 "%s:HDD callback is null", __func__);
17111 VOS_ASSERT(0);
17112 }
17113
17114error:
17115
17116 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17117 {
17118 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17119 }
17120 if (pWdaParams->wdaMsgParam != NULL)
17121 {
17122 vos_mem_free(pWdaParams->wdaMsgParam);
17123 }
17124 vos_mem_free(pWdaParams) ;
17125
17126 return;
17127}
17128
17129/*==========================================================================
17130 FUNCTION WDA_EXTScanStopRspCallback
17131
17132 DESCRIPTION
17133 API to send EXTScan Stop Response to HDD
17134
17135 PARAMETERS
17136 pEventData: Response from FW
17137 pUserData:
17138===========================================================================*/
17139void WDA_EXTScanStopRspCallback(void *pEventData, void* pUserData)
17140{
17141 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17142 tWDA_CbContext *pWDA = NULL;
17143 void *pCallbackContext;
17144 tpAniSirGlobal pMac;
17145
17146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17147 "%s:", __func__);
17148 if (NULL == pWdaParams)
17149 {
17150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17151 "%s: pWdaParams received NULL", __func__);
17152 VOS_ASSERT(0);
17153 return;
17154 }
17155
17156 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17157
17158 if (NULL == pWDA)
17159 {
17160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17161 "%s: pWDA received NULL", __func__);
17162 VOS_ASSERT(0);
17163 goto error;
17164 }
17165
17166 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17167 if (NULL == pMac)
17168 {
17169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17170 "%s:pMac is NULL", __func__);
17171 VOS_ASSERT(0);
17172 goto error;
17173 }
17174 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17175
17176 if (pMac->sme.pEXTScanIndCb)
17177 {
17178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17179 "%s:HDD call back function called", __func__);
17180 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_STOP_RSP,
17181 pEventData);
17182 }
17183 else
17184 {
17185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17186 "%s:HDD callback is null", __func__);
17187 VOS_ASSERT(0);
17188 }
17189
17190error:
17191
17192 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17193 {
17194 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17195 }
17196 if (pWdaParams->wdaMsgParam != NULL)
17197 {
17198 vos_mem_free(pWdaParams->wdaMsgParam);
17199 }
17200 vos_mem_free(pWdaParams) ;
17201
17202
17203 return;
17204}
17205
17206/*==========================================================================
17207 FUNCTION WDA_EXTScanGetCachedResultsRspCallback
17208
17209 DESCRIPTION
17210 API to send EXTScan Get Cached Results Response to HDD
17211
17212 PARAMETERS
17213 pEventData: Response from FW
17214 pUserData:
17215===========================================================================*/
17216void WDA_EXTScanGetCachedResultsRspCallback(void *pEventData, void* pUserData)
17217{
17218 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17219 tWDA_CbContext *pWDA = NULL;
17220 void *pCallbackContext;
17221 tpAniSirGlobal pMac;
17222
17223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17224 "%s: ", __func__);
17225 if (NULL == pWdaParams)
17226 {
17227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17228 "%s: pWdaParams received NULL", __func__);
17229 VOS_ASSERT(0);
17230 return;
17231 }
17232
17233 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17234
17235 if (NULL == pWDA)
17236 {
17237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17238 "%s: pWDA received NULL", __func__);
17239 VOS_ASSERT(0);
17240 goto error;
17241 }
17242
17243 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17244 if (NULL == pMac)
17245 {
17246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17247 "%s:pMac is NULL", __func__);
17248 VOS_ASSERT(0);
17249 goto error;
17250 }
17251
17252 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17253
17254 if (pMac->sme.pEXTScanIndCb)
17255 {
17256 pMac->sme.pEXTScanIndCb(pCallbackContext,
17257 WDA_EXTSCAN_GET_CACHED_RESULTS_RSP,
17258 pEventData);
17259 }
17260 else
17261 {
17262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17263 "%s:HDD callback is null", __func__);
17264 VOS_ASSERT(0);
17265 }
17266
17267
17268error:
17269
17270 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17271 {
17272 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17273 }
17274 if (pWdaParams->wdaMsgParam != NULL)
17275 {
17276 vos_mem_free(pWdaParams->wdaMsgParam);
17277 }
17278 vos_mem_free(pWdaParams) ;
17279
17280 return;
17281}
17282
17283/*==========================================================================
17284 FUNCTION WDA_EXTScanGetCapabilitiesRspCallback
17285
17286 DESCRIPTION
17287 API to send EXTScan Get Capabilities Response to HDD
17288
17289 PARAMETERS
17290 pEventData: Response from FW
17291 pUserData:
17292===========================================================================*/
17293void WDA_EXTScanGetCapabilitiesRspCallback(void *pEventData, void* pUserData)
17294{
17295 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17296 tWDA_CbContext *pWDA = NULL;
17297 void *pCallbackContext;
17298 tpAniSirGlobal pMac;
17299
17300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17301 "%s:", __func__);
17302 if (NULL == pWdaParams)
17303 {
17304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17305 "%s: pWdaParams received NULL", __func__);
17306 VOS_ASSERT(0);
17307 return;
17308 }
17309
17310 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17311
17312 if (NULL == pWDA)
17313 {
17314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17315 "%s: pWDA received NULL", __func__);
17316 VOS_ASSERT(0);
17317 goto error;
17318 }
17319
17320 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17321 if (NULL == pMac)
17322 {
17323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17324 "%s:pMac is NULL", __func__);
17325 VOS_ASSERT(0);
17326 goto error;
17327 }
17328
17329 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17330
17331 if (pMac->sme.pEXTScanIndCb)
17332 {
17333 pMac->sme.pEXTScanIndCb(pCallbackContext,
17334 WDA_EXTSCAN_GET_CAPABILITIES_RSP,
17335 pEventData);
17336 }
17337 else
17338 {
17339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17340 "%s:HDD callback is null", __func__);
17341 VOS_ASSERT(0);
17342 }
17343
17344
17345error:
17346
17347 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17348 {
17349 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17350 }
17351 if (pWdaParams->wdaMsgParam != NULL)
17352 {
17353 vos_mem_free(pWdaParams->wdaMsgParam);
17354 }
17355 vos_mem_free(pWdaParams) ;
17356
17357 return;
17358}
17359
17360/*==========================================================================
17361 FUNCTION WDA_EXTScanSetBSSIDHotlistRspCallback
17362
17363 DESCRIPTION
17364 API to send EXTScan Set BSSID Hotlist Response to HDD
17365
17366 PARAMETERS
17367 pEventData: Response from FW
17368 pUserData:
17369===========================================================================*/
17370void WDA_EXTScanSetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
17371{
17372 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17373 tWDA_CbContext *pWDA = NULL;
17374 void *pCallbackContext;
17375 tpAniSirGlobal pMac;
17376
17377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17378 "%s: ", __func__);
17379 if (NULL == pWdaParams)
17380 {
17381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17382 "%s: pWdaParams received NULL", __func__);
17383 VOS_ASSERT(0) ;
17384 return;
17385 }
17386
17387 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17388
17389 if (NULL == pWDA)
17390 {
17391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17392 "%s: pWDA received NULL", __func__);
17393 VOS_ASSERT(0);
17394 goto error;
17395 }
17396
17397 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17398 if (NULL == pMac)
17399 {
17400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17401 "%s:pMac is NULL", __func__);
17402 VOS_ASSERT(0);
17403 goto error;
17404 }
17405
17406 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17407
17408 if (pMac->sme.pEXTScanIndCb)
17409 {
17410 pMac->sme.pEXTScanIndCb(pCallbackContext,
17411 WDA_EXTSCAN_SET_BSSID_HOTLIST_RSP,
17412 pEventData);
17413 }
17414 else
17415 {
17416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17417 "%s:HDD callback is null", __func__);
17418 VOS_ASSERT(0);
17419 }
17420
17421
17422error:
17423
17424 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17425 {
17426 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17427 }
17428 if (pWdaParams->wdaMsgParam != NULL)
17429 {
17430 vos_mem_free(pWdaParams->wdaMsgParam);
17431 }
17432 vos_mem_free(pWdaParams) ;
17433
17434 return;
17435}
17436
17437/*==========================================================================
17438 FUNCTION WDA_EXTScanResetBSSIDHotlistRspCallback
17439
17440 DESCRIPTION
17441 API to send EXTScan ReSet BSSID Hotlist Response to HDD
17442
17443 PARAMETERS
17444 pEventData: Response from FW
17445 pUserData:
17446===========================================================================*/
17447void WDA_EXTScanResetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
17448{
17449 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17450 tWDA_CbContext *pWDA = NULL;
17451 void *pCallbackContext;
17452 tpAniSirGlobal pMac;
17453
17454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17455 "%s:", __func__);
17456 if (NULL == pWdaParams)
17457 {
17458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17459 "%s: pWdaParams received NULL", __func__);
17460 VOS_ASSERT(0) ;
17461 return;
17462 }
17463
17464 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17465
17466 if (NULL == pWDA)
17467 {
17468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17469 "%s: pWDA received NULL", __func__);
17470 VOS_ASSERT(0);
17471 goto error;
17472 }
17473
17474 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17475 if (NULL == pMac)
17476 {
17477 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17478 "%s:pMac is NULL", __func__);
17479 VOS_ASSERT(0);
17480 goto error;
17481 }
17482
17483 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17484
17485 if (pMac->sme.pEXTScanIndCb)
17486 {
17487 pMac->sme.pEXTScanIndCb(pCallbackContext,
17488 WDA_EXTSCAN_RESET_BSSID_HOTLIST_RSP,
17489 pEventData);
17490 }
17491 else
17492 {
17493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17494 "%s:HDD callback is null", __func__);
17495 VOS_ASSERT(0);
17496 }
17497
17498
17499error:
17500
17501 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17502 {
17503 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17504 }
17505 if (pWdaParams->wdaMsgParam != NULL)
17506 {
17507 vos_mem_free(pWdaParams->wdaMsgParam);
17508 }
17509 vos_mem_free(pWdaParams) ;
17510
17511 return;
17512}
17513
17514/*==========================================================================
17515 FUNCTION WDA_EXTScanSetSignfRSSIChangeRspCallback
17516
17517 DESCRIPTION
17518 API to send EXTScan Set Significant RSSI Change RSP to HDD
17519
17520 PARAMETERS
17521 pEventData: Response from FW
17522 pUserData:
17523===========================================================================*/
17524void WDA_EXTScanSetSignfRSSIChangeRspCallback(void *pEventData, void* pUserData)
17525{
17526 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17527 tWDA_CbContext *pWDA = NULL;
17528 void *pCallbackContext;
17529 tpAniSirGlobal pMac;
17530
17531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17532 "%s:", __func__);
17533 if (NULL == pWdaParams)
17534 {
17535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17536 "%s: pWdaParams received NULL", __func__);
17537 VOS_ASSERT(0) ;
17538 return;
17539 }
17540
17541 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17542
17543 if (NULL == pWDA)
17544 {
17545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17546 "%s: pWDA received NULL", __func__);
17547 VOS_ASSERT(0);
17548 goto error;
17549 }
17550
17551 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17552 if (NULL == pMac)
17553 {
17554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17555 "%s:pMac is NULL", __func__);
17556 VOS_ASSERT(0);
17557 goto error;
17558 }
17559
17560 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17561
17562 if (pMac->sme.pEXTScanIndCb)
17563 {
17564 pMac->sme.pEXTScanIndCb(pCallbackContext,
17565 WDA_EXTSCAN_SET_SIGNF_RSSI_CHANGE_RSP,
17566 pEventData);
17567 }
17568 else
17569 {
17570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17571 "%s:HDD callback is null", __func__);
17572 VOS_ASSERT(0);
17573 }
17574
17575
17576error:
17577
17578 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17579 {
17580 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17581 }
17582 if (pWdaParams->wdaMsgParam != NULL)
17583 {
17584 vos_mem_free(pWdaParams->wdaMsgParam);
17585 }
17586 vos_mem_free(pWdaParams) ;
17587
17588 return;
17589}
17590
17591/*==========================================================================
17592 FUNCTION WDA_EXTScanResetSignfRSSIChangeRspCallback
17593
17594 DESCRIPTION
17595 API to send EXTScan Set Significant RSSI Change RSP to HDD
17596
17597 PARAMETERS
17598 pEventData: Response from FW
17599 pUserData:
17600===========================================================================*/
17601void WDA_EXTScanResetSignfRSSIChangeRspCallback(void *pEventData,
17602 void* pUserData)
17603{
17604 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17605 tWDA_CbContext *pWDA = NULL;
17606 void *pCallbackContext;
17607 tpAniSirGlobal pMac;
17608
17609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17610 "%s:", __func__);
17611 if (NULL == pWdaParams)
17612 {
17613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17614 "%s: pWdaParams received NULL", __func__);
17615 VOS_ASSERT(0) ;
17616 return;
17617 }
17618
17619 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17620
17621 if (NULL == pWDA)
17622 {
17623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17624 "%s: pWDA received NULL", __func__);
17625 VOS_ASSERT(0);
17626 goto error;
17627 }
17628
17629 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17630 if (NULL == pMac)
17631 {
17632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17633 "%s:pMac is NULL", __func__);
17634 VOS_ASSERT(0);
17635 goto error;
17636 }
17637
17638 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17639
17640 if (pMac->sme.pEXTScanIndCb)
17641 {
17642 pMac->sme.pEXTScanIndCb(pCallbackContext,
17643 WDA_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_RSP,
17644 pEventData);
17645 }
17646 else
17647 {
17648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17649 "%s:HDD callback is null", __func__);
17650 VOS_ASSERT(0);
17651 }
17652
17653
17654error:
17655
17656 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17657 {
17658 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17659 }
17660 if (pWdaParams->wdaMsgParam != NULL)
17661 {
17662 vos_mem_free(pWdaParams->wdaMsgParam);
17663 }
17664 vos_mem_free(pWdaParams) ;
17665
17666 return;
17667}
17668
17669/*==========================================================================
17670 FUNCTION WDA_ProcessEXTScanStartReq
17671
17672 DESCRIPTION
17673 API to send EXTScan Start Request to WDI
17674
17675 PARAMETERS
17676 pWDA: Pointer to WDA context
17677 wdaRequest: Pointer to EXTScan req parameters
17678===========================================================================*/
17679VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
17680 tSirEXTScanStartReqParams *wdaRequest)
17681{
17682 WDI_Status status = WDI_STATUS_SUCCESS;
17683 tWDA_ReqParams *pWdaParams;
17684
17685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17686 "%s: ", __func__);
17687 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17688 if (NULL == pWdaParams)
17689 {
17690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17691 "%s: VOS MEM Alloc Failure", __func__);
17692 VOS_ASSERT(0);
17693 return VOS_STATUS_E_NOMEM;
17694 }
17695 pWdaParams->pWdaContext = pWDA;
17696 pWdaParams->wdaMsgParam = wdaRequest;
17697 pWdaParams->wdaWdiApiMsgParam = NULL;
17698
17699 status = WDI_EXTScanStartReq((void *)wdaRequest,
17700 (WDI_EXTScanStartRspCb)WDA_EXTScanStartRspCallback,
17701 (void *)pWdaParams);
17702 if (IS_WDI_STATUS_FAILURE(status))
17703 {
17704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17705 "Failure to request. Free all the memory " );
17706 vos_mem_free(pWdaParams->wdaMsgParam);
17707 vos_mem_free(pWdaParams);
17708 }
17709 return CONVERT_WDI2VOS_STATUS(status);
17710}
17711
17712/*==========================================================================
17713 FUNCTION WDA_ProcessEXTScanStopReq
17714
17715 DESCRIPTION
17716 API to send EXTScan Start Request to WDI
17717
17718 PARAMETERS
17719 pWDA: Pointer to WDA context
17720 wdaRequest: Pointer to EXTScan req parameters
17721===========================================================================*/
17722VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
17723 tSirEXTScanStopReqParams *wdaRequest)
17724{
17725 WDI_Status status = WDI_STATUS_SUCCESS;
17726 tWDA_ReqParams *pWdaParams;
17727
17728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17729 "%s:", __func__);
17730 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17731 if (NULL == pWdaParams)
17732 {
17733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17734 "%s: VOS MEM Alloc Failure", __func__);
17735 VOS_ASSERT(0);
17736 return VOS_STATUS_E_NOMEM;
17737 }
17738 pWdaParams->pWdaContext = pWDA;
17739 pWdaParams->wdaMsgParam = wdaRequest;
17740 pWdaParams->wdaWdiApiMsgParam = NULL;
17741
17742 status = WDI_EXTScanStopReq((void *)wdaRequest,
17743 (WDI_EXTScanStopRspCb)WDA_EXTScanStopRspCallback,
17744 (void *)pWdaParams);
17745 if (IS_WDI_STATUS_FAILURE(status))
17746 {
17747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17748 "Failure to request. Free all the memory " );
17749 vos_mem_free(pWdaParams->wdaMsgParam);
17750 vos_mem_free(pWdaParams);
17751 }
17752 return CONVERT_WDI2VOS_STATUS(status);
17753}
17754
17755/*==========================================================================
17756 FUNCTION WDA_ProcessEXTScanGetCachedResultsReq
17757
17758 DESCRIPTION
17759 API to send EXTScan Get Cached Results Request to WDI
17760
17761 PARAMETERS
17762 pWDA: Pointer to WDA context
17763 wdaRequest: Pointer to EXTScan req parameters
17764===========================================================================*/
17765VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
17766 tSirEXTScanGetCachedResultsReqParams *wdaRequest)
17767{
17768 WDI_Status status = WDI_STATUS_SUCCESS;
17769 tWDA_ReqParams *pWdaParams;
17770
17771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17772 "%s: ", __func__);
17773 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17774 if (NULL == pWdaParams)
17775 {
17776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17777 "%s: VOS MEM Alloc Failure", __func__);
17778 VOS_ASSERT(0);
17779 return VOS_STATUS_E_NOMEM;
17780 }
17781 pWdaParams->pWdaContext = pWDA;
17782 pWdaParams->wdaMsgParam = wdaRequest;
17783 pWdaParams->wdaWdiApiMsgParam = NULL;
17784
17785 status = WDI_EXTScanGetCachedResultsReq((void *)wdaRequest,
17786 (WDI_EXTScanGetCachedResultsRspCb)WDA_EXTScanGetCachedResultsRspCallback,
17787 (void *)pWdaParams);
17788 if (IS_WDI_STATUS_FAILURE(status))
17789 {
17790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17791 "Failure to request. Free all the memory " );
17792 vos_mem_free(pWdaParams->wdaMsgParam);
17793 vos_mem_free(pWdaParams);
17794 }
17795 return CONVERT_WDI2VOS_STATUS(status);
17796}
17797
17798/*==========================================================================
17799 FUNCTION WDA_ProcessEXTScanGetCapabilitiesReq
17800
17801 DESCRIPTION
17802 API to send EXTScan Get Capabilities Request to WDI
17803
17804 PARAMETERS
17805 pWDA: Pointer to WDA context
17806 wdaRequest: Pointer to EXTScan req parameters
17807===========================================================================*/
17808VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
17809 tSirGetEXTScanCapabilitiesReqParams *wdaRequest)
17810{
17811 WDI_Status status = WDI_STATUS_SUCCESS;
17812 tWDA_ReqParams *pWdaParams;
17813
17814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17815 "%s:", __func__);
17816 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17817 if (NULL == pWdaParams)
17818 {
17819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17820 "%s: VOS MEM Alloc Failure", __func__);
17821 VOS_ASSERT(0);
17822 return VOS_STATUS_E_NOMEM;
17823 }
17824 pWdaParams->pWdaContext = pWDA;
17825 pWdaParams->wdaMsgParam = wdaRequest;
17826 pWdaParams->wdaWdiApiMsgParam = NULL;
17827
17828 status = WDI_EXTScanGetCapabilitiesReq((void *)wdaRequest,
17829 (WDI_EXTScanGetCapabilitiesRspCb)WDA_EXTScanGetCapabilitiesRspCallback,
17830 (void *)pWdaParams);
17831 if (IS_WDI_STATUS_FAILURE(status))
17832 {
17833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17834 "Failure to request. Free all the memory " );
17835 vos_mem_free(pWdaParams->wdaMsgParam);
17836 vos_mem_free(pWdaParams);
17837 }
17838 return CONVERT_WDI2VOS_STATUS(status);
17839}
17840
17841/*==========================================================================
17842 FUNCTION WDA_ProcessEXTScanSetBSSIDHotlistReq
17843
17844 DESCRIPTION
17845 API to send Set BSSID Hotlist Request to WDI
17846
17847 PARAMETERS
17848 pWDA: Pointer to WDA context
17849 wdaRequest: Pointer to EXTScan req parameters
17850===========================================================================*/
17851VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
17852 tSirEXTScanSetBssidHotListReqParams *wdaRequest)
17853{
17854 WDI_Status status = WDI_STATUS_SUCCESS;
17855 tWDA_ReqParams *pWdaParams;
17856
17857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17858 "%s: ", __func__);
17859 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17860 if (NULL == pWdaParams)
17861 {
17862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17863 "%s: VOS MEM Alloc Failure", __func__);
17864 VOS_ASSERT(0);
17865 return VOS_STATUS_E_NOMEM;
17866 }
17867 pWdaParams->pWdaContext = pWDA;
17868 pWdaParams->wdaMsgParam = wdaRequest;
17869 pWdaParams->wdaWdiApiMsgParam = NULL;
17870
17871 status = WDI_EXTScanSetBSSIDHotlistReq((void *)wdaRequest,
17872 (WDI_EXTScanSetBSSIDHotlistRspCb)WDA_EXTScanSetBSSIDHotlistRspCallback,
17873 (void *)pWdaParams);
17874 if (IS_WDI_STATUS_FAILURE(status))
17875 {
17876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17877 "Failure to request. Free all the memory " );
17878 vos_mem_free(pWdaParams->wdaMsgParam);
17879 vos_mem_free(pWdaParams);
17880 }
17881 return CONVERT_WDI2VOS_STATUS(status);
17882}
17883
17884/*==========================================================================
17885 FUNCTION WDA_ProcessEXTScanReSetBSSIDHotlistReq
17886
17887 DESCRIPTION
17888 API to send Reset BSSID Hotlist Request to WDI
17889
17890 PARAMETERS
17891 pWDA: Pointer to WDA context
17892 wdaRequest: Pointer to EXTScan req parameters
17893===========================================================================*/
17894VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
17895 tSirEXTScanResetBssidHotlistReqParams *wdaRequest)
17896{
17897 WDI_Status status = WDI_STATUS_SUCCESS;
17898 tWDA_ReqParams *pWdaParams;
17899
17900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17901 "%s:", __func__);
17902 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17903 if (NULL == pWdaParams)
17904 {
17905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17906 "%s: VOS MEM Alloc Failure", __func__);
17907 VOS_ASSERT(0);
17908 return VOS_STATUS_E_NOMEM;
17909 }
17910 pWdaParams->pWdaContext = pWDA;
17911 pWdaParams->wdaMsgParam = wdaRequest;
17912 pWdaParams->wdaWdiApiMsgParam = NULL;
17913
17914 status = WDI_EXTScanResetBSSIDHotlistReq((void *)wdaRequest,
17915 (WDI_EXTScanResetBSSIDHotlistRspCb)WDA_EXTScanResetBSSIDHotlistRspCallback,
17916 (void *)pWdaParams);
17917 if (IS_WDI_STATUS_FAILURE(status))
17918 {
17919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17920 "Failure to request. Free all the memory " );
17921 vos_mem_free(pWdaParams->wdaMsgParam);
17922 vos_mem_free(pWdaParams);
17923 }
17924 return CONVERT_WDI2VOS_STATUS(status);
17925}
17926
17927/*==========================================================================
17928 FUNCTION WDA_ProcessEXTScanSetSignfRSSIChangeReq
17929
17930 DESCRIPTION
17931 API to send Set Significant RSSI Change Request to WDI
17932
17933 PARAMETERS
17934 pWDA: Pointer to WDA context
17935 wdaRequest: Pointer to EXTScan req parameters
17936===========================================================================*/
17937VOS_STATUS WDA_ProcessEXTScanSetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
17938 tSirEXTScanSetSignificantChangeReqParams *wdaRequest)
17939{
17940 WDI_Status status = WDI_STATUS_SUCCESS;
17941 tWDA_ReqParams *pWdaParams;
17942
17943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17944 "%s: ", __func__);
17945 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17946 if (NULL == pWdaParams)
17947 {
17948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17949 "%s: VOS MEM Alloc Failure", __func__);
17950 VOS_ASSERT(0);
17951 return VOS_STATUS_E_NOMEM;
17952 }
17953 pWdaParams->pWdaContext = pWDA;
17954 pWdaParams->wdaMsgParam = wdaRequest;
17955 pWdaParams->wdaWdiApiMsgParam = NULL;
17956
17957 status = WDI_EXTScanSetSignfRSSIChangeReq((void *)wdaRequest,
17958 (WDI_EXTScanSetSignfRSSIChangeRspCb)WDA_EXTScanSetSignfRSSIChangeRspCallback,
17959 (void *)pWdaParams);
17960 if (IS_WDI_STATUS_FAILURE(status))
17961 {
17962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17963 "Failure to request. Free all the memory " );
17964 vos_mem_free(pWdaParams->wdaMsgParam);
17965 vos_mem_free(pWdaParams);
17966 }
17967 return CONVERT_WDI2VOS_STATUS(status);
17968}
17969
17970/*==========================================================================
17971 FUNCTION WDA_ProcessEXTScanResetSignfRSSIChangeReq
17972
17973 DESCRIPTION
17974 API to send Reset Significant RSSI Change Request to WDI
17975
17976 PARAMETERS
17977 pWDA: Pointer to WDA context
17978 wdaRequest: Pointer to EXTScan req parameters
17979===========================================================================*/
17980VOS_STATUS WDA_ProcessEXTScanResetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
17981 tSirEXTScanResetSignificantChangeReqParams *wdaRequest)
17982{
17983 WDI_Status status = WDI_STATUS_SUCCESS;
17984 tWDA_ReqParams *pWdaParams;
17985
17986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17987 "%s:", __func__);
17988 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17989 if (NULL == pWdaParams)
17990 {
17991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17992 "%s: VOS MEM Alloc Failure", __func__);
17993 VOS_ASSERT(0);
17994 return VOS_STATUS_E_NOMEM;
17995 }
17996 pWdaParams->pWdaContext = pWDA;
17997 pWdaParams->wdaMsgParam = wdaRequest;
17998 pWdaParams->wdaWdiApiMsgParam = NULL;
17999
18000 status = WDI_EXTScanResetSignfRSSIChangeReq((void *)wdaRequest,
18001 (WDI_EXTScanResetSignfRSSIChangeRspCb)
18002 WDA_EXTScanResetSignfRSSIChangeRspCallback,
18003 (void *)pWdaParams);
18004 if (IS_WDI_STATUS_FAILURE(status))
18005 {
18006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18007 "Failure to request. Free all the memory " );
18008 vos_mem_free(pWdaParams->wdaMsgParam);
18009 vos_mem_free(pWdaParams);
18010 }
18011 return CONVERT_WDI2VOS_STATUS(status);
18012}
18013#endif /* WLAN_FEATURE_EXTSCAN */
18014
Sunil Duttbd736ed2014-05-26 21:19:41 +053018015#ifdef WLAN_FEATURE_LINK_LAYER_STATS
18016
18017/*==========================================================================
18018 FUNCTION WDA_LLStatsSetRspCallback
18019
18020 DESCRIPTION
18021 API to process set link layer statistics response from FW
18022
18023 PARAMETERS
18024 pRsp: Pointer to set link layer statistics response
18025 pUserData: Pointer to user data
18026
18027 RETURN VALUE
18028 NONE
18029
18030===========================================================================*/
18031void WDA_LLStatsSetRspCallback(void *pEventData, void* pUserData)
18032{
18033 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18034
18035
18036 if (NULL == pWdaParams)
18037 {
18038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18039 "%s: pWdaParams received NULL", __func__);
18040 VOS_ASSERT(0) ;
18041 return ;
18042 }
18043
18044 /* Do not need to send notification to upper layer
18045 * Just free allocated resources */
18046 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18047 {
18048 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18049 }
18050 if (pWdaParams->wdaMsgParam != NULL)
18051 {
18052 vos_mem_free(pWdaParams->wdaMsgParam);
18053 }
18054 vos_mem_free(pWdaParams) ;
18055
18056 return;
18057}
18058
18059/*==========================================================================
18060 FUNCTION WDA_ProcessLLStatsSetReq
18061
18062 DESCRIPTION
18063 API to send Set Link Layer Stats request to WDI
18064
18065 PARAMETERS
18066 pWDA: Pointer to WDA context
18067 wdaRequest: Pointer to set Link Layer Stats req parameters
18068===========================================================================*/
18069VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
18070 tSirLLStatsSetReq *wdaRequest)
18071{
18072 WDI_Status status = WDI_STATUS_SUCCESS;
18073 tWDA_ReqParams *pWdaParams;
18074
18075 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18076 if (NULL == pWdaParams)
18077 {
18078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18079 "%s: VOS MEM Alloc Failure", __func__);
18080 VOS_ASSERT(0);
18081 return VOS_STATUS_E_NOMEM;
18082 }
18083 pWdaParams->pWdaContext = pWDA;
18084 pWdaParams->wdaMsgParam = wdaRequest;
18085 pWdaParams->wdaWdiApiMsgParam = NULL;
18086
18087 status = WDI_LLStatsSetReq((void *)wdaRequest,
18088 (WDI_LLStatsSetRspCb)WDA_LLStatsSetRspCallback,
18089 (void *)pWdaParams);
18090 if (IS_WDI_STATUS_FAILURE(status))
18091 {
18092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18093 "Failure to request. Free all the memory " );
18094 vos_mem_free(pWdaParams->wdaMsgParam);
18095 vos_mem_free(pWdaParams);
18096 }
18097 return CONVERT_WDI2VOS_STATUS(status);
18098}
18099
18100/*==========================================================================
18101 FUNCTION WDA_LLStatsGetRspCallback
18102
18103 DESCRIPTION
18104 API to process get link layer statistics response from FW
18105
18106 PARAMETERS
18107 pRsp: Pointer to get link layer statistics response
18108 pUserData: Pointer to user data
18109
18110 RETURN VALUE
18111 NONE
18112
18113===========================================================================*/
18114void WDA_LLStatsGetRspCallback(void *pEventData, void* pUserData)
18115{
18116 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18117
18118 if (NULL == pWdaParams)
18119 {
18120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18121 "%s: pWdaParams received NULL", __func__);
18122 VOS_ASSERT(0) ;
18123 return ;
18124 }
18125
18126 /* Do not need to send notification to upper layer
18127 * Just free allocated resources */
18128 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18129 {
18130 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18131 }
18132 if (pWdaParams->wdaMsgParam != NULL)
18133 {
18134 vos_mem_free(pWdaParams->wdaMsgParam);
18135 }
18136 vos_mem_free(pWdaParams) ;
18137
18138 return;
18139}
18140
18141/*==========================================================================
18142 FUNCTION WDA_ProcessLLStatsGetReq
18143
18144 DESCRIPTION
18145 API to send Get Link Layer Stats request to WDI
18146
18147 PARAMETERS
18148 pWDA: Pointer to WDA context
18149 wdaRequest: Pointer to get Link Layer Stats req parameters
18150===========================================================================*/
18151VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
18152 tSirLLStatsGetReq *wdaRequest)
18153{
18154 WDI_Status status = WDI_STATUS_SUCCESS;
18155 tWDA_ReqParams *pWdaParams;
18156
18157 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18158 if (NULL == pWdaParams)
18159 {
18160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18161 "%s: VOS MEM Alloc Failure", __func__);
18162 VOS_ASSERT(0);
18163 return VOS_STATUS_E_NOMEM;
18164 }
18165 pWdaParams->pWdaContext = pWDA;
18166 pWdaParams->wdaMsgParam = wdaRequest;
18167 pWdaParams->wdaWdiApiMsgParam = NULL;
18168
18169 status = WDI_LLStatsGetReq((void *) wdaRequest,
18170 (WDI_LLStatsGetRspCb)WDA_LLStatsGetRspCallback,
18171 (void *)pWdaParams);
18172 if (IS_WDI_STATUS_FAILURE(status))
18173 {
18174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18175 "Failure to request. Free all the memory " );
18176 vos_mem_free(pWdaParams->wdaMsgParam);
18177 vos_mem_free(pWdaParams);
18178 }
18179 return CONVERT_WDI2VOS_STATUS(status);
18180}
18181
18182/*==========================================================================
18183 FUNCTION WDA_LLStatsClearRspCallback
18184
18185 DESCRIPTION
18186 API to process clear link layer statistics response from FW
18187
18188 PARAMETERS
18189 pRsp: Pointer to clear link layer statistics response
18190 pUserData: Pointer to user data
18191
18192 RETURN VALUE
18193 NONE
18194
18195===========================================================================*/
18196void WDA_LLStatsClearRspCallback(void *pEventData, void* pUserData)
18197{
18198 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18199
18200
18201 if (NULL == pWdaParams)
18202 {
18203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18204 "%s: pWdaParams received NULL", __func__);
18205 VOS_ASSERT(0) ;
18206 return ;
18207 }
18208 /* Do not need to send notification to upper layer
18209 * Just free allocated resources */
18210 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18211 {
18212 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18213 }
18214 if (pWdaParams->wdaMsgParam != NULL)
18215 {
18216 vos_mem_free(pWdaParams->wdaMsgParam);
18217 }
18218 vos_mem_free(pWdaParams) ;
18219 return;
18220}
18221
18222/*==========================================================================
18223 FUNCTION WDA_ProcessLLStatsClearReq
18224
18225 DESCRIPTION
18226 API to send Clear Link Layer Stats request to WDI
18227
18228 PARAMETERS
18229 pWDA: Pointer to WDA context
18230 wdaRequest: Pointer to earLink Layer Stats req
18231===========================================================================*/
18232VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
18233 tSirLLStatsClearReq *wdaRequest)
18234{
18235 WDI_Status status = WDI_STATUS_SUCCESS;
18236 tWDA_ReqParams *pWdaParams;
18237
18238 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18239 if (NULL == pWdaParams)
18240 {
18241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18242 "%s: VOS MEM Alloc Failure", __func__);
18243 VOS_ASSERT(0);
18244 return VOS_STATUS_E_NOMEM;
18245 }
18246 pWdaParams->pWdaContext = pWDA;
18247 pWdaParams->wdaMsgParam = wdaRequest;
18248 pWdaParams->wdaWdiApiMsgParam = NULL;
18249
18250 status = WDI_LLStatsClearReq((void *) wdaRequest,
18251 (WDI_LLStatsClearRspCb)WDA_LLStatsClearRspCallback,
18252 (void *)pWdaParams);
18253 if (IS_WDI_STATUS_FAILURE(status))
18254 {
18255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18256 "Failure to request. Free all the memory " );
18257 vos_mem_free(pWdaParams->wdaMsgParam);
18258 vos_mem_free(pWdaParams);
18259 }
18260 return CONVERT_WDI2VOS_STATUS(status);
18261}
18262
18263#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +053018264
Abhishek Singh85b74712014-10-08 11:38:19 +053018265void WDA_FWStatsGetRspCallback(WDI_Status status,void *fwStatsResp,void *pUserData)
18266{
18267 tSirFWStatsInfo *fwStatsinfo = (tSirFWStatsInfo *)pUserData;
18268
18269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18270 "<------ %s " ,__func__);
18271 if (NULL == fwStatsinfo)
18272 {
18273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18274 "%s: pWdaParams received NULL", __func__);
18275 VOS_ASSERT(0);
18276 return;
18277 }
18278
18279 if(fwStatsinfo->callback)
18280 fwStatsinfo->callback(status, fwStatsResp, fwStatsinfo->data);
18281
18282 vos_mem_free(pUserData);
18283 return;
18284}
18285
18286
18287v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
18288 tSirFWStatsGetReq *pData)
18289{
18290
18291 WDI_Status wdiStatus;
18292 tSirFWStatsInfo *fwStatsinfo;
18293
18294 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18295 "------> %s" , __func__);
18296
18297 fwStatsinfo =
18298 (tSirFWStatsInfo *)vos_mem_malloc(sizeof(tSirFWStatsInfo));
18299 if (NULL == fwStatsinfo)
18300 {
18301 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18302 "%s: VOS MEM Alloc Failure", __func__);
18303 VOS_ASSERT(0);
18304 vos_mem_free(pData);
18305 return;
18306 }
18307
18308 fwStatsinfo->callback = (tSirFWStatsCallback)(pData->callback);
18309 fwStatsinfo->data = pData->data;
18310
18311 wdiStatus = WDI_FWStatsGetReq(fwStatsinfo,
18312 WDA_FWStatsGetRspCallback,
18313 pData->stats);
18314 if (WDI_STATUS_PENDING == wdiStatus)
18315 {
18316 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18317 "Pending received for %s:%d ", __func__, __LINE__);
18318 }
18319 else if (WDI_STATUS_SUCCESS != wdiStatus)
18320 {
18321 if (fwStatsinfo->callback)
18322 {
18323 fwStatsinfo->callback(WDI_STATUS_E_FAILURE, NULL ,fwStatsinfo->data);
18324 }
18325 vos_mem_free(fwStatsinfo);
18326 }
18327 vos_mem_free(pData);
18328}
18329
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053018330/*==========================================================================
18331 FUNCTION WDA_EncryptMsgRspCallback
18332
18333 DESCRIPTION
18334 API to send Encrypt message response to HDD
18335
18336 PARAMETERS
18337 pEventData: Response from FW
18338 pUserData: Data sent to firmware as part of request
18339===========================================================================*/
18340void WDA_EncryptMsgRspCallback(WDI_Status status, void *pEventData,
18341 void* pUserData)
18342{
18343 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18344 tWDA_CbContext *pWDA = NULL;
18345 tpAniSirGlobal pMac;
18346 vos_msg_t vosMsg;
18347 tpSirEncryptedDataRspParams pEncRspParams;
18348 tpSetEncryptedDataRspParams pEncryptedDataRsp;
18349
18350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18351 FL("%s:"), __func__);
18352 if (NULL == pWdaParams)
18353 {
18354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18355 FL("%s: pWdaParams received NULL"), __func__);
18356 VOS_ASSERT(0);
18357 return;
18358 }
18359
18360 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
18361
18362 if (NULL == pWDA)
18363 {
18364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18365 FL("%s: pWDA received NULL"), __func__);
18366 VOS_ASSERT(0);
18367 goto error;
18368 }
18369
18370 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18371 if (NULL == pMac)
18372 {
18373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18374 FL("%s:pMac is NULL"), __func__);
18375 VOS_ASSERT(0);
18376 goto error;
18377 }
18378
18379 pEncryptedDataRsp = (tpSetEncryptedDataRspParams) pEventData;
18380
18381 pEncRspParams = vos_mem_malloc(sizeof(tSirEncryptedDataRspParams));
18382 if (NULL == pEncRspParams)
18383 {
18384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18385 FL("%s: VOS MEM Alloc Failure"), __func__);
18386 VOS_ASSERT(0);
18387 goto error;
18388 }
18389
18390 /* Message Header */
18391 pEncRspParams->mesgType = eWNI_SME_ENCRYPT_MSG_RSP;
18392 pEncRspParams->mesgLen = sizeof(tSirEncryptedDataRspParams);
18393 pEncRspParams->encryptedDataRsp.encryptedPayload.length =
18394 pEncryptedDataRsp->encryptedPayload.length;
18395 vos_mem_copy(pEncRspParams->encryptedDataRsp.encryptedPayload.data,
18396 pEncryptedDataRsp->encryptedPayload.data,
18397 pEncryptedDataRsp->encryptedPayload.length);
18398
18399 /* VOS message wrapper */
18400 vosMsg.type = eWNI_SME_ENCRYPT_MSG_RSP;
18401 vosMsg.bodyptr = (void *)pEncRspParams;
18402 vosMsg.bodyval = 0;
18403
18404 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
18405 {
18406 /* free the mem */
18407 vos_mem_free((v_VOID_t *) pEncRspParams);
18408 }
18409
18410error:
18411
18412 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18413 {
18414 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18415 }
18416 if (pWdaParams->wdaMsgParam != NULL)
18417 {
18418 vos_mem_free(pWdaParams->wdaMsgParam);
18419 }
18420 vos_mem_free(pWdaParams) ;
18421
18422 return;
18423}
18424/*==========================================================================
18425 FUNCTION WDA_ProcessEncryptMsgReq
18426
18427 DESCRIPTION
18428 API to send Encrypt message Request to WDI
18429
18430 PARAMETERS
18431 pWDA: Pointer to WDA context
18432 wdaRequest: Pointer to Encrypt_msg req parameters
18433===========================================================================*/
18434VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
18435 u8 *wdaRequest)
18436{
18437 WDI_Status status = WDI_STATUS_SUCCESS;
18438 tWDA_ReqParams *pWdaParams;
18439
18440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18441 FL("%s: "), __func__);
18442 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18443 if (NULL == pWdaParams)
18444 {
18445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18446 FL("%s: VOS MEM Alloc Failure"), __func__);
18447 VOS_ASSERT(0);
18448 return VOS_STATUS_E_NOMEM;
18449 }
18450 pWdaParams->pWdaContext = pWDA;
18451 pWdaParams->wdaMsgParam = wdaRequest;
18452 pWdaParams->wdaWdiApiMsgParam = NULL;
18453
18454 status = WDI_EncryptMsgReq((void *)wdaRequest,
18455 (WDI_EncryptMsgRspCb)WDA_EncryptMsgRspCallback,
18456 (void *)pWdaParams);
18457 if (IS_WDI_STATUS_FAILURE(status))
18458 {
18459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18460 FL("Failure to request. Free all the memory " ));
18461 vos_mem_free(pWdaParams->wdaMsgParam);
18462 vos_mem_free(pWdaParams);
18463 }
18464 return CONVERT_WDI2VOS_STATUS(status);
18465}