blob: 364836cf89c7d749523ae346829a2a5aa20b91c6 [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Kiet Lam1ed83fc2014-02-19 01:15:45 -08002 * Copyright (c) 2012-2014 The Linux Foundation. All rights reserved.
3 *
4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5 *
6 *
7 * Permission to use, copy, modify, and/or distribute this software for
8 * any purpose with or without fee is hereby granted, provided that the
9 * above copyright notice and this permission notice appear in all
10 * copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
13 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
14 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
15 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 * PERFORMANCE OF THIS SOFTWARE.
20 */
21
22/*
Kiet Lama7f454d2014-07-24 12:04:06 -070023 * This file was originally distributed by Qualcomm Atheros, Inc.
24 * under proprietary terms before Copyright ownership was assigned
25 * to the Linux Foundation.
Kiet Lam1ed83fc2014-02-19 01:15:45 -080026 */
27
Jeff Johnson295189b2012-06-20 16:38:30 -070028
Kiet Lama7f454d2014-07-24 12:04:06 -070029
30
Jeff Johnson295189b2012-06-20 16:38:30 -070031/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070032 W L A N _ Q C T _ WDA . C
Jeff Johnson295189b2012-06-20 16:38:30 -070033 OVERVIEW:
Jeff Johnson295189b2012-06-20 16:38:30 -070034 This software unit holds the implementation of the WLAN Transport Layer.
Jeff Johnson295189b2012-06-20 16:38:30 -070035 The functions externalized by this module are to be called ONLY by other
36 WLAN modules that properly register with the Transport Layer initially.
Jeff Johnson295189b2012-06-20 16:38:30 -070037 DEPENDENCIES:
Jeff Johnson295189b2012-06-20 16:38:30 -070038 Are listed for each API below.
39
Jeff Johnson295189b2012-06-20 16:38:30 -070040 Copyright (c) 2010-2011 QUALCOMM Incorporated.
41 All Rights Reserved.
42 Qualcomm Confidential and Proprietary
43===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070044/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070045 EDIT HISTORY FOR FILE
46
Jeff Johnson295189b2012-06-20 16:38:30 -070047 This section contains comments describing changes made to the module.
48 Notice that changes are listed in reverse chronological order.
49
Jeff Johnson295189b2012-06-20 16:38:30 -070050 $Header$$DateTime$$Author$
51
Jeff Johnson295189b2012-06-20 16:38:30 -070052 when who what, where, why
53---------- --- -------------------------------------------------
5410/05/2011 haparna Adding support for Keep Alive Feature
552010-12-30 smiryala UMAC convergence changes
562010-08-19 adwivedi WLAN DAL AL(WDA) layer for Prima
57===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070058#include "vos_mq.h"
59#include "vos_api.h"
60#include "vos_packet.h"
61#include "vos_nvitem.h"
62#include "sirApi.h"
63#include "wlan_qct_pal_packet.h"
Mihir Shete40a55652014-03-02 14:14:47 +053064#include "wlan_qct_pal_device.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070065#include "wlan_qct_wda.h"
66#include "wlan_qct_wda_msg.h"
67#include "wlan_qct_wdi_cfg.h"
68#include "wlan_qct_wdi.h"
69#include "wlan_qct_wdi_ds.h"
70#include "wlan_hal_cfg.h"
71/**********************/
72#include "wniApi.h"
73#include "cfgApi.h"
74#include "limApi.h"
75#include "wlan_qct_tl.h"
76#include "wlan_qct_tli_ba.h"
77#include "limUtils.h"
78#include "btcApi.h"
79#include "vos_sched.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070080#include "pttMsgApi.h"
81#include "wlan_qct_sys.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070082/* Used MACRO's */
83/* Get WDA context from vOSS module */
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080084#define WDA_2_4_GHZ_MAX_FREQ 3000
Jeff Johnson295189b2012-06-20 16:38:30 -070085#define VOS_GET_WDA_CTXT(a) vos_get_context(VOS_MODULE_ID_WDA, a)
86#define VOS_GET_MAC_CTXT(a) vos_get_context(VOS_MODULE_ID_PE, a)
Jeff Johnson295189b2012-06-20 16:38:30 -070087#define WDA_BA_TX_FRM_THRESHOLD (5)
Jeff Johnson295189b2012-06-20 16:38:30 -070088#define CONVERT_WDI2SIR_STATUS(x) \
89 ((WDI_STATUS_SUCCESS != (x)) ? eSIR_FAILURE : eSIR_SUCCESS)
90
91#define IS_WDI_STATUS_FAILURE(status) \
92 ((WDI_STATUS_SUCCESS != (status)) && (WDI_STATUS_PENDING != (status)))
Jeff Johnson295189b2012-06-20 16:38:30 -070093#define CONVERT_WDI2VOS_STATUS(x) \
94 ((IS_WDI_STATUS_FAILURE(x)) ? VOS_STATUS_E_FAILURE : VOS_STATUS_SUCCESS)
95
96/* macro's for acessing TL API/data structures */
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070097#define WDA_TL_GET_STA_STATE(a, b, c) WLANTL_GetSTAState(a, b, c)
Jeff Johnson295189b2012-06-20 16:38:30 -070098#define WDA_TL_GET_TX_PKTCOUNT(a, b, c, d) WLANTL_GetTxPktCount(a, b, c, d)
Jeff Johnson295189b2012-06-20 16:38:30 -070099#define WDA_GET_BA_TXFLAG(a, b, c) \
100 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) & (1 << (c)))
101
102#define WDA_SET_BA_TXFLAG(a, b, c) \
103 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) |= (1 << (c)))
104
105#define WDA_CLEAR_BA_TXFLAG(a, b, c) \
106 (((a)->wdaStaInfo[b].ucUseBaBitmap) &= ~(1 << c))
Jeff Johnson295189b2012-06-20 16:38:30 -0700107#define WDA_TL_BA_SESSION_ADD(a, b, c, d, e, f, g) \
108 WLANTL_BaSessionAdd(a, b, c, d, e, f, g)
Jeff Johnson295189b2012-06-20 16:38:30 -0700109/* timer related Macros */
110#define WDA_CREATE_TIMER(a, b, c, d, e, f, g) \
111 tx_timer_create(a, b, c, d, e, f, g)
112#define WDA_START_TIMER(a) tx_timer_activate(a)
113#define WDA_STOP_TIMER(a) tx_timer_deactivate(a)
114#define WDA_DESTROY_TIMER(a) tx_timer_delete(a)
Jeff Johnson32d95a32012-09-10 13:15:23 -0700115#define WDA_WDI_START_TIMEOUT (WDI_RESPONSE_TIMEOUT + 5000)
Jeff Johnson295189b2012-06-20 16:38:30 -0700116
117#define WDA_LAST_POLLED_THRESHOLD(a, curSta, tid) \
118 ((a)->wdaStaInfo[curSta].framesTxed[tid] + WDA_BA_TX_FRM_THRESHOLD)
Jeff Johnson295189b2012-06-20 16:38:30 -0700119#define WDA_BA_MAX_WINSIZE (64)
Jeff Johnson295189b2012-06-20 16:38:30 -0700120#define WDA_INVALID_KEY_INDEX 0xFF
Jeff Johnson295189b2012-06-20 16:38:30 -0700121#define WDA_NUM_PWR_SAVE_CFG 11
Jeff Johnson295189b2012-06-20 16:38:30 -0700122#define WDA_TX_COMPLETE_TIME_OUT_VALUE 1000
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800123#define WDA_TRAFFIC_STATS_TIME_OUT_VALUE 1000
Jeff Johnson295189b2012-06-20 16:38:30 -0700124
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700125#define WDA_MAX_RETRIES_TILL_RING_EMPTY 1000 /* MAX 10000 msec = 10 seconds wait */
Jeff Johnson295189b2012-06-20 16:38:30 -0700126
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700127#define WDA_WAIT_MSEC_TILL_RING_EMPTY 10 /* 10 msec wait per cycle */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700128#define WDA_IS_NULL_MAC_ADDRESS(mac_addr) \
129 ((mac_addr[0] == 0x00) && (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) &&\
130 (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) && (mac_addr[3] == 0x00))
131
132#define WDA_MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
133#define WDA_MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x"
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -0800134#define WDA_DUMPCMD_WAIT_TIMEOUT 10000
135
Jeff Johnson295189b2012-06-20 16:38:30 -0700136/* extern declarations */
137extern void vos_WDAComplete_cback(v_PVOID_t pVosContext);
Hoonki Lee9af07cf2013-04-24 01:21:58 -0700138extern wpt_uint8 WDI_GetActiveSessionsCount (void *pWDICtx, wpt_macAddr macBSSID, wpt_boolean skipBSSID);
139
Jeff Johnson295189b2012-06-20 16:38:30 -0700140/* forward declarations */
141void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
142 void *pBodyptr, tANI_U32 bodyVal) ;
143VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
144 WDI_StartReqParamsType *wdiStartParams ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700145VOS_STATUS WDA_wdiCompleteCB(v_PVOID_t pVosContext) ;
146VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams);
147
148extern v_BOOL_t sys_validateStaConfig( void *pImage, unsigned long cbFile,
149 void **ppStaConfig, v_SIZE_t *pcbStaConfig ) ;
Sachin Ahujaa4b33a32014-06-18 13:22:00 +0530150void processCfgDownloadReq(tpAniSirGlobal pMac) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700151void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
152 WDI_ConfigBSSReqInfoType *wdiBssParams, tAddBssParams *wdaBssParams) ;
153void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
154 WDI_ConfigStaReqInfoType *wdiStaParams, tAddStaParams *wdaStaParams) ;
155void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
156 void* pUserData ) ;
157static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA) ;
158static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA);
159void WDA_BaCheckActivity(tWDA_CbContext *pWDA) ;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800160void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700161void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams, void* pUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -0700162#ifdef WLAN_FEATURE_VOWIFI_11R
163VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA, tAggrAddTsParams *pAggrAddTsReqParams);
164#endif /* WLAN_FEATURE_VOWIFI_11R */
165
Jeff Johnson295189b2012-06-20 16:38:30 -0700166void WDA_TimerHandler(v_VOID_t *pWDA, tANI_U32 timerInfo) ;
167void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pContext) ;
168VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700169#ifdef FEATURE_WLAN_SCAN_PNO
170static VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA, tSirPNOScanReq *pPNOScanReqParams);
171static VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA, tSirSetRSSIFilterReq* pRssiFilterParams);
172static VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA, tSirUpdateScanParams *pUpdateScanParams);
173#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700174#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -0700175VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,tSirRoamOffloadScanReq *pRoamOffloadScanReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700176void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData);
177void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType);
178void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType);
179#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700180#ifdef WLAN_FEATURE_PACKET_FILTERING
181static VOS_STATUS WDA_Process8023MulticastListReq (
182 tWDA_CbContext *pWDA,
183 tSirRcvFltMcAddrList *pRcvFltMcAddrLis
184 );
185static VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (
186 tWDA_CbContext *pWDA,
187 tSirRcvPktFilterCfgType *pRcvPktFilterCfg
188 );
189static VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (
190 tWDA_CbContext *pWDA,
191 tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp
192 );
193static VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (
194 tWDA_CbContext *pWDA,
195 tSirRcvFltPktClearParam *pRcvFltPktClearParam
196 );
197#endif // WLAN_FEATURE_PACKET_FILTERING
Jeff Johnson295189b2012-06-20 16:38:30 -0700198VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA, tSirSetPowerParamsReq *pPowerParams);
Jeff Johnson295189b2012-06-20 16:38:30 -0700199static VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
200 tpTxControlParams pTxCtrlParam);
Jeff Johnson295189b2012-06-20 16:38:30 -0700201VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
202 v_U8_t *pDefaultKeyId,
203 v_U8_t *pNumKeys,
204 WDI_KeysType *pWdiKeys );
205
206#ifdef WLAN_FEATURE_GTK_OFFLOAD
207static VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA, tpSirGtkOffloadParams pGtkOffloadParams);
208static VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA, tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp);
209#endif // WLAN_FEATURE_GTK_OFFLOAD
210
c_hpothu92367912014-05-01 15:18:17 +0530211v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
212 tSirBcnMissRateReq *pData);
213
Jeff Johnson295189b2012-06-20 16:38:30 -0700214VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
215 tAniSetTmLevelReq *setTmLevelReq);
Mohit Khanna4a70d262012-09-11 16:30:12 -0700216#ifdef WLAN_FEATURE_11AC
217VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
218 tUpdateVHTOpMode *pData);
219#endif
Leo Chang9056f462013-08-01 19:21:11 -0700220
221#ifdef FEATURE_WLAN_LPHB
222VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
223 tSirLPHBReq *pData);
224#endif /* FEATURE_WLAN_LPHB */
Sunil Duttbd736ed2014-05-26 21:19:41 +0530225
Dino Mycle41bdc942014-06-10 11:30:24 +0530226#ifdef WLAN_FEATURE_EXTSCAN
227VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
228 tSirEXTScanStartReqParams *wdaRequest);
229VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
230 tSirEXTScanStopReqParams *wdaRequest);
231VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
232 tSirEXTScanGetCachedResultsReqParams *wdaRequest);
233VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
234 tSirGetEXTScanCapabilitiesReqParams *wdaRequest);
235VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
236 tSirEXTScanSetBssidHotListReqParams *wdaRequest);
237VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
238 tSirEXTScanResetBssidHotlistReqParams *wdaRequest);
239VOS_STATUS WDA_ProcessEXTScanSetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
240 tSirEXTScanSetSignificantChangeReqParams *wdaRequest);
241VOS_STATUS WDA_ProcessEXTScanResetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
242 tSirEXTScanResetSignificantChangeReqParams *wdaRequest);
243#endif /* WLAN_FEATURE_EXTSCAN */
244
Sunil Duttbd736ed2014-05-26 21:19:41 +0530245#ifdef WLAN_FEATURE_LINK_LAYER_STATS
246VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
247 tSirLLStatsSetReq *wdaRequest);
248
249VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
250 tSirLLStatsGetReq *wdaRequest);
251
252VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
253 tSirLLStatsClearReq *wdaRequest);
254#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +0530255
256v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
257 tSirFWStatsGetReq *wdaRequest);
258
Srinivas Dasari4dae48f2014-11-26 21:14:16 +0530259VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
260 u8 *wdaRequest);
261
Jeff Johnson295189b2012-06-20 16:38:30 -0700262/*
263 * FUNCTION: WDA_open
264 * Allocate the WDA context
265 */
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530266VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t devHandle,
Jeff Johnson295189b2012-06-20 16:38:30 -0700267 tMacOpenParameters *pMacParams )
268{
269 tWDA_CbContext *wdaContext;
270 VOS_STATUS status;
271 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700272 /* Allocate WDA context */
273 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
274 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
275 if(!VOS_IS_STATUS_SUCCESS(status))
276 {
277 return VOS_STATUS_E_NOMEM;
278 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700279 /*__asm int 3;*/
280 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
281
282 /* Initialize data structures */
283 wdaContext->pVosContext = pVosContext;
284 wdaContext->wdaState = WDA_INIT_STATE;
285 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
286
287 /* Initialize WDA-WDI synchronization event */
288 status = vos_event_init(&wdaContext->wdaWdiEvent);
289 if(!VOS_IS_STATUS_SUCCESS(status))
290 {
291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800292 "WDI Sync Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800293 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700294 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700295 /* Init Frame transfer event */
296 status = vos_event_init(&wdaContext->txFrameEvent);
297 if(!VOS_IS_STATUS_SUCCESS(status))
298 {
299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800300 "VOS Mgmt Frame Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800301 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700302 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700303 status = vos_event_init(&wdaContext->suspendDataTxEvent);
304 if(!VOS_IS_STATUS_SUCCESS(status))
305 {
306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800307 "VOS suspend data tx Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800308 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700309 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700310 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
311 if(!VOS_IS_STATUS_SUCCESS(status))
312 {
313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800314 "VOS wait On Wdi Ind Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800315 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700316 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700317 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700318 wdaContext->driverMode = pMacParams->driverType;
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530319 if(WDI_STATUS_SUCCESS != WDI_Init(devHandle, &wdaContext->pWdiContext,
Jeff Johnson295189b2012-06-20 16:38:30 -0700320 &wdiDevCapability, pMacParams->driverType))
321 {
322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
323 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800324 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700325 }
326 else
327 {
328 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
329 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
330 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700331 /* update max STA in WDA used for BA */
332 wdaContext->wdaMaxSta = pMacParams->maxStation;
333 /* store the frameTransRequired flag in wdaContext, to send this to HAL
334 * in WDA_Start
335 */
336 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
337 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700338 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800339
340error:
341 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
342 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700343}
344
Jeff Johnson295189b2012-06-20 16:38:30 -0700345/*
346 * FUNCTION: WDA_preStart
347 * Trigger DAL-AL to start CFG download
348 */
349VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
350{
351 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
352 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700353 /*
354 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
355 */
356 wdaMsg.type = WNI_CFG_DNLD_REQ ;
357 wdaMsg.bodyptr = NULL;
358 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700359 /* post the message.. */
360 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
361 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
362 {
363 vosStatus = VOS_STATUS_E_BADMSG;
364 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700365 return( vosStatus );
366}
Jeff Johnson295189b2012-06-20 16:38:30 -0700367/*
368 * FUNCTION: WDA_wdiStartCallback
369 * Once WDI_Start is finished, WDI start callback will be called by WDI
370 * to indicate completion of WDI_Start.
371 */
372void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
373 void *pVosContext)
374{
375 tWDA_CbContext *wdaContext;
376 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700377 if (NULL == pVosContext)
378 {
379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700380 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700381 return;
382 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700383 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
384 if (NULL == wdaContext)
385 {
386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700387 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700388 return;
389 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700390 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
391 {
392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700393 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700394 }
395 else
396 {
397 wdaContext->wdaState = WDA_START_STATE;
398 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700399 /* extract and save version information from the Start Response */
400 wdaContext->wcnssWlanCompiledVersion.major =
401 wdiRspParams->wlanCompiledVersion.major;
402 wdaContext->wcnssWlanCompiledVersion.minor =
403 wdiRspParams->wlanCompiledVersion.minor;
404 wdaContext->wcnssWlanCompiledVersion.version =
405 wdiRspParams->wlanCompiledVersion.version;
406 wdaContext->wcnssWlanCompiledVersion.revision =
407 wdiRspParams->wlanCompiledVersion.revision;
408 wdaContext->wcnssWlanReportedVersion.major =
409 wdiRspParams->wlanReportedVersion.major;
410 wdaContext->wcnssWlanReportedVersion.minor =
411 wdiRspParams->wlanReportedVersion.minor;
412 wdaContext->wcnssWlanReportedVersion.version =
413 wdiRspParams->wlanReportedVersion.version;
414 wdaContext->wcnssWlanReportedVersion.revision =
415 wdiRspParams->wlanReportedVersion.revision;
416 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
417 wdiRspParams->wcnssSoftwareVersion,
418 sizeof(wdaContext->wcnssSoftwareVersionString));
419 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
420 wdiRspParams->wcnssHardwareVersion,
421 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700422 /* Notify WDA_start that WDI_Start has completed */
423 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700424 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700425 {
426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700427 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700428 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700429 return;
430}
431
Jeff Johnson295189b2012-06-20 16:38:30 -0700432/*
433 * FUNCTION: WDA_start
434 * Prepare TLV configuration and call WDI_Start.
435 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700436VOS_STATUS WDA_start(v_PVOID_t pVosContext)
437{
438 tWDA_CbContext *wdaContext;
439 VOS_STATUS status;
440 WDI_Status wdiStatus;
441 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700442 if (NULL == pVosContext)
443 {
444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700445 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700446 return VOS_STATUS_E_FAILURE;
447 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700448 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
449 if (NULL == wdaContext)
450 {
451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700452 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700453 return VOS_STATUS_E_FAILURE;
454 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700455 /* Non-FTM mode, WDA status for START must be INIT
456 * FTM mode, WDA Status for START can be INIT or STOP */
457 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
458 (WDA_STOP_STATE != wdaContext->wdaState) )
459 {
460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
461 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700462 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700463 return VOS_STATUS_E_FAILURE;
464 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700465 /* initialize the wdiStartParam. Note that we can create this on
466 the stack since we won't exit until WDI_Start() completes or
467 times out */
468 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700469 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700470 /* prepare the config TLV for the WDI */
471 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
472 if ( !VOS_IS_STATUS_SUCCESS(status) )
473 {
474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700475 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700476 return VOS_STATUS_E_FAILURE;
477 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700478 /* note from here onwards if an error occurs we must
479 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700480 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
481 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
482 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700483 /* initialize the WDA-WDI synchronization event */
484 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700485 /* call WDI start */
486 wdiStatus = WDI_Start(&wdiStartParam,
487 (WDI_StartRspCb)WDA_wdiStartCallback,
488 (v_VOID_t *)pVosContext);
489 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
490 {
491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700492 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700493 vos_mem_free(wdiStartParam.pConfigBuffer);
494 return VOS_STATUS_E_FAILURE;
495 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700496 /* wait for WDI start to invoke our callback */
497 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
498 WDA_WDI_START_TIMEOUT );
499 if ( !VOS_IS_STATUS_SUCCESS(status) )
500 {
501 if ( VOS_STATUS_E_TIMEOUT == status )
502 {
503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700504 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700505 }
506 else
507 {
508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
509 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700510 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700511 }
512 vos_mem_free(wdiStartParam.pConfigBuffer);
Siddharth Bhalbea38ad2014-10-12 14:10:52 +0530513 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700514 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700515 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700516 /* we no longer need the config TLV */
517 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700518 /* if we are not in the START state then WDI_Start() failed */
519 if (WDA_START_STATE != wdaContext->wdaState)
520 {
521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700522 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700523 return VOS_STATUS_E_FAILURE;
524 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700525 /* FTM mode does not need to monitor BA activity */
526 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
527 {
528 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800529 if(VOS_STATUS_SUCCESS == status)
530 {
531 wdaContext->wdaTimersCreated = VOS_TRUE;
532 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700533 }
Leo Chang9d76f622013-08-23 16:34:52 -0700534 else
535 {
536 vos_event_init(&wdaContext->ftmStopDoneEvent);
537 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700538 return status;
539}
540
Jeff Johnson295189b2012-06-20 16:38:30 -0700541/*
542 * FUNCTION: WDA_prepareConfigTLV
543 * Function to prepare CFG for DAL(WDA)
544 */
545VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
546 WDI_StartReqParamsType *wdiStartParams )
547{
548 /* get pMac to acess CFG data base */
549 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
550 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
551 tHalCfg *tlvStruct = NULL ;
552 tANI_U8 *tlvStructStart = NULL ;
553 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
554 v_PVOID_t *configParam;
555 tANI_U32 configParamSize;
556 tANI_U32 *configDataValue;
557 WDI_WlanVersionType wcnssCompiledApiVersion;
Wilson Tsaof8b37942013-09-06 10:49:00 -0700558 tANI_U8 i;
559
Jeff Johnson295189b2012-06-20 16:38:30 -0700560 if ((NULL == pMac)||(NULL == wdaContext))
561 {
562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700563 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700564 VOS_ASSERT(0);
565 return VOS_STATUS_E_FAILURE;
566 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700567 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
568 WNI_CFG_STA_ID_LEN +
569 WNI_CFG_EDCA_WME_ACBK_LEN +
570 WNI_CFG_EDCA_WME_ACBE_LEN +
571 WNI_CFG_EDCA_WME_ACVI_LEN +
572 WNI_CFG_EDCA_WME_ACVO_LEN +
573 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700574 /* malloc memory for all configs in one shot */
575 configParam = vos_mem_malloc(configParamSize);
576
577 if(NULL == configParam )
578 {
579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700580 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700581 VOS_ASSERT(0) ;
582 return VOS_STATUS_E_NOMEM;
583 }
584 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700585 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700586 tlvStruct = (tHalCfg *)configParam;
587 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700588 /* TODO: Remove Later */
589 /* QWLAN_HAL_CFG_STA_ID */
590 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
591 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
592 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
593 eSIR_SUCCESS)
594 {
595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
596 "Failed to get value for WNI_CFG_STA_ID");
597 goto handle_failure;
598 }
599 tlvStruct->length = strLength ;
600 /* calculate the pad bytes to have the CFG in aligned format */
601 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
602 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700603 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
604 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700605 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
606 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
607 tlvStruct->length = sizeof(tANI_U32);
608 configDataValue = (tANI_U32 *)(tlvStruct + 1);
609 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
610 != eSIR_SUCCESS)
611 {
612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
613 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
614 goto handle_failure;
615 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700616 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
617 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700618 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
619 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
620 tlvStruct->length = sizeof(tANI_U32);
621 configDataValue = (tANI_U32 *)(tlvStruct + 1);
622 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
623 eSIR_SUCCESS)
624 {
625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
626 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
627 goto handle_failure;
628 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700629 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
630 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700631 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
632 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
633 tlvStruct->length = sizeof(tANI_U32);
634 configDataValue = (tANI_U32 *)(tlvStruct + 1);
635 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
636 != eSIR_SUCCESS)
637 {
638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
639 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
640 goto handle_failure;
641 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700642 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
643 + sizeof(tHalCfg) + tlvStruct->length)) ;
644
645 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
646 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
647 tlvStruct->length = sizeof(tANI_U32);
648 configDataValue = (tANI_U32 *)(tlvStruct + 1);
649 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
650 configDataValue ) != eSIR_SUCCESS)
651 {
652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
653 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
654 goto handle_failure;
655 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700656 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
657 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700658 /* QWLAN_HAL_CFG_CAL_PERIOD */
659 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
660 tlvStruct->length = sizeof(tANI_U32);
661 configDataValue = (tANI_U32 *)(tlvStruct + 1);
662 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
663 != eSIR_SUCCESS)
664 {
665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
666 "Failed to get value for WNI_CFG_CAL_PERIOD");
667 goto handle_failure;
668 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700669 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
670 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700671 /* QWLAN_HAL_CFG_CAL_CONTROL */
672 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
673 tlvStruct->length = sizeof(tANI_U32);
674 configDataValue = (tANI_U32 *)(tlvStruct + 1);
675 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
676 != eSIR_SUCCESS)
677 {
678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
679 "Failed to get value for WNI_CFG_CAL_CONTROL");
680 goto handle_failure;
681 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700682 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
683 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700684 /* QWLAN_HAL_CFG_PROXIMITY */
685 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
686 tlvStruct->length = sizeof(tANI_U32);
687 configDataValue = (tANI_U32 *)(tlvStruct + 1);
688 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
689 != eSIR_SUCCESS)
690 {
691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
692 "Failed to get value for WNI_CFG_PROXIMITY");
693 goto handle_failure;
694 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700695 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
696 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700697 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
698 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
699 tlvStruct->length = sizeof(tANI_U32);
700 configDataValue = (tANI_U32 *)(tlvStruct + 1);
701 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
702 != eSIR_SUCCESS)
703 {
704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
705 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
706 goto handle_failure;
707 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700708 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
709 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700710 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
711 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
712 tlvStruct->length = sizeof(tANI_U32);
713 configDataValue = (tANI_U32 *)(tlvStruct + 1);
714 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
715 eSIR_SUCCESS)
716 {
717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
718 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
719 goto handle_failure;
720 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700721 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
722 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700723 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
724 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
725 tlvStruct->length = sizeof(tANI_U32);
726 configDataValue = (tANI_U32 *)(tlvStruct + 1);
727 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
728 configDataValue ) != eSIR_SUCCESS)
729 {
730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
731 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
732 goto handle_failure;
733 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700734 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
735 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700736 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
737 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
738 tlvStruct->length = sizeof(tANI_U32);
739 configDataValue = (tANI_U32 *)(tlvStruct + 1);
740 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
741 eSIR_SUCCESS)
742 {
743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
744 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
745 goto handle_failure;
746 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700747 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
748 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700749 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
750 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
751 tlvStruct->length = sizeof(tANI_U32);
752 configDataValue = (tANI_U32 *)(tlvStruct + 1);
753 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
754 eSIR_SUCCESS)
755 {
756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
757 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
758 goto handle_failure;
759 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700760 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
761 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700762 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
763 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
764 tlvStruct->length = sizeof(tANI_U32);
765 configDataValue = (tANI_U32 *)(tlvStruct + 1);
766 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
767 eSIR_SUCCESS)
768 {
769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
770 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
771 goto handle_failure;
772 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700773 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
774 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700775 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
776 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
777 tlvStruct->length = sizeof(tANI_U32);
778 configDataValue = (tANI_U32 *)(tlvStruct + 1);
779 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
780 configDataValue ) != eSIR_SUCCESS)
781 {
782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
783 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
784 goto handle_failure;
785 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700786 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
787 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700788 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
789 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
790 tlvStruct->length = sizeof(tANI_U32);
791 configDataValue = (tANI_U32 *)(tlvStruct + 1);
792 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
793 configDataValue ) != eSIR_SUCCESS)
794 {
795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
796 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
797 goto handle_failure;
798 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700799 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
800 + sizeof(tHalCfg) + tlvStruct->length));
801
802 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
803 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
804 tlvStruct->length = sizeof(tANI_U32);
805 configDataValue = (tANI_U32 *)(tlvStruct + 1);
806 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
807 configDataValue ) != eSIR_SUCCESS)
808 {
809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
810 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
811 goto handle_failure;
812 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700813 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
814 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700815 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
816 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
817 tlvStruct->length = sizeof(tANI_U32);
818 configDataValue = (tANI_U32 *)(tlvStruct + 1);
819 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
820 configDataValue ) != eSIR_SUCCESS)
821 {
822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
823 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
824 goto handle_failure;
825 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700826 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
827 + sizeof(tHalCfg) + tlvStruct->length));
828
829 /* QWLAN_HAL_CFG_FIXED_RATE */
830 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
831 tlvStruct->length = sizeof(tANI_U32);
832 configDataValue = (tANI_U32 *)(tlvStruct + 1);
833 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
834 != eSIR_SUCCESS)
835 {
836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
837 "Failed to get value for WNI_CFG_FIXED_RATE");
838 goto handle_failure;
839 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700840 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
841 + sizeof(tHalCfg) + tlvStruct->length));
842
843 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
844 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
845 tlvStruct->length = sizeof(tANI_U32);
846 configDataValue = (tANI_U32 *)(tlvStruct + 1);
847 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
848 != eSIR_SUCCESS)
849 {
850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
851 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
852 goto handle_failure;
853 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700854 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
855 + sizeof(tHalCfg) + tlvStruct->length));
856
857 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
858 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
859 tlvStruct->length = sizeof(tANI_U32);
860 configDataValue = (tANI_U32 *)(tlvStruct + 1);
861 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
862 configDataValue ) != eSIR_SUCCESS)
863 {
864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
865 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
866 goto handle_failure;
867 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700868 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
869 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700870 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
871 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
872 tlvStruct->length = sizeof(tANI_U32);
873 configDataValue = (tANI_U32 *)(tlvStruct + 1);
874 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
875 configDataValue ) != eSIR_SUCCESS)
876 {
877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
878 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
879 goto handle_failure;
880 }
881 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
882 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700883 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
884 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
885 tlvStruct->length = sizeof(tANI_U32);
886 configDataValue = (tANI_U32 *)(tlvStruct + 1);
887 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
888 configDataValue ) != eSIR_SUCCESS)
889 {
890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
891 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
892 goto handle_failure;
893 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700894 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
895 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700896 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
897 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
898 tlvStruct->length = sizeof(tANI_U32);
899 configDataValue = (tANI_U32 *)(tlvStruct + 1);
900 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
901 configDataValue ) != eSIR_SUCCESS)
902 {
903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
904 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
905 goto handle_failure;
906 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700907 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
908 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700909 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
910 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
911 tlvStruct->length = sizeof(tANI_U32);
912 configDataValue = (tANI_U32 *)(tlvStruct + 1);
913 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
914 configDataValue ) != eSIR_SUCCESS)
915 {
916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
917 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
918 goto handle_failure;
919 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700920 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
921 + sizeof(tHalCfg) + tlvStruct->length);
922
Jeff Johnson295189b2012-06-20 16:38:30 -0700923 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
924 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
925 tlvStruct->length = sizeof(tANI_U32);
926 configDataValue = (tANI_U32 *)(tlvStruct + 1);
927 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
928 configDataValue ) != eSIR_SUCCESS)
929 {
930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
931 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
932 goto handle_failure;
933 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700934 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
935 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700936 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
937 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
938 tlvStruct->length = sizeof(tANI_U32);
939 configDataValue = (tANI_U32 *)(tlvStruct + 1);
940 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
941 configDataValue ) != eSIR_SUCCESS)
942 {
943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
944 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
945 goto handle_failure;
946 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700947 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
948 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700949 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
950 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
951 tlvStruct->length = sizeof(tANI_U32);
952 configDataValue = (tANI_U32 *)(tlvStruct + 1);
953 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
954 eSIR_SUCCESS)
955 {
956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
957 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
958 goto handle_failure;
959 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700960 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
961 + sizeof(tHalCfg) + tlvStruct->length);
962
963 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
964 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
965 tlvStruct->length = sizeof(tANI_U32);
966 configDataValue = (tANI_U32 *)(tlvStruct + 1);
967 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
968 configDataValue ) != eSIR_SUCCESS)
969 {
970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
971 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
972 goto handle_failure;
973 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700974 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
975 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700976 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
977 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
978 tlvStruct->length = sizeof(tANI_U32);
979 configDataValue = (tANI_U32 *)(tlvStruct + 1);
980 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
981 configDataValue ) != eSIR_SUCCESS)
982 {
983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
984 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
985 goto handle_failure;
986 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700987 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
988 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700989 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
990 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
991 tlvStruct->length = sizeof(tANI_U32);
992 configDataValue = (tANI_U32 *)(tlvStruct + 1);
993 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
994 configDataValue ) != eSIR_SUCCESS)
995 {
996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
997 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
998 goto handle_failure;
999 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001000 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1001 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001002 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
1003 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
1004 tlvStruct->length = sizeof(tANI_U32);
1005 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1006 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
1007 configDataValue ) != eSIR_SUCCESS)
1008 {
1009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1010 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
1011 goto handle_failure;
1012 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001013 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1014 + sizeof(tHalCfg) + tlvStruct->length);
1015
1016 /* QWLAN_HAL_CFG_STATS_PERIOD */
1017 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
1018 tlvStruct->length = sizeof(tANI_U32);
1019 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1020 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
1021 eSIR_SUCCESS)
1022 {
1023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1024 "Failed to get value for WNI_CFG_STATS_PERIOD");
1025 goto handle_failure;
1026 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001027 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1028 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001029 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
1030 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
1031 tlvStruct->length = sizeof(tANI_U32);
1032 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1033 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
1034 eSIR_SUCCESS)
1035 {
1036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1037 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
1038 goto handle_failure;
1039 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001040 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1041 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001042 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1043 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1044 tlvStruct->length = sizeof(tANI_U32);
1045 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1046 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1047 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001048 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1049 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001050 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1051 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1052 tlvStruct->length = sizeof(tANI_U32);
1053 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1054 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1055 != eSIR_SUCCESS)
1056 {
1057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1058 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1059 goto handle_failure;
1060 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001061 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1062 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001063 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1064 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1065 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1066 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1067 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1068 &strLength) != eSIR_SUCCESS)
1069 {
1070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1071 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1072 goto handle_failure;
1073 }
1074 tlvStruct->length = strLength;
1075 /* calculate the pad bytes to have the CFG in aligned format */
1076 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1077 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001078 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1079 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001080 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1081 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1082 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1083 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1084 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1085 &strLength) != eSIR_SUCCESS)
1086 {
1087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1088 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1089 goto handle_failure;
1090 }
1091 tlvStruct->length = strLength;
1092 /* calculate the pad bytes to have the CFG in aligned format */
1093 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1094 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001095 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1096 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001097 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1098 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1099 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1100 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1101 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1102 &strLength) != eSIR_SUCCESS)
1103 {
1104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1105 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1106 goto handle_failure;
1107 }
1108 tlvStruct->length = strLength;
1109 /* calculate the pad bytes to have the CFG in aligned format */
1110 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1111 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001112 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1113 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001114 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1115 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1116 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1117 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1118 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1119 &strLength) != eSIR_SUCCESS)
1120 {
1121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1122 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1123 goto handle_failure;
1124 }
1125 tlvStruct->length = strLength;
1126 /* calculate the pad bytes to have the CFG in aligned format */
1127 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1128 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001129 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1130 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001131 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1132 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1133 tlvStruct->length = sizeof(tANI_U32);
1134 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1135 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1136 != eSIR_SUCCESS)
1137 {
1138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1139 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1140 goto handle_failure;
1141 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001142 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1143 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001144 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1145 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1146 tlvStruct->length = sizeof(tANI_U32);
1147 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1148 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1149 != eSIR_SUCCESS)
1150 {
1151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1152 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1153 goto handle_failure;
1154 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001155 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1156 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001157 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1158 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1159 tlvStruct->length = sizeof(tANI_U32);
1160 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1161 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1162 != eSIR_SUCCESS)
1163 {
1164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1165 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1166 goto handle_failure;
1167 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001168 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1169 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001170 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1171 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1172 tlvStruct->length = sizeof(tANI_U32);
1173 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1174 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1175 != eSIR_SUCCESS)
1176 {
1177 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1178 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1179 goto handle_failure;
1180 }
1181 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1182 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001183 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1184 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1185 tlvStruct->length = sizeof(tANI_U32);
1186 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1187 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1188 != eSIR_SUCCESS)
1189 {
1190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1191 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1192 goto handle_failure;
1193 }
1194 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1195 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001196 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1197 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1198 tlvStruct->length = sizeof(tANI_U32);
1199 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1200 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1201 != eSIR_SUCCESS)
1202 {
1203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1204 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1205 goto handle_failure;
1206 }
1207 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1208 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001209 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1210 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1211 tlvStruct->length = sizeof(tANI_U32);
1212 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1213 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1214 != eSIR_SUCCESS)
1215 {
1216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1217 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1218 goto handle_failure;
1219 }
1220 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1221 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001222 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1223 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1224 tlvStruct->length = sizeof(tANI_U32);
1225 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1226 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1227 != eSIR_SUCCESS)
1228 {
1229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1230 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1231 goto handle_failure;
1232 }
1233 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1234 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001235 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1236 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1237 tlvStruct->length = sizeof(tANI_U32);
1238 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1239 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1240 != eSIR_SUCCESS)
1241 {
1242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1243 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1244 goto handle_failure;
1245 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001246 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1247 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001248 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1249 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1250 tlvStruct->length = sizeof(tANI_U32);
1251 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1252 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1253 != eSIR_SUCCESS)
1254 {
1255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1256 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1257 goto handle_failure;
1258 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001259 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1260 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001261 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1262 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1263 tlvStruct->length = sizeof(tANI_U32);
1264 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1265 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1266 != eSIR_SUCCESS)
1267 {
1268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1269 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1270 goto handle_failure;
1271 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001272 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1273 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001274 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1275 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1276 * into FW, so the parameters are added here.
1277 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001278 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1279 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1280 tlvStruct->length = sizeof(tANI_U32);
1281 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1282 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1283 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1284 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001285 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1286 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1287 tlvStruct->length = sizeof(tANI_U32);
1288 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1289 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1290 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1291 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001292 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1293 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1294 tlvStruct->length = sizeof(tANI_U32);
1295 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1296 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1297 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1298 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001299 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1300 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1301 tlvStruct->length = sizeof(tANI_U32);
1302 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1303 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1304 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1305 + sizeof(tHalCfg) + tlvStruct->length) ;
1306
1307 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1308 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1309 tlvStruct->length = sizeof(tANI_U32);
1310 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1311 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1312 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1313 + sizeof(tHalCfg) + tlvStruct->length) ;
1314
1315 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1316 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1317 tlvStruct->length = sizeof(tANI_U32);
1318 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1319 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1320 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1321 + sizeof(tHalCfg) + tlvStruct->length) ;
1322
1323 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1324 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1325 tlvStruct->length = sizeof(tANI_U32);
1326 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1327 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1328 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1329 + sizeof(tHalCfg) + tlvStruct->length) ;
1330
1331 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1332 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1333 tlvStruct->length = sizeof(tANI_U32);
1334 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1335 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1336 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1337 + sizeof(tHalCfg) + tlvStruct->length) ;
1338
1339 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1340 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1341 tlvStruct->length = sizeof(tANI_U32);
1342 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1343 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1344 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1345 + sizeof(tHalCfg) + tlvStruct->length) ;
1346
1347 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1348 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1349 tlvStruct->length = sizeof(tANI_U32);
1350 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1351 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1352 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1353 + sizeof(tHalCfg) + tlvStruct->length) ;
1354
1355 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1356 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1357 tlvStruct->length = sizeof(tANI_U32);
1358 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1359 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1360 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1361 + sizeof(tHalCfg) + tlvStruct->length) ;
1362
1363 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1364 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1365 tlvStruct->length = sizeof(tANI_U32);
1366 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1367 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1368 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1369 + sizeof(tHalCfg) + tlvStruct->length) ;
1370
1371 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1372 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1373 tlvStruct->length = sizeof(tANI_U32);
1374 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1375 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1376 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1377 + sizeof(tHalCfg) + tlvStruct->length) ;
1378
1379 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1380 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1381 tlvStruct->length = sizeof(tANI_U32);
1382 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1383 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1384 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1385 + sizeof(tHalCfg) + tlvStruct->length) ;
1386
1387 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1388 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1389 tlvStruct->length = sizeof(tANI_U32);
1390 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1391 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1392 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1393 + sizeof(tHalCfg) + tlvStruct->length) ;
1394
1395 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1396 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1397 tlvStruct->length = sizeof(tANI_U32);
1398 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1399 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1400 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1401 + sizeof(tHalCfg) + tlvStruct->length) ;
1402
Wilson Tsaof8b37942013-09-06 10:49:00 -07001403 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM; i++)
1404 {
1405 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WAN_FREQ */
1406 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ + i*4;
1407 tlvStruct->length = sizeof(tANI_U32);
1408 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1409 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWANFreq[i];
1410 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1411 + sizeof(tHalCfg) + tlvStruct->length) ;
1412
1413 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WLAN_FREQ */
1414 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ + i*4;
1415 tlvStruct->length = sizeof(tANI_U32);
1416 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1417 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWLANFreq[i];
1418 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1419 + sizeof(tHalCfg) + tlvStruct->length) ;
1420
1421 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG */
1422 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG + i*4;
1423 tlvStruct->length = sizeof(tANI_U32);
1424 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1425 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig[i];
1426 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1427 + sizeof(tHalCfg) + tlvStruct->length) ;
1428
1429 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG2 */
1430 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 + i*4;
1431 tlvStruct->length = sizeof(tANI_U32);
1432 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1433 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig2[i];
1434 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1435 + sizeof(tHalCfg) + tlvStruct->length) ;
1436 }
1437
1438 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF */
1439 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF ;
1440 tlvStruct->length = sizeof(tANI_U32);
1441 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1442 *configDataValue = pMac->btc.btcConfig.mwsCoexModemBackoff;
1443 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1444 + sizeof(tHalCfg) + tlvStruct->length) ;
1445
1446 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG; i++)
1447 {
1448 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_CONFIGX */
1449 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_CONFIG1 + i;
1450 tlvStruct->length = sizeof(tANI_U32);
1451 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1452 *configDataValue = pMac->btc.btcConfig.mwsCoexConfig[i];
1453 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1454 + sizeof(tHalCfg) + tlvStruct->length) ;
1455 }
1456
1457 /* [COEX] QWLAN_HAL_CFG_SAR_POWER_BACKOFF */
1458 tlvStruct->type = QWLAN_HAL_CFG_SAR_POWER_BACKOFF ;
1459 tlvStruct->length = sizeof(tANI_U32);
1460 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1461 *configDataValue = pMac->btc.btcConfig.SARPowerBackoff;
1462 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1463 + sizeof(tHalCfg) + tlvStruct->length) ;
1464
Jeff Johnson32d95a32012-09-10 13:15:23 -07001465 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001466 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1467 tlvStruct->length = sizeof(tANI_U32);
1468 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1469 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1470 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1471 wcnssCompiledApiVersion.minor,
1472 wcnssCompiledApiVersion.version,
1473 wcnssCompiledApiVersion.revision);
1474 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1475 + sizeof(tHalCfg) + tlvStruct->length) ;
1476
Jeff Johnsond13512a2012-07-17 11:42:19 -07001477 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1478 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1479 tlvStruct->length = sizeof(tANI_U32);
1480 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1481 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1482 configDataValue ) != eSIR_SUCCESS)
1483 {
1484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1485 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1486 goto handle_failure;
1487 }
1488
1489 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1490 + sizeof(tHalCfg) + tlvStruct->length) ;
1491 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1492 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1493 tlvStruct->length = sizeof(tANI_U32);
1494 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1495 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1496 configDataValue ) != eSIR_SUCCESS)
1497 {
1498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1499 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1500 goto handle_failure;
1501 }
1502
1503 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1504 + sizeof(tHalCfg) + tlvStruct->length) ;
1505
1506 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1507 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1508 tlvStruct->length = sizeof(tANI_U32);
1509 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1510 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1511 != eSIR_SUCCESS)
1512 {
1513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1514 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1515 goto handle_failure;
1516 }
1517
1518 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1519 + sizeof(tHalCfg) + tlvStruct->length) ;
1520
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001521 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1522 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1523 tlvStruct->length = sizeof(tANI_U32);
1524 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1525 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1526 != eSIR_SUCCESS)
1527 {
1528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1529 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1530 goto handle_failure;
1531 }
1532
1533 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1534 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001535#ifdef WLAN_SOFTAP_VSTA_FEATURE
1536 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1537 tlvStruct->length = sizeof(tANI_U32);
1538 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1539 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1540 != eSIR_SUCCESS)
1541 {
1542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1543 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1544 goto handle_failure;
1545 }
1546
1547 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1548 + sizeof(tHalCfg) + tlvStruct->length) ;
1549#endif
1550
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001551 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1552 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1553 tlvStruct->length = sizeof(tANI_U32);
1554 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1555
1556 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1557 != eSIR_SUCCESS)
1558 {
1559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1560 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1561 goto handle_failure;
1562 }
1563
1564 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1565 + sizeof(tHalCfg) + tlvStruct->length) ;
1566
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301567/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1568 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1569 tlvStruct->length = sizeof(tANI_U32);
1570 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1571 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1572 configDataValue ) != eSIR_SUCCESS)
1573 {
1574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1575 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1576 goto handle_failure;
1577 }
1578
1579 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1580 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301581#ifdef FEATURE_WLAN_TDLS
1582 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1583 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1584 tlvStruct->length = sizeof(tANI_U32);
1585 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1586 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1587 configDataValue ) != eSIR_SUCCESS)
1588 {
1589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1590 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1591 goto handle_failure;
1592 }
1593 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1594 + sizeof(tHalCfg) + tlvStruct->length) ;
1595
1596 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1597 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1598 tlvStruct->length = sizeof(tANI_U32);
1599 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1600 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1601 configDataValue ) != eSIR_SUCCESS)
1602 {
1603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1604 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1605 goto handle_failure;
1606 }
1607 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1608 + sizeof(tHalCfg) + tlvStruct->length) ;
1609 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1610 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1611 tlvStruct->length = sizeof(tANI_U32);
1612 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1613 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1614 configDataValue ) != eSIR_SUCCESS)
1615 {
1616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1617 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1618 goto handle_failure;
1619 }
1620 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1621 + sizeof(tHalCfg) + tlvStruct->length) ;
1622 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1623 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1624 tlvStruct->length = sizeof(tANI_U32);
1625 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1626 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1627 configDataValue ) != eSIR_SUCCESS)
1628 {
1629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1630 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1631 goto handle_failure;
1632 }
1633 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1634 + sizeof(tHalCfg) + tlvStruct->length) ;
Naresh Jayaramf73f3762014-02-04 16:13:20 +05301635 /* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */
1636 tlvStruct->type = QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE;
1637 tlvStruct->length = sizeof(tANI_U32);
1638 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1639 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_OFF_CHANNEL_ENABLED,
1640 configDataValue ) != eSIR_SUCCESS)
1641 {
1642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1643 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1644 goto handle_failure;
1645 }
1646 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1647 + sizeof(tHalCfg) + tlvStruct->length) ;
1648
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301649#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301650
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001651 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1652 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1653 tlvStruct->length = sizeof(tANI_U32);
1654 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1655 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1656 configDataValue ) != eSIR_SUCCESS)
1657 {
1658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1659 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1660 goto handle_failure;
1661 }
1662
1663 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1664 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001665
1666 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1667 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1668 tlvStruct->length = sizeof(tANI_U32);
1669 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1670 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1671 != eSIR_SUCCESS)
1672 {
1673 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1674 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1675 goto handle_failure;
1676 }
1677 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1678 + sizeof(tHalCfg) + tlvStruct->length));
1679
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301680 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1681 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1682 tlvStruct->length = sizeof(tANI_U32);
1683 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1684 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1685 configDataValue ) != eSIR_SUCCESS)
1686 {
1687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1688 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1689 goto handle_failure;
1690 }
1691
1692 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1693 + sizeof(tHalCfg) + tlvStruct->length) ;
1694
Madan Mohan Koyyalamudi2558bc92013-08-24 16:54:31 +05301695 /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
1696 tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
1697 tlvStruct->length = sizeof(tANI_U32);
1698 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1699 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
1700 configDataValue ) != eSIR_SUCCESS)
1701 {
1702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1703 "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
1704 goto handle_failure;
1705 }
1706 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1707 + sizeof(tHalCfg) + tlvStruct->length) ;
1708
Kiet Lam4bbd3cb2013-11-07 20:03:49 +05301709 /* QWLAN_HAL_CFG_ATH_DISABLE */
1710 tlvStruct->type = QWLAN_HAL_CFG_ATH_DISABLE ;
1711 tlvStruct->length = sizeof(tANI_U32);
1712 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1713 if(wlan_cfgGetInt(pMac, WNI_CFG_ATH_DISABLE,
1714 configDataValue ) != eSIR_SUCCESS)
1715 {
1716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1717 "Failed to get value for WNI_CFG_ATH_DISABLE");
1718 goto handle_failure;
1719 }
1720 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1721 + sizeof(tHalCfg) + tlvStruct->length) ;
1722
c_hpothu6d7dc922013-12-02 12:36:41 +05301723 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_WLAN_LEN */
1724 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1725 tlvStruct->length = sizeof(tANI_U32);
1726 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1727 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_WLAN_LEN,
1728 configDataValue ) != eSIR_SUCCESS)
1729 {
1730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1731 "Failed to get value for WNI_CFG_BTC_ACTIVE_WLAN_LEN");
1732 goto handle_failure;
1733 }
1734 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1735 + sizeof(tHalCfg) + tlvStruct->length) ;
1736
1737 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1738 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1739 tlvStruct->length = sizeof(tANI_U32);
1740 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1741 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_BT_LEN,
1742 configDataValue ) != eSIR_SUCCESS)
1743 {
1744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1745 "Failed to get value for WNI_CFG_BTC_ACTIVE_BT_LEN");
1746 goto handle_failure;
1747 }
1748 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1749 + sizeof(tHalCfg) + tlvStruct->length) ;
1750
1751 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN */
1752 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1753 tlvStruct->length = sizeof(tANI_U32);
1754 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1755 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN,
1756 configDataValue ) != eSIR_SUCCESS)
1757 {
1758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1759 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN");
1760 goto handle_failure;
1761 }
1762 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1763 + sizeof(tHalCfg) + tlvStruct->length) ;
1764
1765 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1766 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1767 tlvStruct->length = sizeof(tANI_U32);
1768 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1769 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_BT_LEN,
1770 configDataValue ) != eSIR_SUCCESS)
1771 {
1772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1773 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_BT_LEN");
1774 goto handle_failure;
1775 }
1776 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1777 + sizeof(tHalCfg) + tlvStruct->length) ;
1778
AnjaneeDevi Kapparapu50239e32014-01-07 18:09:33 +05301779 /* QWLAN_HAL_CFG_ASD_PROBE_INTERVAL */
1780 tlvStruct->type = QWLAN_HAL_CFG_ASD_PROBE_INTERVAL ;
1781 tlvStruct->length = sizeof(tANI_U32);
1782 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1783 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_PROBE_INTERVAL,
1784 configDataValue ) != eSIR_SUCCESS)
1785 {
1786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1787 "Failed to get value for WNI_CFG_ASD_PROBE_INTERVAL");
1788 goto handle_failure;
1789 }
1790 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1791 + sizeof(tHalCfg) + tlvStruct->length) ;
1792
1793 /* QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD */
1794 tlvStruct->type = QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD ;
1795 tlvStruct->length = sizeof(tANI_U32);
1796 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1797 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_TRIGGER_THRESHOLD,
1798 configDataValue ) != eSIR_SUCCESS)
1799 {
1800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1801 "Failed to get value for WNI_CFG_ASD_TRIGGER_THRESHOLD");
1802 goto handle_failure;
1803 }
1804 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1805 + sizeof(tHalCfg) + tlvStruct->length) ;
1806
1807 /* QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD */
1808 tlvStruct->type = QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD ;
1809 tlvStruct->length = sizeof(tANI_U32);
1810 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1811 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD,
1812 configDataValue ) != eSIR_SUCCESS)
1813 {
1814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1815 "Failed to get value for WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD");
1816 goto handle_failure;
1817 }
1818 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1819 + sizeof(tHalCfg) + tlvStruct->length) ;
1820
Leela Venkata Kiran Kumar Reddy Chirala22c159b2013-12-23 18:19:13 -08001821 /* QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO */
1822 tlvStruct->type = QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO ;
1823 tlvStruct->length = sizeof(tANI_U32);
1824 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1825 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CTS2S_DURING_SCO,
1826 configDataValue ) != eSIR_SUCCESS)
1827 {
1828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1829 "Failed to get value for WNI_CFG_BTC_CTS2S_DURING_SCO");
1830 goto handle_failure;
1831 }
1832 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1833 + sizeof(tHalCfg) + tlvStruct->length) ;
1834
c_hpothu5bd1ae42014-03-07 20:28:22 +05301835 /* QWLAN_HAL_CFG_RA_FILTER_ENABLE */
1836 tlvStruct->type = QWLAN_HAL_CFG_RA_FILTER_ENABLE ;
1837 tlvStruct->length = sizeof(tANI_U32);
1838 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1839
1840 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_FILTER_ENABLE,
1841 configDataValue ) != eSIR_SUCCESS)
1842 {
1843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1844 "Failed to get value for WNI_CFG_RA_FILTER_ENABLE");
1845 goto handle_failure;
1846 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05301847 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1848 + sizeof(tHalCfg) + tlvStruct->length) ;
1849
1850 /* QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL */
1851 tlvStruct->type = QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL ;
1852 tlvStruct->length = sizeof(tANI_U32);
1853 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1854
1855 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_RATE_LIMIT_INTERVAL,
1856 configDataValue ) != eSIR_SUCCESS)
1857 {
1858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1859 "Failed to get value for WNI_CFG_RA_RATE_LIMIT_INTERVAL");
1860 goto handle_failure;
1861 }
c_hpothu2d0f1c42014-04-01 18:38:51 +05301862 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1863 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu5bd1ae42014-03-07 20:28:22 +05301864
c_hpothu2d0f1c42014-04-01 18:38:51 +05301865 /* QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE */
1866 tlvStruct->type = QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE ;
1867 tlvStruct->length = sizeof(tANI_U32);
1868 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1869
1870 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE,
1871 configDataValue ) != eSIR_SUCCESS)
1872 {
1873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1874 "Failed to get value for WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE");
1875 goto handle_failure;
1876 }
1877 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1878 + sizeof(tHalCfg) + tlvStruct->length) ;
1879
1880 /* QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE */
1881 tlvStruct->type = QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE ;
1882 tlvStruct->length = sizeof(tANI_U32);
1883 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1884
1885 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE,
1886 configDataValue ) != eSIR_SUCCESS)
1887 {
1888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1889 "Failed to get value for WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE");
1890 goto handle_failure;
1891 }
1892 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1893 + sizeof(tHalCfg) + tlvStruct->length) ;
1894
1895 /* QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD */
1896 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD ;
1897 tlvStruct->length = sizeof(tANI_U32);
1898 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1899
1900 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD,
1901 configDataValue ) != eSIR_SUCCESS)
1902 {
1903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1904 "Failed to get value for WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD");
1905 goto handle_failure;
1906 }
1907 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1908 + sizeof(tHalCfg) + tlvStruct->length) ;
1909
1910 /* QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD */
1911 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD ;
1912 tlvStruct->length = sizeof(tANI_U32);
1913 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1914
1915 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD,
1916 configDataValue ) != eSIR_SUCCESS)
1917 {
1918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1919 "Failed to get value for WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD");
1920 goto handle_failure;
1921 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05301922 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1923 + sizeof(tHalCfg) + tlvStruct->length) ;
1924
Mihir Shetec34258c2014-07-30 17:50:27 +05301925 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP */
1926 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP ;
1927 tlvStruct->length = sizeof(tANI_U32);
1928 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1929
1930 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_SP,
1931 configDataValue ) != eSIR_SUCCESS)
1932 {
1933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1934 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_SP");
1935 goto handle_failure;
1936 }
1937 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1938 + sizeof(tHalCfg) + tlvStruct->length) ;
1939
1940 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT */
1941 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT ;
1942 tlvStruct->length = sizeof(tANI_U32);
1943 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1944
1945 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT,
1946 configDataValue ) != eSIR_SUCCESS)
1947 {
1948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1949 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT");
1950 goto handle_failure;
1951 }
1952 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1953 + sizeof(tHalCfg) + tlvStruct->length) ;
1954
1955 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT */
1956 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT ;
1957 tlvStruct->length = sizeof(tANI_U32);
1958 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1959
1960 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT,
1961 configDataValue ) != eSIR_SUCCESS)
1962 {
1963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1964 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT");
1965 goto handle_failure;
1966 }
1967 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1968 + sizeof(tHalCfg) + tlvStruct->length) ;
1969
1970 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW */
1971 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW ;
1972 tlvStruct->length = sizeof(tANI_U32);
1973 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1974
1975 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW,
1976 configDataValue ) != eSIR_SUCCESS)
1977 {
1978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1979 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW");
1980 goto handle_failure;
1981 }
1982 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1983 + sizeof(tHalCfg) + tlvStruct->length) ;
1984
1985 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW */
1986 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW ;
1987 tlvStruct->length = sizeof(tANI_U32);
1988 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1989
1990 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW,
1991 configDataValue ) != eSIR_SUCCESS)
1992 {
1993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1994 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW");
1995 goto handle_failure;
1996 }
1997 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1998 + sizeof(tHalCfg) + tlvStruct->length) ;
1999
2000 /* QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE */
2001 tlvStruct->type = QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE ;
2002 tlvStruct->length = sizeof(tANI_U32);
2003 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2004
2005 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE,
2006 configDataValue ) != eSIR_SUCCESS)
2007 {
2008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2009 "Failed to get value for WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE");
2010 goto handle_failure;
2011 }
2012 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2013 + sizeof(tHalCfg) + tlvStruct->length) ;
2014
2015 /* QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS */
2016 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS ;
2017 tlvStruct->length = sizeof(tANI_U32);
2018 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2019
2020 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS,
2021 configDataValue ) != eSIR_SUCCESS)
2022 {
2023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2024 "Failed to get value for WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS");
2025 goto handle_failure;
2026 }
2027 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2028 + sizeof(tHalCfg) + tlvStruct->length) ;
2029
2030 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS */
2031 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS ;
2032 tlvStruct->length = sizeof(tANI_U32);
2033 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2034
2035 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_WMMPS,
2036 configDataValue ) != eSIR_SUCCESS)
2037 {
2038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2039 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_WMMPS");
2040 goto handle_failure;
2041 }
2042 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2043 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu03d961b2014-09-19 16:45:00 +05302044
2045 /* QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE */
2046 tlvStruct->type = QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE ;
2047 tlvStruct->length = sizeof(tANI_U32);
2048 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2049
2050 if (wlan_cfgGetInt(pMac, WNI_CFG_BURST_MODE_BE_TXOP_VALUE,
2051 configDataValue ) != eSIR_SUCCESS)
2052 {
2053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2054 "Failed to get value for WNI_CFG_BURST_MODE_BE_TXOP_VALUE");
2055 goto handle_failure;
2056 }
2057 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2058 + sizeof(tHalCfg) + tlvStruct->length) ;
2059
Deepthi Gowri9025aa62014-11-07 19:45:36 +05302060 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE */
2061 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_RA_START_RATE ;
2062 tlvStruct->length = sizeof(tANI_U32);
2063 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2064
2065 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE,
2066 configDataValue ) != eSIR_SUCCESS)
2067 {
2068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2069 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_RA_START_RATE");
2070 goto handle_failure;
2071 }
2072 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2073 + sizeof(tHalCfg) + tlvStruct->length) ;
2074
2075
Jeff Johnson295189b2012-06-20 16:38:30 -07002076 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002077#ifdef WLAN_DEBUG
2078 {
2079 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07002080 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2081 "****** Dumping CFG TLV ***** ");
2082 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
2083 {
2084 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2085 "%02x %02x %02x %02x %02x %02x %02x %02x",
2086 tlvStructStart[i],
2087 tlvStructStart[i+1],
2088 tlvStructStart[i+2],
2089 tlvStructStart[i+3],
2090 tlvStructStart[i+4],
2091 tlvStructStart[i+5],
2092 tlvStructStart[i+6],
2093 tlvStructStart[i+7]);
2094 }
2095 /* Dump the bytes in the last line*/
2096 for (; i < wdiStartParams->usConfigBufferLen; i++)
2097 {
2098 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2099 "%02x ",tlvStructStart[i]);
2100 }
2101 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2102 "**************************** ");
2103 }
2104#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002105 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002106handle_failure:
2107 vos_mem_free(configParam);
2108 return VOS_STATUS_E_FAILURE;
2109}
Jeff Johnson295189b2012-06-20 16:38:30 -07002110/*
2111 * FUNCTION: WDA_wdiCompleteCB
2112 * call the voss call back function
2113 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002114void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07002115{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002116 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2117 tWDA_CbContext *wdaContext;
2118
2119 if(NULL == pWdaParams)
2120 {
2121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002122 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002123 VOS_ASSERT(0) ;
2124 return ;
2125 }
2126
2127 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
2128
Jeff Johnson295189b2012-06-20 16:38:30 -07002129 if (NULL == wdaContext)
2130 {
2131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002132 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002133 return ;
2134 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002135
Jeff Johnson295189b2012-06-20 16:38:30 -07002136 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002137 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07002138 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002139 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002140 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002141 vos_mem_free(pWdaParams);
2142
Jeff Johnson295189b2012-06-20 16:38:30 -07002143 if(WDI_STATUS_SUCCESS != status)
2144 {
2145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2146 "WDI stop callback returned failure" );
2147 VOS_ASSERT(0) ;
2148 }
2149 else
2150 {
2151 wdaContext->wdaState = WDA_STOP_STATE;
2152 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002153
Leo Chang9d76f622013-08-23 16:34:52 -07002154 /* FTM Driver stop procedure should be synced.
2155 * Stop and Close will happen on same context */
2156 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
2157 {
2158 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
2159 {
2160 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2161 "%s: FTM Stop Event Set Fail", __func__);
2162 VOS_ASSERT(0);
2163 }
2164 }
2165
Jeff Johnson295189b2012-06-20 16:38:30 -07002166 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002167 vos_WDAComplete_cback(wdaContext->pVosContext);
2168
Jeff Johnson295189b2012-06-20 16:38:30 -07002169 return ;
2170}
Jeff Johnson295189b2012-06-20 16:38:30 -07002171/*
2172 * FUNCTION: WDA_stop
2173 * call WDI_stop
2174 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002175VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
2176{
2177 WDI_Status wdiStatus;
2178 VOS_STATUS status = VOS_STATUS_SUCCESS;
2179 WDI_StopReqParamsType *wdiStopReq;
2180 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002181 tWDA_ReqParams *pWdaParams ;
2182
Jeff Johnson295189b2012-06-20 16:38:30 -07002183 if (NULL == pWDA)
2184 {
2185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002186 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002187 VOS_ASSERT(0);
2188 return VOS_STATUS_E_FAILURE;
2189 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002190 if (pWDA->wdiFailed == true)
2191 {
2192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002193 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002194 return VOS_STATUS_E_ALREADY;
2195 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002196
Jeff Johnson295189b2012-06-20 16:38:30 -07002197 /* FTM mode stay START_STATE */
2198 if( (WDA_READY_STATE != pWDA->wdaState) &&
2199 (WDA_INIT_STATE != pWDA->wdaState) &&
2200 (WDA_START_STATE != pWDA->wdaState) )
2201 {
2202 VOS_ASSERT(0);
2203 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002204 wdiStopReq = (WDI_StopReqParamsType *)
2205 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
2206 if(NULL == wdiStopReq)
2207 {
2208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002209 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002210 VOS_ASSERT(0);
2211 return VOS_STATUS_E_NOMEM;
2212 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002213
Jeff Johnson295189b2012-06-20 16:38:30 -07002214 wdiStopReq->wdiStopReason = reason;
2215 wdiStopReq->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002216
2217 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2218 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07002219 {
2220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002221 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002222 VOS_ASSERT(0);
2223 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002224 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07002225 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002226
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002227 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
2228 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07002229 {
2230 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002231 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002232 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002233
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002234 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
2235 pWdaParams->wdaMsgParam = NULL;
2236 pWdaParams->pWdaContext = pWDA;
2237
Jeff Johnson295189b2012-06-20 16:38:30 -07002238 /* call WDI stop */
2239 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002240 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
2241
Jeff Johnson295189b2012-06-20 16:38:30 -07002242 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
2243 {
2244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2245 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002246 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2247 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002248 status = VOS_STATUS_E_FAILURE;
2249 }
Leo Chang9d76f622013-08-23 16:34:52 -07002250
2251 /* FTM Driver stop procedure should be synced.
2252 * Stop and Close will happen on same context */
2253 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
2254 {
2255 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
2256 WDI_RESPONSE_TIMEOUT);
2257 if (status != VOS_STATUS_SUCCESS)
2258 {
2259 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2260 "%s: FTM Stop Timepoout", __func__);
2261 VOS_ASSERT(0);
Leo Chang9d76f622013-08-23 16:34:52 -07002262 }
c_hpothu0d36bc42014-07-03 17:43:45 +05302263 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Leo Chang9d76f622013-08-23 16:34:52 -07002264 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002265 return status;
2266}
Jeff Johnson295189b2012-06-20 16:38:30 -07002267/*
2268 * FUNCTION: WDA_close
2269 * call WDI_close and free the WDA context
2270 */
2271VOS_STATUS WDA_close(v_PVOID_t pVosContext)
2272{
Jeff Johnson43971f52012-07-17 12:26:56 -07002273 VOS_STATUS status = VOS_STATUS_SUCCESS;
2274 WDI_Status wstatus;
2275 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002276 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002277 if (NULL == wdaContext)
2278 {
2279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002280 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002281 return VOS_STATUS_E_FAILURE;
2282 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002283 if((WDA_INIT_STATE != wdaContext->wdaState) &&
2284 (WDA_STOP_STATE != wdaContext->wdaState))
2285 {
2286 VOS_ASSERT(0);
2287 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002288 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07002289 wstatus = WDI_Close();
2290 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07002291 {
2292 status = VOS_STATUS_E_FAILURE;
2293 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002294 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002295 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07002296 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
2297 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002298 {
2299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002300 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002301 status = VOS_STATUS_E_FAILURE;
2302 }
2303
Jeff Johnson43971f52012-07-17 12:26:56 -07002304 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002305 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002306 {
2307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002308 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002309 status = VOS_STATUS_E_FAILURE;
2310 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002311 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002312 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002313 {
2314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002315 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002316 status = VOS_STATUS_E_FAILURE;
2317 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002318 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07002319 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002320 {
2321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002322 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002323 status = VOS_STATUS_E_FAILURE;
2324 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002325 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07002326 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07002327 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07002328 {
2329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2330 "error in WDA close " );
2331 status = VOS_STATUS_E_FAILURE;
2332 }
2333 return status;
2334}
Jeff Johnson295189b2012-06-20 16:38:30 -07002335/*
2336 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
2337 * returns 1 if the compiled version is greater than or equal to the input version
2338 */
2339
2340uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2341{
2342 VOS_STATUS status = VOS_STATUS_SUCCESS;
2343 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2344 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002345 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002346 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
2347 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
2348 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
2349 (compiledVersion.revision >= revision)))
2350 return 1;
2351 else
2352 return 0;
2353}
Jeff Johnson295189b2012-06-20 16:38:30 -07002354/*
2355 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
2356 * returns 1 if the compiled version is greater than or equal to the input version
2357 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002358uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2359{
2360 VOS_STATUS status = VOS_STATUS_SUCCESS;
2361 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2362 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002363 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002364 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
2365 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
2366 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
2367 (reportedVersion.revision >= revision)))
2368 return 1;
2369 else
2370 return 0;
2371}
Jeff Johnson295189b2012-06-20 16:38:30 -07002372/*
2373 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
2374 * Returns the version of the WCNSS WLAN API with which the HOST
2375 * device driver was compiled
2376 */
2377VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
2378 tSirVersionType *pVersion)
2379{
2380 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002381 if ((NULL == pvosGCtx) || (NULL == pVersion))
2382 {
2383 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002384 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002385 VOS_ASSERT(0);
2386 return VOS_STATUS_E_FAILURE;
2387 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002388 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2389 if (NULL == pWDA )
2390 {
2391 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002392 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002393 VOS_ASSERT(0);
2394 return VOS_STATUS_E_FAILURE;
2395 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002396 *pVersion = pWDA->wcnssWlanCompiledVersion;
2397 return VOS_STATUS_SUCCESS;
2398}
Jeff Johnson295189b2012-06-20 16:38:30 -07002399/*
2400 * FUNCTION: WDA_GetWcnssWlanReportedVersion
2401 * Returns the version of the WCNSS WLAN API with which the WCNSS
2402 * device driver was compiled
2403 */
2404VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
2405 tSirVersionType *pVersion)
2406{
2407 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002408 if ((NULL == pvosGCtx) || (NULL == pVersion))
2409 {
2410 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002411 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002412 VOS_ASSERT(0);
2413 return VOS_STATUS_E_FAILURE;
2414 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002415 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2416 if (NULL == pWDA )
2417 {
2418 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002419 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002420 VOS_ASSERT(0);
2421 return VOS_STATUS_E_FAILURE;
2422 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002423 *pVersion = pWDA->wcnssWlanReportedVersion;
2424 return VOS_STATUS_SUCCESS;
2425}
Jeff Johnson295189b2012-06-20 16:38:30 -07002426/*
2427 * FUNCTION: WDA_GetWcnssSoftwareVersion
2428 * Returns the WCNSS Software version string
2429 */
2430VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
2431 tANI_U8 *pVersion,
2432 tANI_U32 versionBufferSize)
2433{
2434 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002435 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002436 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002437 if ((NULL == pvosGCtx) || (NULL == pVersion))
2438 {
2439 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002440 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002441 VOS_ASSERT(0);
2442 return VOS_STATUS_E_FAILURE;
2443 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002444 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2445 if (NULL == pWDA )
2446 {
2447 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002448 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002449 VOS_ASSERT(0);
2450 return VOS_STATUS_E_FAILURE;
2451 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002452 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
2453 return VOS_STATUS_SUCCESS;
2454}
Jeff Johnson295189b2012-06-20 16:38:30 -07002455/*
2456 * FUNCTION: WDA_GetWcnssHardwareVersion
2457 * Returns the WCNSS Hardware version string
2458 */
2459VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
2460 tANI_U8 *pVersion,
2461 tANI_U32 versionBufferSize)
2462{
2463 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002464 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002465 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002466 if ((NULL == pvosGCtx) || (NULL == pVersion))
2467 {
2468 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002469 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002470 VOS_ASSERT(0);
2471 return VOS_STATUS_E_FAILURE;
2472 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002473 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2474 if (NULL == pWDA )
2475 {
2476 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002477 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002478 VOS_ASSERT(0);
2479 return VOS_STATUS_E_FAILURE;
2480 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002481 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
2482 return VOS_STATUS_SUCCESS;
2483}
Jeff Johnson295189b2012-06-20 16:38:30 -07002484/*
2485 * FUNCTION: WDA_WniCfgDnld
2486 * Trigger CFG Download
2487 */
2488VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
2489{
2490 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302491 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnsonab81a082013-04-03 16:00:31 -07002492
Jeff Johnson295189b2012-06-20 16:38:30 -07002493 if (NULL == pMac )
2494 {
2495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002496 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002497 VOS_ASSERT(0);
2498 return VOS_STATUS_E_FAILURE;
2499 }
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302500 processCfgDownloadReq(pMac);
Jeff Johnson295189b2012-06-20 16:38:30 -07002501 return vosStatus;
2502}
Jeff Johnson295189b2012-06-20 16:38:30 -07002503/* -----------------------------------------------------------------
2504 * WDI interface
2505 * -----------------------------------------------------------------
2506 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002507/*
2508 * FUNCTION: WDA_suspendDataTxCallback
2509 * call back function called from TL after suspend Transmission
2510 */
2511VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2512 v_U8_t* ucSTAId,
2513 VOS_STATUS vosStatus)
2514{
2515 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002517 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002518 if (NULL == pWDA )
2519 {
2520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002521 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002522 VOS_ASSERT(0);
2523 return VOS_STATUS_E_FAILURE;
2524 }
2525 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2526 {
2527 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2528 }
2529 else
2530 {
2531 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2532 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002533 /* Trigger the event to bring the WDA TL suspend function to come
2534 * out of wait*/
2535 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2536 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2537 {
2538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002539 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002540 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002541 /* If TL suspended had timedout before this callback was called, resume back
2542 * TL.*/
2543 if (pWDA->txSuspendTimedOut)
2544 {
2545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002546 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07002547 WDA_ResumeDataTx(pWDA);
2548 pWDA->txSuspendTimedOut = FALSE;
2549 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002550 return VOS_STATUS_SUCCESS;
2551}
Jeff Johnson295189b2012-06-20 16:38:30 -07002552/*
2553 * FUNCTION: WDA_suspendDataTx
2554 * Update TL to suspend the data Transmission
2555 */
2556VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2557{
2558 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2559 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002560
2561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002562 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002563 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002564 if (pWDA->txSuspendTimedOut)
2565 {
2566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002567 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07002568 return status;
2569 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002570 /* Reset the event to be not signalled */
2571 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2572 if(!VOS_IS_STATUS_SUCCESS(status))
2573 {
2574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002575 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002576 return VOS_STATUS_E_FAILURE;
2577 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002578 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002579 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002580 WDA_SuspendDataTxCallback);
2581 if(status != VOS_STATUS_SUCCESS)
2582 {
2583 return status;
2584 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002585 /* Wait for the event to be set by the TL, to get the response of
2586 * suspending the TX queues, this event should be set by the Callback
2587 * function called by TL*/
2588 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2589 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2590 if(!VOS_IS_STATUS_SUCCESS(status))
2591 {
2592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2593 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002594 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002595 /* Set this flag to true when TL suspend times out, so that when TL
2596 * suspend eventually happens and calls the callback, TL can be resumed
2597 * right away by looking at this flag when true.*/
2598 pWDA->txSuspendTimedOut = TRUE;
2599 }
2600 else
2601 {
2602 pWDA->txSuspendTimedOut = FALSE;
2603 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002604 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2605 {
2606 status = VOS_STATUS_SUCCESS;
2607 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002608 return status;
2609}
Jeff Johnson295189b2012-06-20 16:38:30 -07002610/*
2611 * FUNCTION: WDA_resumeDataTx
2612 * Update TL to resume the data Transmission
2613 */
2614VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2615{
2616 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002617
2618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002619 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002620
2621 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002622 return status;
2623}
Jeff Johnson295189b2012-06-20 16:38:30 -07002624/*
2625 * FUNCTION: WDA_InitScanReqCallback
2626 * Trigger Init SCAN callback
2627 */
2628void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2629{
2630 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2631 tWDA_CbContext *pWDA;
2632 tInitScanParams *pWDA_ScanParam ;
2633 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002635 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002636 if(NULL == pWdaParams)
2637 {
2638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002639 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002640 VOS_ASSERT(0) ;
2641 return ;
2642 }
2643 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2644 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002645 if(NULL == pWDA_ScanParam)
2646 {
2647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002648 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002649 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002650 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2651 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002652 return ;
2653 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002654 if(WDI_STATUS_SUCCESS != wdiStatus)
2655 {
2656 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002657 if(VOS_STATUS_SUCCESS != status)
2658 {
2659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002660 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002661 }
2662 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002663 /* free WDI command buffer */
2664 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002665 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002666
Jeff Johnson295189b2012-06-20 16:38:30 -07002667
2668 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002669 /* without converting the Status to Failure or Success Just
2670 pass the same status to lim */
2671 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002672 /* send SCAN RSP message back to PE */
2673 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002674 return ;
2675}
2676
2677/*
2678 * FUNCTION: WDA_ProcessInitScanReq
2679 * Trigger Init SCAN in DAL
2680 */
2681VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2682 tInitScanParams *initScanParams)
2683{
2684 WDI_Status status = WDI_STATUS_SUCCESS ;
2685 WDI_InitScanReqParamsType *wdiInitScanParam =
2686 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2687 sizeof(WDI_InitScanReqParamsType)) ;
2688 tWDA_ReqParams *pWdaParams;
2689 tANI_U8 i = 0;
2690
2691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002692 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002693 if(NULL == wdiInitScanParam)
2694 {
2695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002696 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002697 VOS_ASSERT(0);
2698 return VOS_STATUS_E_NOMEM;
2699 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002700 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2701 if(NULL == pWdaParams)
2702 {
2703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002704 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002705 VOS_ASSERT(0);
2706 vos_mem_free(wdiInitScanParam);
2707 return VOS_STATUS_E_NOMEM;
2708 }
2709
2710 /* Copy init Scan params to WDI structure */
2711 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2712 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2713 sizeof(tSirMacAddr)) ;
2714 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2715 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2716 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002717 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2718 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07002719 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2720 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002721 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2722 {
2723 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2724 initScanParams->scanEntry.bssIdx[i] ;
2725 }
2726
2727 /* if Frame length, copy macMgmtHdr or WDI structure */
2728 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2729 {
2730 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2731 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2732 }
2733 wdiInitScanParam->wdiReqStatusCB = NULL ;
2734
Jeff Johnson295189b2012-06-20 16:38:30 -07002735 /* Store Init Req pointer, as this will be used for response */
2736 pWdaParams->pWdaContext = pWDA;
2737 pWdaParams->wdaMsgParam = initScanParams;
2738 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002739 /* first try to suspend TX */
2740 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002741 if(WDI_STATUS_SUCCESS != status)
2742 {
2743 goto handleWdiFailure;
2744 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002745 /* call DAL API to pass init scan request to DAL */
2746 status = WDI_InitScanReq(wdiInitScanParam,
2747 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002748 if(IS_WDI_STATUS_FAILURE(status))
2749 {
2750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2751 "error in WDA Init Scan, Resume Tx " );
2752 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002753 VOS_ASSERT(0) ;
2754
2755 goto handleWdiFailure;
2756 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002757 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002758handleWdiFailure:
2759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2760 "Failure in WDI Api, free all the memory " );
2761 /* free WDI command buffer */
2762 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2763 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002764 /* send Failure to PE */
2765 initScanParams->status = eSIR_FAILURE ;
2766 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002767 return CONVERT_WDI2VOS_STATUS(status) ;
2768}
2769
Jeff Johnson295189b2012-06-20 16:38:30 -07002770/*
2771 * FUNCTION: WDA_StartScanReqCallback
2772 * send Start SCAN RSP back to PE
2773 */
2774void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2775 void* pUserData)
2776{
2777 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2778 tWDA_CbContext *pWDA;
2779 tStartScanParams *pWDA_ScanParam;
2780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002781 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002782 if(NULL == pWdaParams)
2783 {
2784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002785 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002786 VOS_ASSERT(0) ;
2787 return ;
2788 }
2789 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2790 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002791 if(NULL == pWDA_ScanParam)
2792 {
2793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002794 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002795 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002796 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002797 return ;
2798 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002799 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2800 {
2801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002802 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002803 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002804 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002805 return ;
2806 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002807 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2808 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002809
Jeff Johnson295189b2012-06-20 16:38:30 -07002810
2811 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002812 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002813 /* send SCAN RSP message back to PE */
2814 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002815 return ;
2816}
2817
Jeff Johnson295189b2012-06-20 16:38:30 -07002818/*
2819 * FUNCTION: WDA_ProcessStartScanReq
2820 * Trigger start SCAN in WDI
2821 */
2822VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2823 tStartScanParams *startScanParams)
2824{
2825 WDI_Status status = WDI_STATUS_SUCCESS;
2826 WDI_StartScanReqParamsType *wdiStartScanParams =
2827 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2828 sizeof(WDI_StartScanReqParamsType)) ;
2829 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002831 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002832 if(NULL == wdiStartScanParams)
2833 {
2834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002835 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002836 VOS_ASSERT(0);
2837 return VOS_STATUS_E_NOMEM;
2838 }
2839 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2840 if(NULL == pWdaParams)
2841 {
2842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002843 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002844 VOS_ASSERT(0);
2845 vos_mem_free(wdiStartScanParams);
2846 return VOS_STATUS_E_NOMEM;
2847 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002848 /* Copy init Scan params to WDI structure */
2849 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2850 wdiStartScanParams->wdiReqStatusCB = NULL ;
2851
Jeff Johnson295189b2012-06-20 16:38:30 -07002852 /* Store Init Req pointer, as this will be used for response */
2853 /* store Params pass it to WDI */
2854 pWdaParams->pWdaContext = pWDA;
2855 pWdaParams->wdaMsgParam = startScanParams;
2856 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002857 /* call DAL API to pass init scan request to DAL */
2858 status = WDI_StartScanReq(wdiStartScanParams,
2859 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002860 /* failure returned by WDI API */
2861 if(IS_WDI_STATUS_FAILURE(status))
2862 {
2863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2864 "Failure in Start Scan WDI API, free all the memory "
2865 "It should be due to previous abort scan." );
2866 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2867 vos_mem_free(pWdaParams) ;
2868 startScanParams->status = eSIR_FAILURE ;
2869 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2870 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002871 return CONVERT_WDI2VOS_STATUS(status) ;
2872}
Jeff Johnson295189b2012-06-20 16:38:30 -07002873/*
2874 * FUNCTION: WDA_EndScanReqCallback
2875 * END SCAN callback
2876 */
2877void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2878{
2879 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2880 tWDA_CbContext *pWDA;
2881 tEndScanParams *endScanParam;
2882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002883 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002884 if(NULL == pWdaParams)
2885 {
2886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002887 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002888 VOS_ASSERT(0) ;
2889 return ;
2890 }
2891 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2892 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002893 if(NULL == endScanParam)
2894 {
2895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002896 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002897 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002898 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2899 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002900 return ;
2901 }
2902
2903 /* Free WDI command buffer */
2904 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2905 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002906 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002907 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002908 /* send response back to PE */
2909 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2910 return ;
2911}
2912
Jeff Johnson295189b2012-06-20 16:38:30 -07002913/*
2914 * FUNCTION: WDA_ProcessEndScanReq
2915 * Trigger END SCAN in WDI
2916 */
2917VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2918 tEndScanParams *endScanParams)
2919{
2920 WDI_Status status = WDI_STATUS_SUCCESS;
2921 WDI_EndScanReqParamsType *wdiEndScanParams =
2922 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2923 sizeof(WDI_EndScanReqParamsType)) ;
2924 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002926 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002927 if(NULL == wdiEndScanParams)
2928 {
2929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002930 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002931 VOS_ASSERT(0);
2932 return VOS_STATUS_E_NOMEM;
2933 }
2934 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2935 if(NULL == pWdaParams)
2936 {
2937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002938 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002939 VOS_ASSERT(0);
2940 vos_mem_free(wdiEndScanParams);
2941 return VOS_STATUS_E_NOMEM;
2942 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002943 /* Copy init Scan params to WDI structure */
2944 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2945 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002946 /* Store Init Req pointer, as this will be used for response */
2947 /* store Params pass it to WDI */
2948 pWdaParams->pWdaContext = pWDA;
2949 pWdaParams->wdaMsgParam = endScanParams;
2950 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002951 /* call DAL API to pass init scan request to DAL */
2952 status = WDI_EndScanReq(wdiEndScanParams,
2953 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002954 if(IS_WDI_STATUS_FAILURE(status))
2955 {
2956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2957 "Failure in End Scan WDI API, free all the memory "
2958 "It should be due to previous abort scan." );
2959 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2960 vos_mem_free(pWdaParams) ;
2961 endScanParams->status = eSIR_FAILURE ;
2962 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2963 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002964 return CONVERT_WDI2VOS_STATUS(status) ;
2965}
Jeff Johnson295189b2012-06-20 16:38:30 -07002966/*
2967 * FUNCTION: WDA_FinishScanReqCallback
2968 * Trigger Finish SCAN callback
2969 */
2970void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2971{
2972 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2973 tWDA_CbContext *pWDA;
2974 tFinishScanParams *finishScanParam;
2975 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002977 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002978 if(NULL == pWdaParams)
2979 {
2980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002981 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002982 VOS_ASSERT(0) ;
2983 return ;
2984 }
2985
2986 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2987 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002988 if(NULL == finishScanParam)
2989 {
2990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002991 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002992 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002993 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2994 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002995 return ;
2996 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002997 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2998 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002999 /*
3000 * Now Resume TX, if we reached here means, TX is already suspended, we
3001 * have to resume it unconditionaly
3002 */
3003 status = WDA_ResumeDataTx(pWDA) ;
3004
3005 if(VOS_STATUS_SUCCESS != status)
3006 {
3007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003008 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003009 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003010 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003011 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
3012 return ;
3013}
Jeff Johnson295189b2012-06-20 16:38:30 -07003014/*
3015 * FUNCTION: WDA_ProcessFinshScanReq
3016 * Trigger Finish SCAN in WDI
3017 */
3018VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
3019 tFinishScanParams *finishScanParams)
3020{
3021 WDI_Status status = WDI_STATUS_SUCCESS;
3022 WDI_FinishScanReqParamsType *wdiFinishScanParams =
3023 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
3024 sizeof(WDI_FinishScanReqParamsType)) ;
3025 tWDA_ReqParams *pWdaParams ;
3026 tANI_U8 i = 0;
3027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003028 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003029 if(NULL == wdiFinishScanParams)
3030 {
3031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003032 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003033 VOS_ASSERT(0);
3034 return VOS_STATUS_E_NOMEM;
3035 }
3036 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3037 if(NULL == pWdaParams)
3038 {
3039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003040 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003041 VOS_ASSERT(0);
3042 vos_mem_free(wdiFinishScanParams);
3043 return VOS_STATUS_E_NOMEM;
3044 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003045 /* Copy init Scan params to WDI structure */
3046 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
3047 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
3048 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003049 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
3050 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
3051 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
3052 finishScanParams->frameLength ;
3053 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
3054 finishScanParams->currentOperChannel ;
3055 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
3056 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
3057 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003058 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
3059 {
3060 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3061 finishScanParams->scanEntry.bssIdx[i] ;
3062 }
3063
3064
Jeff Johnson295189b2012-06-20 16:38:30 -07003065 /* if Frame length, copy macMgmtHdr ro WDI structure */
3066 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
3067 {
3068 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
3069 &finishScanParams->macMgmtHdr,
3070 sizeof(WDI_MacMgmtHdr)) ;
3071 }
3072 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003073 /* Store Init Req pointer, as this will be used for response */
3074 /* store Params pass it to WDI */
3075 pWdaParams->pWdaContext = pWDA;
3076 pWdaParams->wdaMsgParam = finishScanParams;
3077 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003078 /* call DAL API to pass init scan request to DAL */
3079 status = WDI_FinishScanReq(wdiFinishScanParams,
3080 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003081
Jeff Johnson295189b2012-06-20 16:38:30 -07003082
3083 /*
3084 * WDI API returns failure..
3085 */
3086 if(IS_WDI_STATUS_FAILURE( status))
3087 {
3088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3089 "Failure in Finish Scan WDI API, free all the memory " );
3090 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3091 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003092 finishScanParams->status = eSIR_FAILURE ;
3093 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
3094 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003095 return CONVERT_WDI2VOS_STATUS(status) ;
3096}
Jeff Johnson295189b2012-06-20 16:38:30 -07003097/*---------------------------------------------------------------------
3098 * ASSOC API's
3099 *---------------------------------------------------------------------
3100 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003101/*
Sachin Ahuja935eda782014-07-30 14:57:41 +05303102 * FUNCTION: WDA_JoinRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003103 * Trigger Init SCAN callback
3104 */
Sachin Ahuja935eda782014-07-30 14:57:41 +05303105void WDA_JoinRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07003106{
3107 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3108 tWDA_CbContext *pWDA;
3109 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003111 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003112 if(NULL == pWdaParams)
3113 {
3114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003115 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003116 VOS_ASSERT(0) ;
3117 return ;
3118 }
3119 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3120 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003121 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3122 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003123 /* reset macBSSID */
3124 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07003125 /* reset macSTASelf */
3126 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003127 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003128 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003129 return ;
3130}
Sachin Ahuja935eda782014-07-30 14:57:41 +05303131
3132/*
3133 * FUNCTION: WDA_JoinReqCallback
3134 * Free memory and send SWITCH CHANNEL RSP back to PE.
3135 * Invoked when Enter JOIN REQ failed in WDI and no RSP callback is generated.
3136 */
3137void WDA_JoinReqCallback(WDI_Status wdiStatus, void* pUserData)
3138{
3139 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3140 tWDA_CbContext *pWDA;
3141 tSwitchChannelParams *joinReqParam;
3142
3143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3144 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
3145
3146 if(NULL == pWdaParams)
3147 {
3148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3149 "%s: pWdaParams received NULL", __func__);
3150 VOS_ASSERT(0);
3151 return;
3152 }
3153
3154 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3155 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3156 joinReqParam->status = wdiStatus;
3157
3158 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3159 {
3160 /* reset macBSSID */
3161 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
3162 /* reset macSTASelf */
3163 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
3164
3165 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3166 vos_mem_free(pWdaParams);
3167 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
3168 }
3169
3170 return;
3171}
3172
Jeff Johnson295189b2012-06-20 16:38:30 -07003173/*
3174 * FUNCTION: WDA_ProcessJoinReq
3175 * Trigger Join REQ in WDI
3176 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003177VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
3178 tSwitchChannelParams* joinReqParam)
3179{
3180 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003181 WDI_JoinReqParamsType *wdiJoinReqParam =
3182 (WDI_JoinReqParamsType *)vos_mem_malloc(
3183 sizeof(WDI_JoinReqParamsType)) ;
3184 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003186 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003187 if(NULL == wdiJoinReqParam)
3188 {
3189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003190 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003191 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003192 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003193 return VOS_STATUS_E_NOMEM;
3194 }
3195 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3196 if(NULL == pWdaParams)
3197 {
3198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003199 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003200 VOS_ASSERT(0);
3201 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003202 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003203 return VOS_STATUS_E_NOMEM;
3204 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003205
3206 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
3207 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
3208 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
3209 {
3210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3211 "%s: received join request when BSSID or self-STA is NULL "
3212 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003213 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003214 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
3215 VOS_ASSERT(0);
3216 vos_mem_free(wdiJoinReqParam);
3217 vos_mem_free(pWdaParams);
3218 joinReqParam->status = eSIR_FAILURE ;
3219 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3220 return VOS_STATUS_E_INVAL;
3221 }
3222
Jeff Johnson295189b2012-06-20 16:38:30 -07003223 /* copy the BSSID for pWDA */
3224 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
3225 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003226 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
3227 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003228 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
3229 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07003230#ifdef WLAN_FEATURE_VOWIFI
3231 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
3232 joinReqParam->maxTxPower ;
3233#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003234 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
3235 joinReqParam->localPowerConstraint ;
3236#endif
3237 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
3238 joinReqParam->secondaryChannelOffset ;
3239 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
3240
Sachin Ahuja935eda782014-07-30 14:57:41 +05303241 wdiJoinReqParam->wdiReqStatusCB = WDA_JoinReqCallback;
3242 wdiJoinReqParam->pUserData = pWdaParams;
3243
Jeff Johnson295189b2012-06-20 16:38:30 -07003244 /* Store Init Req pointer, as this will be used for response */
3245 /* store Params pass it to WDI */
3246 pWdaParams->pWdaContext = pWDA;
3247 pWdaParams->wdaMsgParam = joinReqParam;
3248 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003249 status = WDI_JoinReq(wdiJoinReqParam,
Sachin Ahuja935eda782014-07-30 14:57:41 +05303250 (WDI_JoinRspCb )WDA_JoinRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003251 if(IS_WDI_STATUS_FAILURE(status))
3252 {
3253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3254 "Failure in Join WDI API, free all the memory " );
3255 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3256 vos_mem_free(pWdaParams) ;
3257 joinReqParam->status = eSIR_FAILURE ;
3258 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3259 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003260 return CONVERT_WDI2VOS_STATUS(status) ;
3261}
Jeff Johnson295189b2012-06-20 16:38:30 -07003262/*
3263 * FUNCTION: WDA_SwitchChannelReqCallback
3264 * send Switch channel RSP back to PE
3265 */
3266void WDA_SwitchChannelReqCallback(
3267 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
3268{
3269 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3270 tWDA_CbContext *pWDA;
3271 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003273 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003274 if(NULL == pWdaParams)
3275 {
3276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003277 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003278 VOS_ASSERT(0) ;
3279 return ;
3280 }
3281 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3282 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3283
3284#ifdef WLAN_FEATURE_VOWIFI
3285 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
3286#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003287 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3288 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003289 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003290 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003291 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003292 return ;
3293}
Jeff Johnson295189b2012-06-20 16:38:30 -07003294/*
3295 * FUNCTION: WDA_ProcessChannelSwitchReq
3296 * Request to WDI to switch channel REQ params.
3297 */
3298VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
3299 tSwitchChannelParams *pSwitchChanParams)
3300{
3301 WDI_Status status = WDI_STATUS_SUCCESS ;
3302 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
3303 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
3304 sizeof(WDI_SwitchChReqParamsType)) ;
3305 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003307 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003308 if(NULL == wdiSwitchChanParam)
3309 {
3310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003311 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003312 VOS_ASSERT(0);
3313 return VOS_STATUS_E_NOMEM;
3314 }
3315 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3316 if(NULL == pWdaParams)
3317 {
3318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003319 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003320 VOS_ASSERT(0);
3321 vos_mem_free(wdiSwitchChanParam);
3322 return VOS_STATUS_E_NOMEM;
3323 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003324 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
3325#ifndef WLAN_FEATURE_VOWIFI
3326 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3327 pSwitchChanParams->localPowerConstraint;
3328#endif
3329 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3330 pSwitchChanParams->secondaryChannelOffset;
3331 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003332 /* Store req pointer, as this will be used for response */
3333 /* store Params pass it to WDI */
3334 pWdaParams->pWdaContext = pWDA;
3335 pWdaParams->wdaMsgParam = pSwitchChanParams;
3336 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003337#ifdef WLAN_FEATURE_VOWIFI
3338 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
3339 = pSwitchChanParams->maxTxPower;
3340 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3341 pSwitchChanParams ->selfStaMacAddr,
3342 sizeof(tSirMacAddr));
3343#endif
3344 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3345 pSwitchChanParams->bssId,
3346 sizeof(tSirMacAddr));
3347
3348 status = WDI_SwitchChReq(wdiSwitchChanParam,
3349 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003350 if(IS_WDI_STATUS_FAILURE(status))
3351 {
3352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3353 "Failure in process channel switch Req WDI API, free all the memory " );
3354 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3355 vos_mem_free(pWdaParams) ;
3356 pSwitchChanParams->status = eSIR_FAILURE ;
3357 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
3358 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003359 return CONVERT_WDI2VOS_STATUS(status) ;
3360}
Kalikinkar dhara1e83b772014-02-06 12:59:22 -08003361
3362/*
3363 * FUNCTION: WDA_SwitchChannelReqCallback_V1
3364 * send Switch channel RSP back to PE
3365 */
3366void WDA_SwitchChannelReqCallback_V1(
3367 WDI_SwitchChRspParamsType_V1 *wdiSwitchChanRsp,
3368 void* pUserData)
3369{
3370 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3371 tWDA_CbContext *pWDA;
3372 tSwitchChannelParams *pSwitchChanParams;
3373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3374 "<------ %s " ,__func__);
3375
3376 if (NULL == pWdaParams)
3377 {
3378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3379 "%s: pWdaParams received NULL", __func__);
3380 VOS_ASSERT(0);
3381 return ;
3382 }
3383 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3384 pSwitchChanParams =
3385 (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3386 pSwitchChanParams->channelSwitchSrc =
3387 wdiSwitchChanRsp->channelSwitchSrc;
3388#ifdef WLAN_FEATURE_VOWIFI
3389 pSwitchChanParams->txMgmtPower =
3390 wdiSwitchChanRsp->ucTxMgmtPower;
3391#endif
3392 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3393 vos_mem_free(pWdaParams);
3394 pSwitchChanParams->status =
3395 wdiSwitchChanRsp->wdiStatus ;
3396 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3397 (void *)pSwitchChanParams , 0);
3398 return;
3399}
3400
3401/*
3402 * FUNCTION: WDA_ProcessChannelSwitchReq_V1
3403 * Request to WDI to switch channel REQ params.
3404 */
3405VOS_STATUS WDA_ProcessChannelSwitchReq_V1(tWDA_CbContext *pWDA,
3406 tSwitchChannelParams *pSwitchChanParams)
3407{
3408 WDI_Status status = WDI_STATUS_SUCCESS ;
3409 WDI_SwitchChReqParamsType_V1 *wdiSwitchChanParam =
3410 (WDI_SwitchChReqParamsType_V1 *)vos_mem_malloc(
3411 sizeof(WDI_SwitchChReqParamsType_V1)) ;
3412 tWDA_ReqParams *pWdaParams ;
3413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3414 "------> %s " ,__func__);
3415 if (NULL == wdiSwitchChanParam)
3416 {
3417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3418 "%s: VOS MEM Alloc Failure", __func__);
3419 VOS_ASSERT(0);
3420 return VOS_STATUS_E_NOMEM;
3421 }
3422 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3423 if (NULL == pWdaParams)
3424 {
3425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3426 "%s: VOS MEM Alloc Failure", __func__);
3427 VOS_ASSERT(0);
3428 vos_mem_free(wdiSwitchChanParam);
3429 return VOS_STATUS_E_NOMEM;
3430 }
3431 wdiSwitchChanParam->wdiChInfo.channelSwitchSrc =
3432 pSwitchChanParams->channelSwitchSrc;
3433
3434 wdiSwitchChanParam->wdiChInfo.ucChannel =
3435 pSwitchChanParams->channelNumber;
3436#ifndef WLAN_FEATURE_VOWIFI
3437 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3438 pSwitchChanParams->localPowerConstraint;
3439#endif
3440 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3441 pSwitchChanParams->secondaryChannelOffset;
3442 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
3443 /* Store req pointer, as this will be used for response */
3444 /* store Params pass it to WDI */
3445 pWdaParams->pWdaContext = pWDA;
3446 pWdaParams->wdaMsgParam = pSwitchChanParams;
3447 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
3448#ifdef WLAN_FEATURE_VOWIFI
3449 wdiSwitchChanParam->wdiChInfo.cMaxTxPower =
3450 pSwitchChanParams->maxTxPower;
3451 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3452 pSwitchChanParams ->selfStaMacAddr,
3453 sizeof(tSirMacAddr));
3454#endif
3455 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3456 pSwitchChanParams->bssId,
3457 sizeof(tSirMacAddr));
3458
3459 status = WDI_SwitchChReq_V1(wdiSwitchChanParam,
3460 (WDI_SwitchChRspCb_V1)WDA_SwitchChannelReqCallback_V1,
3461 pWdaParams);
3462 if (IS_WDI_STATUS_FAILURE(status))
3463 {
3464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3465 "Failure in process channel switch Req WDI "
3466 "API, free all the memory " );
3467 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3468 vos_mem_free(pWdaParams) ;
3469 pSwitchChanParams->status = eSIR_FAILURE ;
3470 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3471 (void *)pSwitchChanParams, 0) ;
3472 }
3473 return CONVERT_WDI2VOS_STATUS(status) ;
3474}
3475
Jeff Johnson295189b2012-06-20 16:38:30 -07003476/*
3477 * FUNCTION: WDA_ConfigBssReqCallback
3478 * config BSS Req Callback, called by WDI
3479 */
3480void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
3481 ,void* pUserData)
3482{
3483 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3484 tWDA_CbContext *pWDA;
3485 tAddBssParams *configBssReqParam;
3486 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003488 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003489 if(NULL == pWdaParams)
3490 {
3491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003492 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003493 VOS_ASSERT(0) ;
3494 return ;
3495 }
3496 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3497 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
3498 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003499 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003500 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003501 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
3502 {
3503 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
3504 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003505 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
3506 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
3507 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
3508
3509 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
3510 {
3511 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
3512 {
3513 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
3514 staConfigBssParam->staType = STA_ENTRY_BSSID;
3515 }
3516 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
3517 (staConfigBssParam->staType == STA_ENTRY_SELF))
3518 {
3519 /* This is the 1st add BSS Req for the BTAMP STA */
3520 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3521 staConfigBssParam->staType = STA_ENTRY_BSSID;
3522 }
3523 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3524 (staConfigBssParam->staType == STA_ENTRY_PEER))
3525 {
3526 /* This is the 2nd ADD BSS Request that is sent
3527 * on the BTAMP STA side. The Sta type is
3528 * set to STA_ENTRY_PEER here.*/
3529 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3530 }
3531 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3532 (staConfigBssParam->staType == STA_ENTRY_SELF))
3533 {
3534 /* statype is already set by PE.
3535 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
3536 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
3537 staConfigBssParam->staType = STA_ENTRY_BSSID;
3538 }
3539 else
3540 {
3541 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
3542 staConfigBssParam->staType = STA_ENTRY_PEER;
3543 }
3544 }
3545 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
3546 {
3547 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
3548 staConfigBssParam->staType = STA_ENTRY_SELF;
3549 }
3550 else
3551 {
3552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3553 "Invalid operation mode specified");
3554 VOS_ASSERT(0);
3555 }
3556
3557 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003558 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003559 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003560 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003561 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
3562 sizeof(tSirMacAddr));
3563 staConfigBssParam->txChannelWidthSet =
3564 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07003565 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
3566 staConfigBssParam->htCapable)
3567 {
3568 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
3569 wdiConfigBssRsp->ucBSSIdx;
3570 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
3571 WDA_VALID_STA_INDEX ;
Abhishek Singh0644e482014-10-06 18:38:23 +05303572 pWDA->wdaStaInfo[staConfigBssParam->staIdx].currentOperChan =
3573 configBssReqParam->currentOperChannel;
Jeff Johnson295189b2012-06-20 16:38:30 -07003574 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003575 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
3576 wdiConfigBssRsp->ucBSSIdx,
3577 wdiConfigBssRsp->ucSTAIdx))
3578 {
3579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003580 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003581 VOS_ASSERT(0) ;
3582 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003583 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
3584 {
3585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003586 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003587 VOS_ASSERT(0) ;
3588 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003589#ifdef WLAN_FEATURE_VOWIFI
3590 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
3591#endif
3592 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05303593 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
3594 sizeof(WDI_ConfigBSSReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07003595 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3596 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003597 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003598 return ;
3599}
Jeff Johnson295189b2012-06-20 16:38:30 -07003600/*
3601 * FUNCTION: WDA_UpdateEdcaParamsForAC
3602 * Update WDI EDCA params with PE edca params
3603 */
3604void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
3605 WDI_EdcaParamRecord *wdiEdcaParam,
3606 tSirMacEdcaParamRecord *macEdcaParam)
3607{
3608 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
3609 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
3610 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
3611 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
3612 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
3613 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
3614}
Jeff Johnson295189b2012-06-20 16:38:30 -07003615/*
3616 * FUNCTION: WDA_ProcessConfigBssReq
3617 * Configure BSS before starting Assoc with AP
3618 */
3619VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
3620 tAddBssParams* configBssReqParam)
3621{
3622 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303623 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003624 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003626 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303627 if (NULL == configBssReqParam)
3628 {
3629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3630 "%s: configBssReqParam is NULL", __func__);
3631 return VOS_STATUS_E_INVAL;
3632 }
3633
3634 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
3635 sizeof(WDI_ConfigBSSReqParamsType)) ;
3636
Jeff Johnson295189b2012-06-20 16:38:30 -07003637 if(NULL == wdiConfigBssReqParam)
3638 {
3639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003640 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003641 VOS_ASSERT(0);
3642 return VOS_STATUS_E_NOMEM;
3643 }
3644 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3645 if(NULL == pWdaParams)
3646 {
3647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003648 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003649 VOS_ASSERT(0);
3650 vos_mem_free(wdiConfigBssReqParam);
3651 return VOS_STATUS_E_NOMEM;
3652 }
Kiran4a17ebe2013-01-31 10:43:43 -08003653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3654 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07003655 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003656 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
3657 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003658 /* Store Init Req pointer, as this will be used for response */
3659 /* store Params pass it to WDI */
3660 pWdaParams->pWdaContext = pWDA;
3661 pWdaParams->wdaMsgParam = configBssReqParam;
3662 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003663 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
3664 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003665 if(IS_WDI_STATUS_FAILURE(status))
3666 {
3667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3668 "Failure in Config BSS WDI API, free all the memory " );
3669 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3670 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003671 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003672 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
3673 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003674 return CONVERT_WDI2VOS_STATUS(status) ;
3675}
Jeff Johnson295189b2012-06-20 16:38:30 -07003676#ifdef ENABLE_HAL_COMBINED_MESSAGES
3677/*
3678 * FUNCTION: WDA_PostAssocReqCallback
3679 * Post ASSOC req callback, send RSP back to PE
3680 */
3681void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
3682 void* pUserData)
3683{
3684 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3685 tPostAssocParams *postAssocReqParam =
3686 (tPostAssocParams *)pWDA->wdaMsgParam ;
3687 /*STA context within the BSS Params*/
3688 tAddStaParams *staPostAssocParam =
3689 &postAssocReqParam->addBssParams.staContext ;
3690 /*STA Params for self STA*/
3691 tAddStaParams *selfStaPostAssocParam =
3692 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003694 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003695 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003696 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003697 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
3698 {
3699 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
3700 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
3701 sizeof(tSirMacAddr)) ;
3702 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
3703 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
3704 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003705 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
3706 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05303707 vos_mem_zero(pWDA->wdaWdiApiMsgParam, sizeof(WDI_PostAssocReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07003708 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3709 pWDA->wdaWdiApiMsgParam = NULL;
3710 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003711 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003712 return ;
3713}
Jeff Johnson295189b2012-06-20 16:38:30 -07003714/*
3715 * FUNCTION: WDA_ProcessPostAssocReq
3716 * Trigger POST ASSOC processing in WDI
3717 */
3718VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
3719 tPostAssocParams *postAssocReqParam)
3720{
Jeff Johnson295189b2012-06-20 16:38:30 -07003721 WDI_Status status = WDI_STATUS_SUCCESS ;
3722
3723 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
3724 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
3725 sizeof(WDI_PostAssocReqParamsType)) ;
3726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003727 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003728
Jeff Johnson295189b2012-06-20 16:38:30 -07003729 if(NULL == wdiPostAssocReqParam)
3730 {
3731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003732 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003733 VOS_ASSERT(0);
3734 return VOS_STATUS_E_NOMEM;
3735 }
3736
3737 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
3738 {
3739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003740 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003741 VOS_ASSERT(0);
3742 return VOS_STATUS_E_FAILURE;
3743 }
3744
Jeff Johnson295189b2012-06-20 16:38:30 -07003745 /* update BSS params into WDI structure */
3746 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3747 &postAssocReqParam->addBssParams) ;
3748 /* update STA params into WDI structure */
3749 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3750 &postAssocReqParam->addStaParams) ;
3751
3752 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3753 postAssocReqParam->addBssParams.highPerformance;
3754 WDA_UpdateEdcaParamsForAC(pWDA,
3755 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3756 &postAssocReqParam->addBssParams.acbe);
3757 WDA_UpdateEdcaParamsForAC(pWDA,
3758 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3759 &postAssocReqParam->addBssParams.acbk);
3760 WDA_UpdateEdcaParamsForAC(pWDA,
3761 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3762 &postAssocReqParam->addBssParams.acvi);
3763 WDA_UpdateEdcaParamsForAC(pWDA,
3764 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3765 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003766 /* Store Init Req pointer, as this will be used for response */
3767 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003768 /* store Params pass it to WDI */
3769 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003770 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3771 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003772 if(IS_WDI_STATUS_FAILURE(status))
3773 {
3774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3775 "Failure in Post Assoc WDI API, free all the memory " );
3776 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3777 pWDA->wdaWdiApiMsgParam = NULL;
3778 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003779 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003780 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3781 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003782 return CONVERT_WDI2VOS_STATUS(status) ;
3783}
3784#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003785/*
3786 * FUNCTION: WDA_AddStaReqCallback
3787 * ADD STA req callback, send RSP back to PE
3788 */
3789void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3790 void* pUserData)
3791{
3792 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3793 tWDA_CbContext *pWDA;
3794 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003796 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003797 if(NULL == pWdaParams)
3798 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003800 VOS_ASSERT(0) ;
3801 return ;
3802 }
3803 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3804 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003805 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003806 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003807 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3808 {
3809 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3810 /*TODO: UMAC structure doesn't have these fields*/
3811 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3812 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3813 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3814 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3815 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3816 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003817#ifdef FEATURE_WLAN_TDLS
3818 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3819 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3820#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003821 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003822#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003823 {
3824 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3825 wdiConfigStaRsp->ucBssIdx;
3826 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3827 WDA_VALID_STA_INDEX ;
Abhishek Singhf08a82b2014-10-07 11:00:42 +05303828 pWDA->wdaStaInfo[addStaReqParam->staIdx].currentOperChan =
3829 addStaReqParam->currentOperChan;
Jeff Johnson295189b2012-06-20 16:38:30 -07003830 }
3831 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3832 {
3833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003834 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003835 VOS_ASSERT(0) ;
3836 return ;
3837 }
3838 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003839 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3840 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003841 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003842 return ;
3843}
Jeff Johnson295189b2012-06-20 16:38:30 -07003844/*
3845 * FUNCTION: WDA_ConfigStaReq
3846 * Trigger Config STA processing in WDI
3847 */
3848VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3849 tAddStaParams *addStaReqParam)
3850{
Jeff Johnson295189b2012-06-20 16:38:30 -07003851 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003852 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3853 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3854 sizeof(WDI_ConfigSTAReqParamsType)) ;
3855 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003857 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003858 if(NULL == wdiConfigStaReqParam)
3859 {
3860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003861 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003862 VOS_ASSERT(0);
3863 return VOS_STATUS_E_NOMEM;
3864 }
3865 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3866 if(NULL == pWdaParams)
3867 {
3868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003869 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003870 VOS_ASSERT(0);
3871 vos_mem_free(wdiConfigStaReqParam);
3872 return VOS_STATUS_E_NOMEM;
3873 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003874 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003875 /* update STA params into WDI structure */
3876 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3877 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003878 /* Store Init Req pointer, as this will be used for response */
3879 /* store Params pass it to WDI */
3880 pWdaParams->pWdaContext = pWDA;
3881 pWdaParams->wdaMsgParam = addStaReqParam;
3882 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003883 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3884 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003885 if(IS_WDI_STATUS_FAILURE(status))
3886 {
3887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3888 "Failure in Config STA WDI API, free all the memory " );
3889 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3890 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003891 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003892 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3893 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003894 return CONVERT_WDI2VOS_STATUS(status) ;
3895}
Jeff Johnson295189b2012-06-20 16:38:30 -07003896/*
3897 * FUNCTION: WDA_DelBSSReqCallback
3898 * Dens DEL BSS RSP back to PE
3899 */
3900void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3901 void* pUserData)
3902{
3903 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3904 tWDA_CbContext *pWDA;
3905 tDeleteBssParams *delBssReqParam;
3906 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003908 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003909 if(NULL == pWdaParams)
3910 {
3911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003912 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003913 VOS_ASSERT(0) ;
3914 return ;
3915 }
3916 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3917 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003918 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003919 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3920 {
3921 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3922 sizeof(tSirMacAddr)) ;
3923 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003924 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3925 {
3926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003927 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003928 VOS_ASSERT(0) ;
3929 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003930 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3931 {
3932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003933 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003934 VOS_ASSERT(0) ;
3935 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003936 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3937 {
3938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003939 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003940 VOS_ASSERT(0) ;
3941 }
Mihir Shete2ab1d492014-06-04 14:21:05 +05303942
3943 WLANTL_StartForwarding(staIdx,0,0);
3944
Jeff Johnson295189b2012-06-20 16:38:30 -07003945 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3946 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003947 /* reset the the system role*/
3948 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3949
3950 /* Reset the BA related information */
3951 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3952 {
3953 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3954 {
3955 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3956 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05303957 pWDA->wdaStaInfo[staIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003958 /* Reset framesTxed counters here */
3959 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3960 {
3961 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3962 }
3963 }
3964 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003965 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003966 return ;
3967}
3968
Jeff Johnson295189b2012-06-20 16:38:30 -07003969/*
3970 * FUNCTION: WDA_ProcessDelBssReq
3971 * Init DEL BSS req with WDI
3972 */
3973VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3974 tDeleteBssParams *delBssParam)
3975{
3976 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003977 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3978 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3979 sizeof(WDI_DelBSSReqParamsType)) ;
3980 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003982 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003983 if(NULL == wdiDelBssReqParam)
3984 {
3985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003986 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003987 VOS_ASSERT(0);
3988 return VOS_STATUS_E_NOMEM;
3989 }
3990 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3991 if(NULL == pWdaParams)
3992 {
3993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003994 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003995 VOS_ASSERT(0);
3996 vos_mem_free(wdiDelBssReqParam);
3997 return VOS_STATUS_E_NOMEM;
3998 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003999 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
4000 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
4001
4002 /* Store Init Req pointer, as this will be used for response */
4003 /* store Params pass it to WDI */
4004 pWdaParams->pWdaContext = pWDA;
4005 pWdaParams->wdaMsgParam = delBssParam;
4006 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004007 status = WDI_DelBSSReq(wdiDelBssReqParam,
4008 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004009 if(IS_WDI_STATUS_FAILURE(status))
4010 {
4011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4012 "Failure in Del BSS WDI API, free all the memory " );
4013 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4014 vos_mem_free(pWdaParams) ;
4015 delBssParam->status = eSIR_FAILURE ;
4016 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
4017 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004018 return CONVERT_WDI2VOS_STATUS(status) ;
4019}
Jeff Johnson295189b2012-06-20 16:38:30 -07004020/*
4021 * FUNCTION: WDA_DelSTAReqCallback
4022 * Dens DEL STA RSP back to PE
4023 */
4024void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
4025 void* pUserData)
4026{
4027 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4028 tWDA_CbContext *pWDA;
4029 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004031 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004032 if(NULL == pWdaParams)
4033 {
4034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004035 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004036 VOS_ASSERT(0) ;
4037 return ;
4038 }
4039 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4040 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004041 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004042 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
4043 {
4044 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
4045 {
4046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004047 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004048 VOS_ASSERT(0) ;
4049 }
4050 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
Mihir Shete2ab1d492014-06-04 14:21:05 +05304051 WLANTL_StartForwarding(delStaReqParam->staIdx,0,0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004052 }
4053 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4054 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004055 /*Reset the BA information corresponding to this STAIdx */
4056 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
4057 WDA_INVALID_STA_INDEX;
4058 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304059 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004060 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004061 return ;
4062}
Jeff Johnson295189b2012-06-20 16:38:30 -07004063/*
4064 * FUNCTION: WDA_ProcessDelStaReq
4065 * Init DEL STA req with WDI
4066 */
4067VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
4068 tDeleteStaParams *delStaParam)
4069{
4070 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004071 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
4072 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
4073 sizeof(WDI_DelSTAReqParamsType)) ;
4074 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004076 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004077 if(NULL == wdiDelStaReqParam)
4078 {
4079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004080 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004081 VOS_ASSERT(0);
4082 return VOS_STATUS_E_NOMEM;
4083 }
4084 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4085 if(NULL == pWdaParams)
4086 {
4087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004088 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004089 VOS_ASSERT(0);
4090 vos_mem_free(wdiDelStaReqParam);
4091 return VOS_STATUS_E_NOMEM;
4092 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004093 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
4094 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004095 /* Store Init Req pointer, as this will be used for response */
4096 /* store Params pass it to WDI */
4097 pWdaParams->pWdaContext = pWDA;
4098 pWdaParams->wdaMsgParam = delStaParam;
4099 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004100 status = WDI_DelSTAReq(wdiDelStaReqParam,
4101 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004102 if(IS_WDI_STATUS_FAILURE(status))
4103 {
4104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4105 "Failure in Del STA WDI API, free all the memory status = %d",
4106 status );
4107 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4108 vos_mem_free(pWdaParams) ;
4109 delStaParam->status = eSIR_FAILURE ;
4110 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
4111 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004112 return CONVERT_WDI2VOS_STATUS(status) ;
4113}
Jeff Johnson295189b2012-06-20 16:38:30 -07004114void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
4115{
4116 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4117 tWDA_CbContext *pWDA;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304118 tAddStaSelfParams *pAddStaSelfRsp = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004120 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004121 if(NULL == pWdaParams)
4122 {
4123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004124 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004125 VOS_ASSERT(0) ;
4126 return ;
4127 }
4128 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4129 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004130 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4131 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004132 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
4133 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
4134 pwdiAddSTASelfRsp->macSelfSta,
4135 sizeof(pAddStaSelfRsp->selfMacAddr));
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304136 pWDA->wdaAddSelfStaParams.ucSTASelfIdx = pwdiAddSTASelfRsp->ucSTASelfIdx;
4137 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaRspCounter++;
4138 if (pAddStaSelfRsp->status == eSIR_FAILURE)
4139 {
4140 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_RSP_WDI_FAIL;
4141 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
4142 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004143 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004144 return ;
4145}
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304146
Jeff Johnson295189b2012-06-20 16:38:30 -07004147/*
4148 * FUNCTION: WDA_ProcessAddStaSelfReq
4149 *
4150 */
4151VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
4152{
4153 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004154 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004155 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
4156 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
4157 sizeof(WDI_AddSTASelfReqParamsType)) ;
4158 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004160 "------> %s " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304161 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaReqCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004162 if( NULL == wdiAddStaSelfReq )
4163 {
4164 VOS_ASSERT( 0 );
4165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004166 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304167 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4168 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004169 return( VOS_STATUS_E_NOMEM );
4170 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004171 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004172 if( NULL == pWdaParams )
4173 {
4174 VOS_ASSERT( 0 );
4175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004176 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304177 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4178 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004179 vos_mem_free(wdiAddStaSelfReq) ;
4180 return( VOS_STATUS_E_NOMEM );
4181 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004182 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004183 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07004184 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004185 /* Store Init Req pointer, as this will be used for response */
4186 /* store Params pass it to WDI */
4187 pWdaParams->pWdaContext = pWDA;
4188 pWdaParams->wdaMsgParam = pAddStaSelfReq;
4189 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07004190 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004191
Jeff Johnson43971f52012-07-17 12:26:56 -07004192 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004193 {
4194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4195 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07004196 wstatus );
4197 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004198 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4199 vos_mem_free(pWdaParams) ;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304200 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_WDI_FAIL;
4201 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004202 pAddStaSelfReq->status = eSIR_FAILURE ;
4203 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
4204 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004205 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004206}
Jeff Johnson295189b2012-06-20 16:38:30 -07004207/*
4208 * FUNCTION: WDA_DelSTASelfRespCallback
4209 *
4210 */
4211void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
4212 wdiDelStaSelfRspParams , void* pUserData)
4213{
4214 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4215 tWDA_CbContext *pWDA;
4216 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004218 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004219 if (NULL == pWdaParams)
4220 {
4221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004222 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004223 VOS_ASSERT(0);
4224 return;
4225 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004226 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4227 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004228 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004229 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004230
4231 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4232 vos_mem_free(pWdaParams) ;
4233
4234 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004235 return ;
4236}
Jeff Johnson295189b2012-06-20 16:38:30 -07004237/*
4238 * FUNCTION: WDA_DelSTASelfReqCallback
4239 *
4240 */
4241void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
4242 void* pUserData)
4243{
4244 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4245 tWDA_CbContext *pWDA;
4246 tDelStaSelfParams *delStaSelfParams;
4247
4248 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05304249 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004250 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004251
4252 if (NULL == pWdaParams)
4253 {
4254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004255 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004256 VOS_ASSERT(0);
4257 return;
4258 }
4259
4260 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4261 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
4262
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004263 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004264
4265 if(IS_WDI_STATUS_FAILURE(wdiStatus))
4266 {
4267 VOS_ASSERT(0);
4268 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4269 vos_mem_free(pWdaParams) ;
4270 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
4271 }
4272
4273 return ;
4274}
4275
4276/*
4277 * FUNCTION: WDA_DelSTASelfReq
4278 * Trigger Config STA processing in WDI
4279 */
4280VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
4281 tDelStaSelfParams* pDelStaSelfReqParam)
4282{
4283 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004284 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004285 tWDA_ReqParams *pWdaParams = NULL;
4286 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
4287 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
4288 sizeof(WDI_DelSTASelfReqParamsType)) ;
4289
Jeff Johnson295189b2012-06-20 16:38:30 -07004290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004291 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004292 if( NULL == wdiDelStaSelfReq )
4293 {
4294 VOS_ASSERT( 0 );
4295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004296 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004297 return( VOS_STATUS_E_NOMEM );
4298 }
4299
4300 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4301 if( NULL == pWdaParams )
4302 {
4303 VOS_ASSERT( 0 );
4304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004305 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004306 vos_mem_free(wdiDelStaSelfReq) ;
4307 return( VOS_STATUS_E_NOMEM );
4308 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004309 pWdaParams->pWdaContext = pWDA;
4310 /* Store param pointer as passed in by caller */
4311 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
4312 /* store Params pass it to WDI */
4313 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07004314 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
4315 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
4316
4317 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
4318 wdiDelStaSelfReq->pUserData = pWdaParams;
4319
Jeff Johnson43971f52012-07-17 12:26:56 -07004320 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07004321 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
4322
Jeff Johnson43971f52012-07-17 12:26:56 -07004323 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004324 {
4325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
4326 "Failure in Del Sta Self REQ WDI API, free all the memory " );
4327 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07004328 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004329 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4330 vos_mem_free(pWdaParams) ;
4331 pDelStaSelfReqParam->status = eSIR_FAILURE ;
4332 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
4333 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004334 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004335}
4336
Jeff Johnson295189b2012-06-20 16:38:30 -07004337/*
4338 * FUNCTION: WDA_SendMsg
4339 * Send Message back to PE
4340 */
4341void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
4342 void *pBodyptr, tANI_U32 bodyVal)
4343{
4344 tSirMsgQ msg = {0} ;
4345 tANI_U32 status = VOS_STATUS_SUCCESS ;
4346 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07004347 msg.type = msgType;
4348 msg.bodyval = bodyVal;
4349 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07004350 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07004351 if (VOS_STATUS_SUCCESS != status)
4352 {
4353 if(NULL != pBodyptr)
4354 {
4355 vos_mem_free(pBodyptr);
4356 }
4357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004358 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004359 VOS_ASSERT(0) ;
4360 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004361 return ;
4362}
Jeff Johnson295189b2012-06-20 16:38:30 -07004363/*
4364 * FUNCTION: WDA_UpdateBSSParams
4365 * Translated WDA/PE BSS info into WDI BSS info..
4366 */
4367void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
4368 WDI_ConfigBSSReqInfoType *wdiBssParams,
4369 tAddBssParams *wdaBssParams)
4370{
4371 v_U8_t keyIndex = 0;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304372 v_U8_t i = 0;
4373
Jeff Johnson295189b2012-06-20 16:38:30 -07004374 /* copy bssReq Params to WDI structure */
4375 vos_mem_copy(wdiBssParams->macBSSID,
4376 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
4377 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
4378 sizeof(tSirMacAddr)) ;
4379 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
4380 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
4381 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004382 wdiBssParams->ucShortSlotTimeSupported =
4383 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004384 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
4385 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
4386 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
4387 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
4388 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
4389
4390 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
4391 wdiBssParams->ucTXOPProtectionFullSupport =
4392 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004393 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
4394 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004395 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004396 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
4397 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
4398 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
4399 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
4400
Chet Lanctot186b5732013-03-18 10:26:30 -07004401 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
4402
Jeff Johnson295189b2012-06-20 16:38:30 -07004403 /* copy SSID into WDI structure */
4404 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
4405 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
4406 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004407 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
4408 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004409 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07004410#ifdef WLAN_FEATURE_VOWIFI
4411 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
4412#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004413 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07004414 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07004415#ifdef WLAN_FEATURE_VOWIFI_11R
4416 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004417 if(wdiBssParams->bExtSetStaKeyParamValid)
4418 {
4419 /* copy set STA key params to WDI structure */
4420 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
4421 wdaBssParams->extSetStaKeyParam.staIdx;
4422 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
4423 wdaBssParams->extSetStaKeyParam.encType;
4424 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
4425 wdaBssParams->extSetStaKeyParam.wepType;
4426 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
4427 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004428 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
4429 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004430 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004431 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
4432 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4433 {
4434 WDA_GetWepKeysFromCfg( pWDA,
4435 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
4436 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
4437 wdiBssParams->wdiExtSetKeyParam.wdiKey );
4438 }
4439 else
4440 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004441 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4442 keyIndex++)
4443 {
4444 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
4445 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
4446 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
4447 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
4448 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
4449 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304450
4451 if(WDA_getHostWlanFeatCaps(DISA) && WDA_getFwWlanFeatCaps(DISA))
4452 {
4453 for (i = 0; i < WLAN_MAX_KEY_RSC_LEN; i ++)
4454 {
4455 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc[i] =
4456 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc[i]);
4457 }
4458
4459 for (i = 0; i < SIR_MAC_MAX_KEY_LENGTH; i++)
4460 {
4461 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key[i] =
4462 ~(wdaBssParams->extSetStaKeyParam.key[keyIndex].key[i]);
4463 }
4464 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4465 FL("%s: Negated Keys"), __func__);
4466 }
4467 else
4468 {
4469 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4470 FL("%s: No change in Keys "), __func__);
4471 vos_mem_copy(
4472 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
4473 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc,
4474 WLAN_MAX_KEY_RSC_LEN);
4475 vos_mem_copy(
4476 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
4477 wdaBssParams->extSetStaKeyParam.key[keyIndex].key,
4478 SIR_MAC_MAX_KEY_LENGTH);
4479 }
4480
Jeff Johnson295189b2012-06-20 16:38:30 -07004481 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
4482 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
4483 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
4484 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07004485 }
Srinivas Dasari9b57b112014-11-27 12:25:23 +05304486 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
Jeff Johnson295189b2012-06-20 16:38:30 -07004487 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004488 }
4489 }
4490 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
4491 }
4492 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
4493 {
4494 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
4495 sizeof(wdaBssParams->extSetStaKeyParam) );
4496 }
4497#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07004498#ifdef WLAN_FEATURE_11AC
4499 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
4500 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
4501#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004502
4503 return ;
4504}
Jeff Johnson295189b2012-06-20 16:38:30 -07004505/*
4506 * FUNCTION: WDA_UpdateSTAParams
4507 * Translated WDA/PE BSS info into WDI BSS info..
4508 */
4509void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
4510 WDI_ConfigStaReqInfoType *wdiStaParams,
4511 tAddStaParams *wdaStaParams)
4512{
4513 tANI_U8 i = 0;
4514 /* Update STA params */
4515 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
4516 sizeof(tSirMacAddr)) ;
4517 wdiStaParams->usAssocId = wdaStaParams->assocId;
4518 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07004519 wdiStaParams->staIdx = wdaStaParams->staIdx;
4520
Jeff Johnson295189b2012-06-20 16:38:30 -07004521 wdiStaParams->ucShortPreambleSupported =
4522 wdaStaParams->shortPreambleSupported;
4523 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
4524 sizeof(tSirMacAddr)) ;
4525 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
4526
4527 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
4528
4529 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
4530 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
4531 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
4532 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
4533 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
4534 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
4535 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
4536
4537 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
4538 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07004539 wdiStaParams->wdiSupportedRates.opRateMode =
4540 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004541 for(i = 0;i < WDI_NUM_11B_RATES;i++)
4542 {
4543 wdiStaParams->wdiSupportedRates.llbRates[i] =
4544 wdaStaParams->supportedRates.llbRates[i];
4545 }
4546 for(i = 0;i < WDI_NUM_11A_RATES;i++)
4547 {
4548 wdiStaParams->wdiSupportedRates.llaRates[i] =
4549 wdaStaParams->supportedRates.llaRates[i];
4550 }
4551 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
4552 {
4553 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
4554 wdaStaParams->supportedRates.aniLegacyRates[i];
4555 }
4556 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
4557 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07004558#ifdef WLAN_FEATURE_11AC
4559 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
4560 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
4561 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
4562 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
4563#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004564 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
4565 {
4566 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
4567 wdaStaParams->supportedRates.supportedMCSSet[i];
4568 }
4569 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
4570 wdaStaParams->supportedRates.rxHighestDataRate;
4571
4572 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
4573
4574 wdiStaParams->wdiAction = wdaStaParams->updateSta;
4575
4576 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
4577 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
4578 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
4579
4580 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
4581 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
4582 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
4583 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07004584 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07004585#ifdef WLAN_FEATURE_11AC
4586 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
4587 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08004588 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Abhishek Singh6927fa02014-06-27 17:19:55 +05304589 wdiStaParams->vhtTxMUBformeeCapable = wdaStaParams->vhtTxMUBformeeCapable;
4590 /* When MU vhtTxMUBformeeCapable is set, SU ucVhtTxBFEnabled
4591 * must be set by default */
4592 if ( wdiStaParams->vhtTxMUBformeeCapable )
4593 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxMUBformeeCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07004594#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08004595 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
4596 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07004597 return ;
4598}
Jeff Johnson295189b2012-06-20 16:38:30 -07004599/*
4600 * -------------------------------------------------------------------------
4601 * CFG update to WDI
4602 * -------------------------------------------------------------------------
4603 */
4604
4605 /*
4606 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
4607 * Convert the WNI CFG ID to HAL CFG ID
4608 */
Jeff Johnsone7245742012-09-05 17:12:55 -07004609static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07004610{
4611 switch(wniCfgId)
4612 {
4613 case WNI_CFG_STA_ID:
4614 return QWLAN_HAL_CFG_STA_ID;
4615 case WNI_CFG_CURRENT_TX_ANTENNA:
4616 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
4617 case WNI_CFG_CURRENT_RX_ANTENNA:
4618 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
4619 case WNI_CFG_LOW_GAIN_OVERRIDE:
4620 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
4621 case WNI_CFG_POWER_STATE_PER_CHAIN:
4622 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
4623 case WNI_CFG_CAL_PERIOD:
4624 return QWLAN_HAL_CFG_CAL_PERIOD;
4625 case WNI_CFG_CAL_CONTROL:
4626 return QWLAN_HAL_CFG_CAL_CONTROL;
4627 case WNI_CFG_PROXIMITY:
4628 return QWLAN_HAL_CFG_PROXIMITY;
4629 case WNI_CFG_NETWORK_DENSITY:
4630 return QWLAN_HAL_CFG_NETWORK_DENSITY;
4631 case WNI_CFG_MAX_MEDIUM_TIME:
4632 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
4633 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
4634 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
4635 case WNI_CFG_RTS_THRESHOLD:
4636 return QWLAN_HAL_CFG_RTS_THRESHOLD;
4637 case WNI_CFG_SHORT_RETRY_LIMIT:
4638 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
4639 case WNI_CFG_LONG_RETRY_LIMIT:
4640 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
4641 case WNI_CFG_FRAGMENTATION_THRESHOLD:
4642 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
4643 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
4644 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
4645 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
4646 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
4647 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
4648 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
4649 case WNI_CFG_FIXED_RATE:
4650 return QWLAN_HAL_CFG_FIXED_RATE;
4651 case WNI_CFG_RETRYRATE_POLICY:
4652 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
4653 case WNI_CFG_RETRYRATE_SECONDARY:
4654 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
4655 case WNI_CFG_RETRYRATE_TERTIARY:
4656 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
4657 case WNI_CFG_FORCE_POLICY_PROTECTION:
4658 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
4659 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
4660 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
4661 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
4662 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
4663 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
4664 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
4665 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
4666 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
4667 case WNI_CFG_MAX_BA_SESSIONS:
4668 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
4669 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
4670 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
4671 case WNI_CFG_PS_ENABLE_BCN_FILTER:
4672 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
4673 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
4674 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
4675 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
4676 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
4677 case WNI_CFG_STATS_PERIOD:
4678 return QWLAN_HAL_CFG_STATS_PERIOD;
4679 case WNI_CFG_CFP_MAX_DURATION:
4680 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
4681#if 0 /*This is not part of CFG*/
4682 case WNI_CFG_FRAME_TRANS_ENABLED:
4683 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
4684#endif
4685 case WNI_CFG_DTIM_PERIOD:
4686 return QWLAN_HAL_CFG_DTIM_PERIOD;
4687 case WNI_CFG_EDCA_WME_ACBK:
4688 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
4689 case WNI_CFG_EDCA_WME_ACBE:
4690 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
4691 case WNI_CFG_EDCA_WME_ACVI:
4692 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
4693 case WNI_CFG_EDCA_WME_ACVO:
4694 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
4695#if 0
4696 case WNI_CFG_TELE_BCN_WAKEUP_EN:
4697 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
4698 case WNI_CFG_TELE_BCN_TRANS_LI:
4699 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
4700 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
4701 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
4702 case WNI_CFG_TELE_BCN_MAX_LI:
4703 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
4704 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
4705 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
4706#endif
4707 case WNI_CFG_ENABLE_CLOSE_LOOP:
4708 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08004709 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
4710 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
Jeff Johnson295189b2012-06-20 16:38:30 -07004711 default:
4712 {
4713 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004714 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07004715 wniCfgId);
4716 return VOS_STATUS_E_INVAL;
4717 }
4718 }
4719}
Jeff Johnson295189b2012-06-20 16:38:30 -07004720/*
4721 * FUNCTION: WDA_UpdateCfgCallback
4722 *
4723 */
4724void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
4725{
4726 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4727 WDI_UpdateCfgReqParamsType *wdiCfgParam =
4728 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004730 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004731 /*
4732 * currently there is no response message is expected between PE and
4733 * WDA, Failure return from WDI is a ASSERT condition
4734 */
4735 if(WDI_STATUS_SUCCESS != wdiStatus)
4736 {
4737 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004738 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07004739 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
4740 }
4741
4742 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
4743 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4744 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004745 return ;
4746}
Jeff Johnson295189b2012-06-20 16:38:30 -07004747/*
4748 * FUNCTION: WDA_UpdateCfg
4749 *
4750 */
4751VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
4752{
4753
4754 WDI_Status status = WDI_STATUS_SUCCESS ;
4755 tANI_U32 val =0;
4756 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
4757 tHalCfg *configData;
4758 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
4759 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07004760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004761 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004762 if (NULL == pMac )
4763 {
4764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004765 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004766 return VOS_STATUS_E_FAILURE;
4767 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004768 if(WDA_START_STATE != pWDA->wdaState)
4769 {
4770 return VOS_STATUS_E_FAILURE;
4771 }
4772
4773 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
4774 {
4775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004776 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004777 VOS_ASSERT(0);
4778 return VOS_STATUS_E_FAILURE;
4779 }
4780
4781 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
4782 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004783 if(NULL == wdiCfgReqParam)
4784 {
4785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004786 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004787 VOS_ASSERT(0);
4788 return VOS_STATUS_E_NOMEM;
4789 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004790 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
4791 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004792 if(NULL == wdiCfgReqParam->pConfigBuffer)
4793 {
4794 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004795 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004796 vos_mem_free(wdiCfgReqParam);
4797 VOS_ASSERT(0);
4798 return VOS_STATUS_E_NOMEM;
4799 }
4800
4801 /*convert the WNI CFG Id to HAL CFG Id*/
4802 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4803 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4804
4805 /*TODO: revisit this for handling string parameters */
4806 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4807 &val) != eSIR_SUCCESS)
4808 {
4809 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004810 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07004811 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4812 vos_mem_free(wdiCfgReqParam);
4813 return eSIR_FAILURE;
4814 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004815 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4816 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4817 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4818 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4819 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4820
4821 /* store Params pass it to WDI */
4822 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004823#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4824 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4825 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004826 if(IS_WDI_STATUS_FAILURE(status))
4827 {
4828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4829 "Failure in Update CFG WDI API, free all the memory " );
4830 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4831 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4832 pWDA->wdaWdiCfgApiMsgParam = NULL;
4833 /* Failure is not expected */
4834 VOS_ASSERT(0) ;
4835 }
4836#else
4837 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4838 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4839 pWDA->wdaWdiCfgApiMsgParam = NULL;
4840#endif
4841 return CONVERT_WDI2VOS_STATUS(status) ;
4842}
4843
Jeff Johnson295189b2012-06-20 16:38:30 -07004844VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4845 v_U8_t *pDefaultKeyId,
4846 v_U8_t *pNumKeys,
4847 WDI_KeysType *pWdiKeys )
4848{
4849 v_U32_t i, j, defKeyId = 0;
4850 v_U32_t val = SIR_MAC_KEY_LENGTH;
4851 VOS_STATUS status = WDI_STATUS_SUCCESS;
4852 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004853 if (NULL == pMac )
4854 {
4855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004856 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004857 return VOS_STATUS_E_FAILURE;
4858 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004859 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4860 &defKeyId ))
4861 {
4862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4863 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4864 }
4865
4866 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004867 /* Need to extract ALL of the configured WEP Keys */
4868 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4869 {
4870 val = SIR_MAC_KEY_LENGTH;
4871 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4872 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4873 pWdiKeys[j].key,
4874 &val ))
4875 {
4876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004877 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07004878 }
4879 else
4880 {
4881 pWdiKeys[j].keyId = (tANI_U8) i;
4882 /*
4883 * Actually, a DC (Don't Care) because
4884 * this is determined (and set) by PE/MLME
4885 */
4886 pWdiKeys[j].unicast = 0;
4887 /*
4888 * Another DC (Don't Care)
4889 */
4890 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4891 /* Another DC (Don't Care). Unused for WEP */
4892 pWdiKeys[j].paeRole = 0;
4893 /* Determined from wlan_cfgGetStr() above.*/
4894 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004895 j++;
4896 *pNumKeys = (tANI_U8) j;
4897 }
4898 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004899 return status;
4900}
Jeff Johnson295189b2012-06-20 16:38:30 -07004901/*
4902 * FUNCTION: WDA_SetBssKeyReqCallback
4903 * send SET BSS key RSP back to PE
4904 */
4905void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4906{
4907 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4908 tWDA_CbContext *pWDA;
4909 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004911 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004912 if(NULL == pWdaParams)
4913 {
4914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004915 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004916 VOS_ASSERT(0) ;
4917 return ;
4918 }
4919 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4920 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05304921 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
4922 sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004923 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4924 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004925 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004926 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004927 return ;
4928}
Jeff Johnson295189b2012-06-20 16:38:30 -07004929/*
4930 * FUNCTION: WDA_ProcessSetBssKeyReq
4931 * Request to WDI for programming the BSS key( key for
4932 * broadcast/multicast frames Encryption)
4933 */
4934VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4935 tSetBssKeyParams *setBssKeyParams )
4936{
4937 WDI_Status status = WDI_STATUS_SUCCESS ;
4938 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4939 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4940 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4941 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004942 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004944 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004945 if(NULL == wdiSetBssKeyParam)
4946 {
4947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004948 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004949 VOS_ASSERT(0);
4950 return VOS_STATUS_E_NOMEM;
4951 }
4952 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4953 if(NULL == pWdaParams)
4954 {
4955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004956 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004957 VOS_ASSERT(0);
4958 vos_mem_free(wdiSetBssKeyParam);
4959 return VOS_STATUS_E_NOMEM;
4960 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004961 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004962 /* copy set BSS params to WDI structure */
4963 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4964 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4965 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004966 if(setBssKeyParams->encType != eSIR_ED_NONE)
4967 {
4968 if( setBssKeyParams->numKeys == 0 &&
4969 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4970 setBssKeyParams->encType == eSIR_ED_WEP104))
4971 {
4972 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004973 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4974 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4975 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4976 }
4977 else
4978 {
4979 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4980 {
4981 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4982 setBssKeyParams->key[keyIndex].keyId;
4983 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
4984 setBssKeyParams->key[keyIndex].unicast;
4985 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
4986 setBssKeyParams->key[keyIndex].keyDirection;
4987 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
4988 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4989 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
4990 setBssKeyParams->key[keyIndex].paeRole;
4991 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
4992 setBssKeyParams->key[keyIndex].keyLength;
4993 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
4994 setBssKeyParams->key[keyIndex].key,
4995 SIR_MAC_MAX_KEY_LENGTH);
4996 }
4997 }
4998 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004999 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
5000 setBssKeyParams->singleTidRc;
5001 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005002 /* Store set key pointer, as this will be used for response */
5003 /* store Params pass it to WDI */
5004 pWdaParams->pWdaContext = pWDA;
5005 pWdaParams->wdaMsgParam = setBssKeyParams;
5006 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005007 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
5008 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
5009
5010 if(IS_WDI_STATUS_FAILURE(status))
5011 {
5012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5013 "Failure in Set BSS Key Req WDI API, free all the memory " );
5014 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5015 vos_mem_free(pWdaParams) ;
5016 setBssKeyParams->status = eSIR_FAILURE ;
5017 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
5018 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005019 return CONVERT_WDI2VOS_STATUS(status) ;
5020}
Jeff Johnson295189b2012-06-20 16:38:30 -07005021/*
5022 * FUNCTION: WDA_RemoveBssKeyReqCallback
5023 * send SET BSS key RSP back to PE
5024 */
5025void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
5026{
5027 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5028 tWDA_CbContext *pWDA;
5029 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005031 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005032 if(NULL == pWdaParams)
5033 {
5034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005035 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005036 VOS_ASSERT(0) ;
5037 return ;
5038 }
5039 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5040 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005041 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5042 vos_mem_free(pWdaParams) ;
5043
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005044 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005045 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005046 return ;
5047}
Siddharth Bhal171788a2014-09-29 21:02:40 +05305048
5049/*
5050 * FUNCTION: WDA_SpoofMacAddrRspCallback
5051 * recieves spoof mac addr response from FW
5052 */
5053void WDA_SpoofMacAddrRspCallback(WDI_SpoofMacAddrRspParamType* wdiRsp, void* pUserData)
5054{
5055 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5056 tWDA_CbContext *pWDA;
Siddharth Bhal029d6732014-10-09 21:31:23 +05305057
Siddharth Bhal171788a2014-09-29 21:02:40 +05305058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5059 "<------ %s " ,__func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305060
Siddharth Bhal171788a2014-09-29 21:02:40 +05305061 if(NULL == pWdaParams)
5062 {
5063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5064 "%s: pWdaParams received NULL", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305065 VOS_ASSERT(0);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305066 return ;
5067 }
Siddharth Bhal171788a2014-09-29 21:02:40 +05305068 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305069
Siddharth Bhal029d6732014-10-09 21:31:23 +05305070 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
Siddharth Bhal171788a2014-09-29 21:02:40 +05305071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhal029d6732014-10-09 21:31:23 +05305072 "%s:Spoofing with rsp status %d", __func__, wdiRsp->wdiStatus);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305073 }
Siddharth Bhal029d6732014-10-09 21:31:23 +05305074 WDA_SendMsg(pWDA, WDA_SPOOF_MAC_ADDR_RSP, NULL,
5075 CONVERT_WDI2SIR_STATUS(wdiRsp->wdiStatus));
Siddharth Bhal171788a2014-09-29 21:02:40 +05305076
Siddharth Bhal171788a2014-09-29 21:02:40 +05305077 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305078 vos_mem_free(pWdaParams->wdaMsgParam);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305079 vos_mem_free(pWdaParams);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305080
5081 return;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305082}
5083
Jeff Johnson295189b2012-06-20 16:38:30 -07005084/*
5085 * FUNCTION: WDA_ProcessRemoveBssKeyReq
5086 * Request to WDI to remove the BSS key( key for broadcast/multicast
5087 * frames Encryption)
5088 */
5089VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
5090 tRemoveBssKeyParams *removeBssKeyParams )
5091{
5092 WDI_Status status = WDI_STATUS_SUCCESS ;
5093 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
5094 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
5095 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
5096 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005098 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005099 if(NULL == wdiRemoveBssKeyParam)
5100 {
5101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005102 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005103 VOS_ASSERT(0);
5104 return VOS_STATUS_E_NOMEM;
5105 }
5106 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5107 if(NULL == pWdaParams)
5108 {
5109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005110 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005111 VOS_ASSERT(0);
5112 vos_mem_free(wdiRemoveBssKeyParam);
5113 return VOS_STATUS_E_NOMEM;
5114 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005115 /* copy Remove BSS key params to WDI structure*/
5116 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
5117 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
5118 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
5119 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
5120 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005121 /* Store remove key pointer, as this will be used for response */
5122 /* store Params pass it to WDI */
5123 pWdaParams->pWdaContext = pWDA;
5124 pWdaParams->wdaMsgParam = removeBssKeyParams;
5125 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005126 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
5127 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005128 if(IS_WDI_STATUS_FAILURE(status))
5129 {
5130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5131 "Failure in Remove BSS Key Req WDI API, free all the memory " );
5132 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5133 vos_mem_free(pWdaParams) ;
5134 removeBssKeyParams->status = eSIR_FAILURE ;
5135 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
5136 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005137 return CONVERT_WDI2VOS_STATUS(status) ;
5138}
Jeff Johnson295189b2012-06-20 16:38:30 -07005139/*
5140 * FUNCTION: WDA_SetBssKeyReqCallback
5141 * send SET BSS key RSP back to PE
5142 */
5143void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
5144{
5145 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5146 tWDA_CbContext *pWDA;
5147 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005149 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005150 if(NULL == pWdaParams)
5151 {
5152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005153 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005154 VOS_ASSERT(0) ;
5155 return ;
5156 }
5157 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5158 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05305159 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
5160 sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005161 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5162 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005163 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005164 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005165 return ;
5166}
Jeff Johnson295189b2012-06-20 16:38:30 -07005167/*
5168 * FUNCTION: WDA_ProcessSetStaKeyReq
5169 * Request to WDI for programming the STA key( key for Unicast frames
5170 * Encryption)
5171 */
5172VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
5173 tSetStaKeyParams *setStaKeyParams )
5174{
5175 WDI_Status status = WDI_STATUS_SUCCESS ;
5176 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5177 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5178 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5179 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005180 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005182 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005183 if(NULL == wdiSetStaKeyParam)
5184 {
5185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005186 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005187 VOS_ASSERT(0);
5188 return VOS_STATUS_E_NOMEM;
5189 }
5190 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5191 if(NULL == pWdaParams)
5192 {
5193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005194 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005195 VOS_ASSERT(0);
5196 vos_mem_free(wdiSetStaKeyParam);
5197 return VOS_STATUS_E_NOMEM;
5198 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005199 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005200 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005201 /* copy set STA key params to WDI structure */
5202 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
5203 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
5204 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
5205 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005206 if(setStaKeyParams->encType != eSIR_ED_NONE)
5207 {
Jeff Johnson43971f52012-07-17 12:26:56 -07005208 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005209 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
5210 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
5211 {
5212 WDA_GetWepKeysFromCfg( pWDA,
5213 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
5214 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
5215 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
5216 }
5217 else
5218 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005219 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5220 keyIndex++)
5221 {
5222 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
5223 setStaKeyParams->key[keyIndex].keyId;
5224 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
5225 setStaKeyParams->key[keyIndex].unicast;
5226 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
5227 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005228 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
5229 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5230 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
5231 setStaKeyParams->key[keyIndex].paeRole;
5232 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
5233 setStaKeyParams->key[keyIndex].keyLength;
5234 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
5235 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
5236 /* set default index to index which have key direction as WDI_TX_DEFAULT */
5237 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
5238 {
5239 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
5240 }
5241 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005242 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
5243 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005244 }
5245 }
5246 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
5247 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005248 /* Store set key pointer, as this will be used for response */
5249 /* store Params pass it to WDI */
5250 pWdaParams->pWdaContext = pWDA;
5251 pWdaParams->wdaMsgParam = setStaKeyParams;
5252 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005253 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
5254 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005255 if(IS_WDI_STATUS_FAILURE(status))
5256 {
5257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5258 "Failure in set STA Key Req WDI API, free all the memory " );
5259 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5260 vos_mem_free(pWdaParams) ;
5261 setStaKeyParams->status = eSIR_FAILURE ;
5262 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
5263 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005264 return CONVERT_WDI2VOS_STATUS(status) ;
5265}
Jeff Johnson295189b2012-06-20 16:38:30 -07005266/*
5267 * FUNCTION: WDA_SetBcastStaKeyReqCallback
5268 * send SET Bcast STA key RSP back to PE
5269 */
5270void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
5271{
5272 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5273 tWDA_CbContext *pWDA;
5274 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005276 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005277 if(NULL == pWdaParams)
5278 {
5279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005280 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005281 VOS_ASSERT(0) ;
5282 return ;
5283 }
5284 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5285 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005286 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5287 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005288 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005289 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005290 return ;
5291}
5292
Jeff Johnson295189b2012-06-20 16:38:30 -07005293/*
5294 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
5295 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
5296 * Encryption)
5297 */
5298VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
5299 tSetStaKeyParams *setStaKeyParams )
5300{
5301 WDI_Status status = WDI_STATUS_SUCCESS ;
5302 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5303 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5304 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5305 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005306 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005308 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005309 if(NULL == wdiSetStaKeyParam)
5310 {
5311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005312 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005313 VOS_ASSERT(0);
5314 return VOS_STATUS_E_NOMEM;
5315 }
5316 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5317 if(NULL == pWdaParams)
5318 {
5319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005320 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005321 VOS_ASSERT(0);
5322 vos_mem_free(wdiSetStaKeyParam);
5323 return VOS_STATUS_E_NOMEM;
5324 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005325 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005326 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005327 /* copy set STA key params to WDI structure */
5328 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
5329 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
5330 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
5331 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005332 if(setStaKeyParams->encType != eSIR_ED_NONE)
5333 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005334 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5335 keyIndex++)
5336 {
5337 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
5338 setStaKeyParams->key[keyIndex].keyId;
5339 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
5340 setStaKeyParams->key[keyIndex].unicast;
5341 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
5342 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005343 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
5344 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5345 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
5346 setStaKeyParams->key[keyIndex].paeRole;
5347 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
5348 setStaKeyParams->key[keyIndex].keyLength;
5349 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
5350 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
5351 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005352 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
5353 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005354 }
5355 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07005356 /* Store set key pointer, as this will be used for response */
5357 /* store Params pass it to WDI */
5358 pWdaParams->pWdaContext = pWDA;
5359 pWdaParams->wdaMsgParam = setStaKeyParams;
5360 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005361 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
5362 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005363 if(IS_WDI_STATUS_FAILURE(status))
5364 {
5365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5366 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
5367 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5368 vos_mem_free(pWdaParams) ;
5369 setStaKeyParams->status = eSIR_FAILURE ;
5370 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
5371 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005372 return CONVERT_WDI2VOS_STATUS(status) ;
5373}
Jeff Johnson295189b2012-06-20 16:38:30 -07005374/*
5375 * FUNCTION: WDA_RemoveStaKeyReqCallback
5376 * send SET BSS key RSP back to PE
5377 */
5378void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
5379{
5380 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5381 tWDA_CbContext *pWDA;
5382 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005384 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005385 if(NULL == pWdaParams)
5386 {
5387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005388 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005389 VOS_ASSERT(0) ;
5390 return ;
5391 }
5392 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5393 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005394 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5395 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005396 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005397 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005398 return ;
5399}
5400
Jeff Johnson295189b2012-06-20 16:38:30 -07005401/*
5402 * FUNCTION: WDA_ProcessRemoveStaKeyReq
5403 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
5404 */
5405VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
5406 tRemoveStaKeyParams *removeStaKeyParams )
5407{
5408 WDI_Status status = WDI_STATUS_SUCCESS ;
5409 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
5410 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
5411 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
5412 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005414 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005415 if(NULL == wdiRemoveStaKeyParam)
5416 {
5417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005418 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005419 VOS_ASSERT(0);
5420 return VOS_STATUS_E_NOMEM;
5421 }
5422 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5423 if(NULL == pWdaParams)
5424 {
5425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005426 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005427 VOS_ASSERT(0);
5428 vos_mem_free(wdiRemoveStaKeyParam);
5429 return VOS_STATUS_E_NOMEM;
5430 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005431 /* copy remove STA key params to WDI structure*/
5432 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
5433 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
5434 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
5435 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
5436 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005437 /* Store remove key pointer, as this will be used for response */
5438 /* store Params pass it to WDI */
5439 pWdaParams->pWdaContext = pWDA;
5440 pWdaParams->wdaMsgParam = removeStaKeyParams;
5441 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005442 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
5443 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005444 if(IS_WDI_STATUS_FAILURE(status))
5445 {
5446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5447 "Failure in remove STA Key Req WDI API, free all the memory " );
5448 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5449 vos_mem_free(pWdaParams) ;
5450 removeStaKeyParams->status = eSIR_FAILURE ;
5451 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
5452 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005453 return CONVERT_WDI2VOS_STATUS(status) ;
5454}
Jeff Johnson295189b2012-06-20 16:38:30 -07005455/*
5456 * FUNCTION: WDA_IsHandleSetLinkStateReq
5457 * Update the WDA state and return the status to handle this message or not
5458 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005459WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
5460 tWDA_CbContext *pWDA,
5461 tLinkStateParams *linkStateParams)
5462{
5463 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005464 switch(linkStateParams->state)
5465 {
5466 case eSIR_LINK_PREASSOC_STATE:
5467 case eSIR_LINK_BTAMP_PREASSOC_STATE:
5468 /*
5469 * set the WDA state to PRE ASSOC
5470 * copy the BSSID into pWDA to use it in join request and return,
5471 * No need to handle these messages.
5472 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005473 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
5474 {
5475 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07005476 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005477 }
5478 else
5479 {
5480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005481 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005482 VOS_ASSERT(0);
5483 }
5484
5485 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
5486 {
5487 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07005488 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005489 }
5490 else
5491 {
5492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005493 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005494 VOS_ASSERT(0);
5495 }
5496
Jeff Johnson295189b2012-06-20 16:38:30 -07005497 /* UMAC is issuing the setlink state with PREASSOC twice (before set
5498 *channel and after ) so reset the WDA state to ready when the second
5499 * time UMAC issue the link state with PREASSOC
5500 */
5501 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
5502 {
5503 /* RESET WDA state back to WDA_READY_STATE */
5504 pWDA->wdaState = WDA_READY_STATE;
5505 }
5506 else
5507 {
5508 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
5509 }
5510 //populate linkState info in WDACbCtxt
5511 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07005512 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07005513 default:
5514 if(pWDA->wdaState != WDA_READY_STATE)
5515 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005516 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
5517 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
5518 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
5519 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
5520 *the ASSERT in WDA_Stop during module unload.*/
5521 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
5522 {
5523 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005524 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005525 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005526 else
5527 {
5528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005529 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005530 status = WDA_IGNORE_SET_LINK_STATE;
5531 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005532 }
5533 break;
5534 }
5535
5536 return status;
5537}
Jeff Johnson295189b2012-06-20 16:38:30 -07005538/*
5539 * FUNCTION: WDA_SetLinkStateCallback
5540 * call back function for set link state from WDI
5541 */
5542void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
5543{
5544 tWDA_CbContext *pWDA;
5545 tLinkStateParams *linkStateParams;
5546 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005548 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005549 if(NULL == pWdaParams)
5550 {
5551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005552 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005553 VOS_ASSERT(0) ;
5554 return ;
5555 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005556 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -07005557 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005558 /*
5559 * In STA mode start the BA activity check timer after association
5560 * and in AP mode start BA activity check timer after BSS start */
5561 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
5562 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07005563 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
5564 ((status == WDI_STATUS_SUCCESS) &&
5565 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07005566 {
5567 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5568 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005569 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005570 /*
5571 * No respone required for WDA_SET_LINK_STATE so free the request
5572 * param here
5573 */
5574 if( pWdaParams != NULL )
5575 {
5576 if( pWdaParams->wdaWdiApiMsgParam != NULL )
5577 {
5578 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5579 }
5580 vos_mem_free(pWdaParams);
5581 }
5582 return ;
5583}
Jeff Johnson295189b2012-06-20 16:38:30 -07005584/*
5585 * FUNCTION: WDA_ProcessSetLinkState
5586 * Request to WDI to set the link status.
5587 */
5588VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
5589 tLinkStateParams *linkStateParams)
5590{
5591 WDI_Status status = WDI_STATUS_SUCCESS ;
5592 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
5593 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
5594 sizeof(WDI_SetLinkReqParamsType)) ;
5595 tWDA_ReqParams *pWdaParams ;
5596 tpAniSirGlobal pMac;
5597 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
5598
5599 if(NULL == pMac)
5600 {
5601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005602 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005603 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005604 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005605 return VOS_STATUS_E_FAILURE;
5606 }
5607
5608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005609 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005610 if(NULL == wdiSetLinkStateParam)
5611 {
5612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005613 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005614 VOS_ASSERT(0);
5615 return VOS_STATUS_E_NOMEM;
5616 }
5617 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5618 if(NULL == pWdaParams)
5619 {
5620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005621 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005622 VOS_ASSERT(0);
5623 vos_mem_free(wdiSetLinkStateParam);
5624 return VOS_STATUS_E_NOMEM;
5625 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005626 if(WDA_IGNORE_SET_LINK_STATE ==
5627 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
5628 {
5629 status = WDI_STATUS_E_FAILURE;
5630 }
5631 else
5632 {
5633 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
5634 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005635 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
5636 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005637 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
5638 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005639 pWdaParams->pWdaContext = pWDA;
5640 /* Store remove key pointer, as this will be used for response */
5641 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005642 /* store Params pass it to WDI */
5643 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
5644 /* Stop Timer only other than GO role and concurrent session */
5645 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07005646 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005647 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
5648 {
5649 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5650 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005651 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
5652 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005653 if(IS_WDI_STATUS_FAILURE(status))
5654 {
5655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5656 "Failure in set link state Req WDI API, free all the memory " );
5657 }
5658 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005659 if(IS_WDI_STATUS_FAILURE(status))
5660 {
5661 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07005662 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005663 vos_mem_free(pWdaParams);
5664 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005665 return CONVERT_WDI2VOS_STATUS(status) ;
5666}
Jeff Johnson295189b2012-06-20 16:38:30 -07005667/*
5668 * FUNCTION: WDA_GetStatsReqParamsCallback
5669 * send the response to PE with Stats received from WDI
5670 */
5671void WDA_GetStatsReqParamsCallback(
5672 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
5673 void* pUserData)
5674{
5675 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5676 tAniGetPEStatsRsp *pGetPEStatsRspParams;
5677
5678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005679 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005680 pGetPEStatsRspParams =
5681 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
5682 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
5683
5684 if(NULL == pGetPEStatsRspParams)
5685 {
5686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005687 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005688 VOS_ASSERT(0);
5689 return;
5690 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005691 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
5692 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
5693 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
5694 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005695
5696 //Fill the Session Id Properly in PE
5697 pGetPEStatsRspParams->sessionId = 0;
5698 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005699 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005700 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
5701 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005702 vos_mem_copy( pGetPEStatsRspParams + 1,
5703 wdiGetStatsRsp + 1,
5704 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005705 /* send response to UMAC*/
5706 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
5707
5708 return;
5709}
5710
Jeff Johnson295189b2012-06-20 16:38:30 -07005711/*
5712 * FUNCTION: WDA_ProcessGetStatsReq
5713 * Request to WDI to get the statistics
5714 */
5715VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
5716 tAniGetPEStatsReq *pGetStatsParams)
5717{
5718 WDI_Status status = WDI_STATUS_SUCCESS ;
5719 WDI_GetStatsReqParamsType wdiGetStatsParam;
5720 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005722 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005723 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
5724 pGetStatsParams->staId;
5725 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
5726 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005727 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005728 status = WDI_GetStatsReq(&wdiGetStatsParam,
5729 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005730 if(IS_WDI_STATUS_FAILURE(status))
5731 {
5732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5733 "Failure in Get Stats Req WDI API, free all the memory " );
5734 pGetPEStatsRspParams =
5735 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
5736 if(NULL == pGetPEStatsRspParams)
5737 {
5738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005739 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005740 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005741 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005742 return VOS_STATUS_E_NOMEM;
5743 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005744 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
5745 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
5746 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
5747 pGetPEStatsRspParams->rc = eSIR_FAILURE;
5748 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
5749 (void *)pGetPEStatsRspParams, 0) ;
5750 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005751 /* Free the request message */
5752 vos_mem_free(pGetStatsParams);
5753 return CONVERT_WDI2VOS_STATUS(status);
5754}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005755
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08005756#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005757/*
5758 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
5759 * send the response to PE with roam Rssi received from WDI
5760 */
5761void WDA_GetRoamRssiReqParamsCallback(
5762 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
5763 void* pUserData)
5764{
5765 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5766 tWDA_CbContext *pWDA = NULL;
5767 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5768 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
5769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5770 "<------ %s " ,__func__);
5771 if(NULL == pWdaParams)
5772 {
5773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5774 "%s: pWdaParams received NULL", __func__);
5775 VOS_ASSERT(0) ;
5776 return ;
5777 }
5778 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5779 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
5780
5781 if(NULL == pGetRoamRssiReqParams)
5782 {
5783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5784 "%s: pGetRoamRssiReqParams received NULL", __func__);
5785 VOS_ASSERT(0);
5786 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5787 vos_mem_free(pWdaParams);
5788 return ;
5789 }
5790 pGetRoamRssiRspParams =
5791 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5792
5793 if(NULL == pGetRoamRssiRspParams)
5794 {
5795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5796 "%s: VOS MEM Alloc Failure", __func__);
5797 VOS_ASSERT(0);
5798 return;
5799 }
5800 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
5801 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005802 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005803 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
5804 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
5805
5806 /* Assign get roam rssi req (backup) in to the response */
5807 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
5808
5809 /* free WDI command buffer */
5810 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5811 vos_mem_free(pWdaParams) ;
5812
5813 /* send response to UMAC*/
5814 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
5815
5816 return;
5817}
5818
5819
5820
5821/*
5822 * FUNCTION: WDA_ProcessGetRoamRssiReq
5823 * Request to WDI to get the statistics
5824 */
5825VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
5826 tAniGetRssiReq *pGetRoamRssiParams)
5827{
5828 WDI_Status status = WDI_STATUS_SUCCESS ;
5829 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
5830 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5831 tWDA_ReqParams *pWdaParams = NULL;
5832
5833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5834 "------> %s " ,__func__);
5835 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
5836 pGetRoamRssiParams->staId;
5837 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
5838
5839 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5840 if(NULL == pWdaParams)
5841 {
5842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5843 "%s: VOS MEM Alloc Failure", __func__);
5844 VOS_ASSERT(0);
5845 return VOS_STATUS_E_NOMEM;
5846 }
5847
5848 /* Store Init Req pointer, as this will be used for response */
5849 pWdaParams->pWdaContext = pWDA;
5850
5851 /* Take Get roam Rssi req backup as it stores the callback to be called after
5852 receiving the response */
5853 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
5854 pWdaParams->wdaWdiApiMsgParam = NULL;
5855
5856 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
5857 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
5858 if(IS_WDI_STATUS_FAILURE(status))
5859 {
5860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5861 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
5862 pGetRoamRssiRspParams =
5863 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5864 if(NULL == pGetRoamRssiRspParams)
5865 {
5866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5867 "%s: VOS MEM Alloc Failure", __func__);
5868 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05305869 vos_mem_free(pGetRoamRssiParams);
5870 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005871 return VOS_STATUS_E_NOMEM;
5872 }
5873 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
5874 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
5875 pGetRoamRssiRspParams->rssi = 0;
5876 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
5877 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
5878 (void *)pGetRoamRssiRspParams, 0) ;
5879 }
5880 return CONVERT_WDI2VOS_STATUS(status);
5881}
5882#endif
5883
5884
Jeff Johnson295189b2012-06-20 16:38:30 -07005885/*
5886 * FUNCTION: WDA_UpdateEDCAParamCallback
5887 * call back function for Update EDCA params from WDI
5888 */
5889void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
5890{
5891 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5892 tEdcaParams *pEdcaParams;
5893
5894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005895 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005896 if(NULL == pWdaParams)
5897 {
5898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005899 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005900 VOS_ASSERT(0) ;
5901 return ;
5902 }
5903 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005904 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5905 vos_mem_free(pWdaParams);
5906 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005907 return ;
5908}
Jeff Johnson295189b2012-06-20 16:38:30 -07005909/*
5910 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
5911 * Request to WDI to Update the EDCA params.
5912 */
5913VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
5914 tEdcaParams *pEdcaParams)
5915{
5916 WDI_Status status = WDI_STATUS_SUCCESS ;
5917 WDI_UpdateEDCAParamsType *wdiEdcaParam =
5918 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
5919 sizeof(WDI_UpdateEDCAParamsType)) ;
5920 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005922 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005923 if(NULL == wdiEdcaParam)
5924 {
5925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005926 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005927 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005928 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005929 return VOS_STATUS_E_NOMEM;
5930 }
5931 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5932 if(NULL == pWdaParams)
5933 {
5934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005935 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005936 VOS_ASSERT(0);
5937 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005938 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005939 return VOS_STATUS_E_NOMEM;
5940 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005941 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07005942 /*
5943 Since firmware is not using highperformance flag, we have removed
5944 this flag from wdiEDCAInfo structure to match sizeof the structure
5945 between host and firmware.In future if we are planning to use
5946 highperformance flag then Please define this flag in wdiEDCAInfo
5947 structure, update it here and send it to firmware. i.e.
5948 Following is the original line which we removed as part of the fix
5949 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
5950 pEdcaParams->highPerformance;
5951 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005952 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
5953 &pEdcaParams->acbe);
5954 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
5955 &pEdcaParams->acbk);
5956 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
5957 &pEdcaParams->acvi);
5958 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
5959 &pEdcaParams->acvo);
5960 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005961 pWdaParams->pWdaContext = pWDA;
5962 /* Store remove key pointer, as this will be used for response */
5963 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005964 /* store Params pass it to WDI */
5965 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005966 status = WDI_UpdateEDCAParams(wdiEdcaParam,
5967 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005968 if(IS_WDI_STATUS_FAILURE(status))
5969 {
5970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5971 "Failure in Update EDCA Params WDI API, free all the memory " );
5972 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5973 vos_mem_free(pWdaParams);
5974 vos_mem_free(pEdcaParams);
5975 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005976 return CONVERT_WDI2VOS_STATUS(status) ;
5977}
Jeff Johnson295189b2012-06-20 16:38:30 -07005978/*
5979 * FUNCTION: WDA_AddBAReqCallback
5980 * send ADD BA RSP back to PE
5981 */
5982void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
5983 void* pUserData)
5984{
5985 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5986 tWDA_CbContext *pWDA;
5987 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005989 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005990 if(NULL == pWdaParams)
5991 {
5992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005993 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005994 VOS_ASSERT(0) ;
5995 return ;
5996 }
5997 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5998 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005999 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6000 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006001 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006002 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006003 return ;
6004}
6005
Jeff Johnson295189b2012-06-20 16:38:30 -07006006/*
6007 * FUNCTION: WDA_ProcessAddBAReq
6008 * Request to WDI to Update the ADDBA REQ params.
6009 */
6010VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
6011 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
6012{
Jeff Johnson43971f52012-07-17 12:26:56 -07006013 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07006014 WDI_AddBAReqParamsType *wdiAddBAReqParam =
6015 (WDI_AddBAReqParamsType *)vos_mem_malloc(
6016 sizeof(WDI_AddBAReqParamsType)) ;
6017 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006019 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006020 if(NULL == wdiAddBAReqParam)
6021 {
6022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006023 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006024 VOS_ASSERT(0);
6025 return VOS_STATUS_E_NOMEM;
6026 }
6027 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6028 if(NULL == pWdaParams)
6029 {
6030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006031 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006032 VOS_ASSERT(0);
6033 vos_mem_free(wdiAddBAReqParam);
6034 return VOS_STATUS_E_NOMEM;
6035 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006036 do
6037 {
6038 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006039 wdiAddBaInfo->ucSTAIdx = staIdx ;
6040 wdiAddBaInfo->ucBaSessionID = baSessionID ;
6041 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006042 } while(0) ;
6043 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006044 pWdaParams->pWdaContext = pWDA;
6045 /* store Params pass it to WDI */
6046 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
6047 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07006048 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
6049 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006050
Jeff Johnson43971f52012-07-17 12:26:56 -07006051 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07006052 {
6053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07006054 "Failure in ADD BA REQ Params WDI API, free all the memory" );
6055 status = CONVERT_WDI2VOS_STATUS(wstatus);
6056 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006057 vos_mem_free(pWdaParams);
6058 pAddBAReqParams->status = eSIR_FAILURE;
6059 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6060 }
Jeff Johnson43971f52012-07-17 12:26:56 -07006061 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07006062}
Jeff Johnson295189b2012-06-20 16:38:30 -07006063/*
6064 * FUNCTION: WDA_AddBASessionReqCallback
6065 * send ADD BA SESSION RSP back to PE/(or TL)
6066 */
6067void WDA_AddBASessionReqCallback(
6068 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
6069{
6070 VOS_STATUS status = VOS_STATUS_SUCCESS ;
6071 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6072 tWDA_CbContext *pWDA;
6073 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006075 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006076 if(NULL == pWdaParams)
6077 {
6078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006079 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006080 VOS_ASSERT(0) ;
6081 return ;
6082 }
6083 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6084 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006085 if( NULL == pAddBAReqParams )
6086 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006088 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006089 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006090 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6091 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006092 return ;
6093 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006094 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6095 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006096 /*
6097 * if WDA in update TL state, update TL with BA session parama and send
6098 * another request to HAL(/WDI) (ADD_BA_REQ)
6099 */
6100
6101 if((VOS_STATUS_SUCCESS ==
6102 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
6103 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
6104 {
6105 /* Update TL with BA info received from HAL/WDI */
6106 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
6107 wdiAddBaSession->usBaSessionID,
6108 wdiAddBaSession->ucSTAIdx,
6109 wdiAddBaSession->ucBaTID,
6110 wdiAddBaSession->ucBaBufferSize,
6111 wdiAddBaSession->ucWinSize,
6112 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07006113 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
6114 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
6115 }
6116 else
6117 {
6118 pAddBAReqParams->status =
6119 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
6120
6121 /* Setting Flag to indicate that Set BA is success */
6122 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
6123 {
6124 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
6125 tANI_U8 tid = wdiAddBaSession->ucBaTID;
6126 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
6127 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006128 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6129 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006130 /*Reset the WDA state to READY */
6131 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006132 return ;
6133}
6134
Jeff Johnson295189b2012-06-20 16:38:30 -07006135/*
6136 * FUNCTION: WDA_ProcessAddBASessionReq
6137 * Request to WDI to Update the ADDBA REQ params.
6138 */
6139VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
6140 tAddBAParams *pAddBAReqParams)
6141{
6142 WDI_Status status = WDI_STATUS_SUCCESS ;
6143 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
6144 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
6145 sizeof(WDI_AddBASessionReqParamsType)) ;
6146 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006147 WLANTL_STAStateType tlSTAState = 0;
6148
Jeff Johnson295189b2012-06-20 16:38:30 -07006149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006150 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006151 if(NULL == wdiAddBASessionReqParam)
6152 {
6153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006154 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006155 VOS_ASSERT(0);
6156 return VOS_STATUS_E_NOMEM;
6157 }
6158 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6159 if(NULL == pWdaParams)
6160 {
6161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006162 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006163 VOS_ASSERT(0);
6164 vos_mem_free(wdiAddBASessionReqParam);
6165 return VOS_STATUS_E_NOMEM;
6166 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006167 /*
6168 * Populate ADD BA parameters and pass these paarmeters to WDI.
6169 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
6170 * the state to track if these is BA recipient case or BA initiator
6171 * case.
6172 */
6173 do
6174 {
6175 WDI_AddBASessionReqinfoType *wdiBAInfoType =
6176 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
6177 /* vos_mem_copy(wdiBAInfoType->macBSSID,
6178 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
6179 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
6180 vos_mem_copy(wdiBAInfoType->macPeerAddr,
6181 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006182 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07006183 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
6184 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
6185 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
6186 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
6187 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07006188 /* check the BA direction and update state accordingly */
6189 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
6190 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
6191 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
6192
6193 }while(0) ;
6194 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006195 pWdaParams->pWdaContext = pWDA;
6196 /* Store ADD BA pointer, as this will be used for response */
6197 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
6198 /* store Params pass it to WDI */
6199 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006200
6201 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
6202 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
6203 */
6204 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
6205 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
6206 {
6207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006208 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07006209 status = WDI_STATUS_E_NOT_ALLOWED;
6210 pAddBAReqParams->status =
6211 CONVERT_WDI2SIR_STATUS(status) ;
6212 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6213 /*Reset the WDA state to READY */
6214 pWDA->wdaState = WDA_READY_STATE;
6215 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6216 vos_mem_free(pWdaParams);
6217
6218 return CONVERT_WDI2VOS_STATUS(status) ;
6219 }
6220
Jeff Johnson295189b2012-06-20 16:38:30 -07006221 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
6222 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006223 if(IS_WDI_STATUS_FAILURE(status))
6224 {
6225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006226 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07006227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006228 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07006229 pAddBAReqParams->status =
6230 CONVERT_WDI2SIR_STATUS(status) ;
6231 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006232 /*Reset the WDA state to READY */
6233 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006234 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006235 vos_mem_free(pWdaParams);
6236 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006237 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006238}
Jeff Johnson295189b2012-06-20 16:38:30 -07006239/*
6240 * FUNCTION: WDA_DelBANotifyTL
6241 * send DEL BA IND to TL
6242 */
6243void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
6244 tDelBAParams *pDelBAReqParams)
6245{
6246 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
6247 //tSirMsgQ msg;
6248 vos_msg_t vosMsg;
6249 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006250 if(NULL == pDelBAInd)
6251 {
6252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006253 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006254 VOS_ASSERT(0) ;
6255 return;
6256 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006257 pDelBAInd->mesgType = WDA_DELETEBA_IND;
6258 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
6259 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
6260 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07006261
Jeff Johnson295189b2012-06-20 16:38:30 -07006262
6263 vosMsg.type = WDA_DELETEBA_IND;
6264 vosMsg.bodyptr = pDelBAInd;
6265 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
6266 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
6267 {
6268 vosStatus = VOS_STATUS_E_BADMSG;
6269 }
6270}
Jeff Johnson295189b2012-06-20 16:38:30 -07006271/*
6272 * FUNCTION: WDA_DelBAReqCallback
6273 * send DEL BA RSP back to PE
6274 */
6275void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
6276{
6277 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6278 tWDA_CbContext *pWDA;
6279 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006281 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006282 if(NULL == pWdaParams)
6283 {
6284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006285 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006286 VOS_ASSERT(0) ;
6287 return ;
6288 }
6289 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6290 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006291 /* Notify TL about DEL BA in case of recipinet */
6292 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
6293 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
6294 {
6295 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
6296 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006297 /*
6298 * No respone required for WDA_DELBA_IND so just free the request
6299 * param here
6300 */
6301 vos_mem_free(pDelBAReqParams);
6302 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6303 vos_mem_free(pWdaParams);
6304 return ;
6305}
6306
Jeff Johnson295189b2012-06-20 16:38:30 -07006307/*
6308 * FUNCTION: WDA_ProcessDelBAReq
6309 * Request to WDI to Update the DELBA REQ params.
6310 */
6311VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
6312 tDelBAParams *pDelBAReqParams)
6313{
6314 WDI_Status status = WDI_STATUS_SUCCESS ;
6315 WDI_DelBAReqParamsType *wdiDelBAReqParam =
6316 (WDI_DelBAReqParamsType *)vos_mem_malloc(
6317 sizeof(WDI_DelBAReqParamsType)) ;
6318 tWDA_ReqParams *pWdaParams ;
6319 tANI_U16 staIdx = 0;
6320 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07006321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006322 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006323 if(NULL == wdiDelBAReqParam)
6324 {
6325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006326 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006327 VOS_ASSERT(0);
6328 return VOS_STATUS_E_NOMEM;
6329 }
6330 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6331 if(NULL == pWdaParams)
6332 {
6333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006334 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006335 VOS_ASSERT(0);
6336 vos_mem_free(wdiDelBAReqParam);
6337 return VOS_STATUS_E_NOMEM;
6338 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006339 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
6340 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
6341 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
6342 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006343 pWdaParams->pWdaContext = pWDA;
6344 /* Store DEL BA pointer, as this will be used for response */
6345 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006346 /* store Params pass it to WDI */
6347 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006348 /* if BA exchange over the air is failed, clear this tid in BaBitmap
6349 * maintained in WDA, so that WDA can retry for another BA session
6350 */
6351 staIdx = pDelBAReqParams->staIdx;
6352 tid = pDelBAReqParams->baTID;
6353 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07006354 status = WDI_DelBAReq(wdiDelBAReqParam,
6355 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006356 if(IS_WDI_STATUS_FAILURE(status))
6357 {
6358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6359 "Failure in DEL BA REQ Params WDI API, free all the memory " );
6360 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6361 vos_mem_free(pWdaParams->wdaMsgParam);
6362 vos_mem_free(pWdaParams);
6363 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006364 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006365}
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006366
6367/*
6368 * FUNCTION: WDA_UpdateChReqCallback
6369 *
6370 */
6371void WDA_UpdateChReqCallback(WDI_Status status, void* pUserData)
6372{
Siddharth Bhala006c122014-05-03 12:13:27 +05306373 tWDA_ReqParams *pWdaParams;
6374 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
6375 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
6376 WDI_UpdateChannelReqinfoType *pChanInfoType;
6377 tSirUpdateChanList *pChanList;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006378
6379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6380 "<------ %s " ,__func__);
Siddharth Bhala006c122014-05-03 12:13:27 +05306381 if(NULL == pUserData)
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006382 {
6383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhala006c122014-05-03 12:13:27 +05306384 "%s: pUserData received NULL", __func__);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006385 VOS_ASSERT(0);
6386 return;
6387 }
6388
Siddharth Bhala006c122014-05-03 12:13:27 +05306389 pWdaParams = (tWDA_ReqParams *)pUserData;
6390 pwdiUpdateChReqParam =
6391 (WDI_UpdateChReqParamsType *)pWdaParams->wdaWdiApiMsgParam;
6392 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
6393 pChanInfoType = pwdiUpdateChanReqType->pchanParam;
6394 pChanList = (tSirUpdateChanList *)pWdaParams->wdaMsgParam;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006395 /*
6396 * currently there is no response message is expected between PE and
6397 * WDA, Failure return from WDI is a ASSERT condition
6398 */
6399 vos_mem_free(pChanInfoType);
6400 vos_mem_free(pChanList);
6401 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6402 vos_mem_free(pWdaParams);
6403
6404 return;
6405}
6406
6407/*
6408 * FUNCTION: WDA_ProcessUpdateChannelList
6409 * Request to WDI to Update the ChannelList params.
6410 */
6411VOS_STATUS WDA_ProcessUpdateChannelList(tWDA_CbContext *pWDA,
6412 tSirUpdateChanList *pChanList)
6413{
6414 WDI_Status status = WDI_STATUS_SUCCESS;
6415 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
6416 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
6417 WDI_UpdateChannelReqinfoType *pChanInfoType;
6418 tWDA_ReqParams *pWdaParams;
6419 wpt_uint8 i;
6420
6421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6422 "------> %s " ,__func__);
6423 if(NULL == pChanList)
6424 {
6425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6426 "%s: NULL pChanList", __func__);
6427 VOS_ASSERT(0);
6428 return VOS_STATUS_E_INVAL;
6429 }
6430
6431 if(!WDA_getFwWlanFeatCaps(UPDATE_CHANNEL_LIST))
6432 {
6433 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6434 "Update channel list capability Not Supported");
6435 vos_mem_free(pChanList);
6436 return VOS_STATUS_E_INVAL;
6437 }
6438
6439 pwdiUpdateChReqParam = (WDI_UpdateChReqParamsType *)vos_mem_malloc(
6440 sizeof(WDI_UpdateChReqParamsType));
6441 if(NULL == pwdiUpdateChReqParam)
6442 {
6443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6444 "%s: VOS MEM Alloc Failed for WDI_UpdateChReqParamsType",
6445 __func__);
6446 VOS_ASSERT(0);
6447 vos_mem_free(pChanList);
6448 return VOS_STATUS_E_NOMEM;
6449 }
6450 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
6451 pChanInfoType = (WDI_UpdateChannelReqinfoType *)
6452 vos_mem_malloc(sizeof(WDI_UpdateChannelReqinfoType) *
6453 pChanList->numChan);
6454 if(NULL == pChanInfoType)
6455 {
6456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6457 "%s: VOS MEM Alloc Failure", __func__);
6458 VOS_ASSERT(0);
6459 vos_mem_free(pChanList);
6460 vos_mem_free(pwdiUpdateChReqParam);
6461 return VOS_STATUS_E_NOMEM;
6462 }
6463 vos_mem_zero(pChanInfoType, sizeof(WDI_UpdateChannelReqinfoType)
6464 * pChanList->numChan);
6465 pwdiUpdateChanReqType->pchanParam = pChanInfoType;
6466
6467 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6468 if(NULL == pWdaParams)
6469 {
6470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6471 "%s: VOS MEM Alloc Failure", __func__);
6472 VOS_ASSERT(0);
6473 vos_mem_free(pChanList);
6474 vos_mem_free(pChanInfoType);
6475 vos_mem_free(pwdiUpdateChReqParam);
6476 return VOS_STATUS_E_NOMEM;
6477 }
6478 pwdiUpdateChanReqType->numchan = pChanList->numChan;
6479
6480 for(i = 0; i < pwdiUpdateChanReqType->numchan; i++)
6481 {
6482 pChanInfoType->mhz =
6483 vos_chan_to_freq(pChanList->chanParam[i].chanId);
6484
6485 pChanInfoType->band_center_freq1 = pChanInfoType->mhz;
6486 pChanInfoType->band_center_freq2 = 0;
6487
6488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6489 "chan[%d] = %u", i, pChanInfoType->mhz);
6490 if (pChanList->chanParam[i].dfsSet)
6491 {
6492 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_PASSIVE);
6493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6494 "chan[%d] DFS[%d]", pChanList->chanParam[i].chanId,
6495 pChanList->chanParam[i].dfsSet);
6496 }
6497
6498 if (pChanInfoType->mhz < WDA_2_4_GHZ_MAX_FREQ)
6499 {
6500 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11G);
6501 }
6502 else
6503 {
6504 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11A);
6505 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_HT);
6506 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_VHT);
6507 }
6508
6509 WDA_SET_CHANNEL_MAX_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
6510 WDA_SET_CHANNEL_REG_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
6511
6512 pChanInfoType++;
6513 }
6514
6515 pwdiUpdateChReqParam->wdiReqStatusCB = NULL;
6516 pWdaParams->pWdaContext = pWDA;
6517 pWdaParams->wdaMsgParam = (void *)pChanList;
6518 /* store Params pass it to WDI */
6519 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiUpdateChReqParam;
6520 status = WDI_UpdateChannelReq(pwdiUpdateChReqParam,
6521 (WDI_UpdateChannelRspCb)WDA_UpdateChReqCallback, pWdaParams);
6522 if(IS_WDI_STATUS_FAILURE(status))
6523 {
6524 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6525 "Failure in Update Channel REQ Params WDI API, free all the memory");
6526 vos_mem_free(pwdiUpdateChanReqType->pchanParam);
6527 vos_mem_free(pwdiUpdateChReqParam);
6528 vos_mem_free(pWdaParams->wdaMsgParam);
6529 vos_mem_free(pWdaParams);
6530 }
6531 return CONVERT_WDI2VOS_STATUS(status);
6532}
6533
Jeff Johnson295189b2012-06-20 16:38:30 -07006534/*
6535 * FUNCTION: WDA_AddTSReqCallback
6536 * send ADD TS RSP back to PE
6537 */
6538void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
6539{
6540 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6541 tWDA_CbContext *pWDA;
6542 tAddTsParams *pAddTsReqParams;
6543
6544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006545 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006546 if(NULL == pWdaParams)
6547 {
6548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006549 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006550 VOS_ASSERT(0) ;
6551 return ;
6552 }
6553 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6554 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
6555 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6556 vos_mem_free(pWdaParams);
6557
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006558 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006559 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006560 return ;
6561}
6562
Jeff Johnson295189b2012-06-20 16:38:30 -07006563/*
6564 * FUNCTION: WDA_ProcessAddTSReq
6565 * Request to WDI to Update the ADD TS REQ params.
6566 */
6567VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
6568 tAddTsParams *pAddTsReqParams)
6569{
6570 WDI_Status status = WDI_STATUS_SUCCESS ;
6571 WDI_AddTSReqParamsType *wdiAddTSReqParam =
6572 (WDI_AddTSReqParamsType *)vos_mem_malloc(
6573 sizeof(WDI_AddTSReqParamsType)) ;
6574 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006576 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006577 if(NULL == wdiAddTSReqParam)
6578 {
6579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006580 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006581 VOS_ASSERT(0);
6582 return VOS_STATUS_E_NOMEM;
6583 }
6584 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6585 if(NULL == pWdaParams)
6586 {
6587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006588 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006589 VOS_ASSERT(0);
6590 vos_mem_free(wdiAddTSReqParam);
6591 return VOS_STATUS_E_NOMEM;
6592 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006593 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
6594 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006595 //TS IE
6596 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
6597 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
6598 pAddTsReqParams->tspec.length;
6599
6600 //TS IE : TS INFO : TRAFFIC
6601 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
6602 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
6603 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
6604 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
6605 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
6606 pAddTsReqParams->tspec.tsinfo.traffic.psb;
6607 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
6608 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
6609 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
6610 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
6611 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
6612 pAddTsReqParams->tspec.tsinfo.traffic.direction;
6613 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
6614 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
6615 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
6616 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
6617
6618 //TS IE : TS INFO : SCHEDULE
6619 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
6620 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
6621 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
6622 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07006623 //TS IE
6624 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
6625 pAddTsReqParams->tspec.nomMsduSz;
6626 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
6627 pAddTsReqParams->tspec.maxMsduSz;
6628 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
6629 pAddTsReqParams->tspec.minSvcInterval;
6630 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
6631 pAddTsReqParams->tspec.maxSvcInterval;
6632 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
6633 pAddTsReqParams->tspec.inactInterval;
6634 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
6635 pAddTsReqParams->tspec.suspendInterval;
6636 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
6637 pAddTsReqParams->tspec.svcStartTime;
6638 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
6639 pAddTsReqParams->tspec.minDataRate;
6640 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
6641 pAddTsReqParams->tspec.meanDataRate;
6642 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
6643 pAddTsReqParams->tspec.peakDataRate;
6644 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
6645 pAddTsReqParams->tspec.maxBurstSz;
6646 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
6647 pAddTsReqParams->tspec.delayBound;
6648 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
6649 pAddTsReqParams->tspec.minPhyRate;
6650 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
6651 pAddTsReqParams->tspec.surplusBw;
6652 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
6653 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07006654 /* TODO: tAddTsParams doesn't have the following fields */
6655#if 0
6656 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6657 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
6658 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6659 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6660#endif
6661 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
6662
6663 pWdaParams->pWdaContext = pWDA;
6664 /* Store ADD TS pointer, as this will be used for response */
6665 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006666 /* store Params pass it to WDI */
6667 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006668 status = WDI_AddTSReq(wdiAddTSReqParam,
6669 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006670 if(IS_WDI_STATUS_FAILURE(status))
6671 {
6672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6673 "Failure in ADD TS REQ Params WDI API, free all the memory " );
6674 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6675 vos_mem_free(pWdaParams);
6676 pAddTsReqParams->status = eSIR_FAILURE ;
6677 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
6678 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006679 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006680}
6681
Jeff Johnson295189b2012-06-20 16:38:30 -07006682/*
6683 * FUNCTION: WDA_DelTSReqCallback
6684 * send DEL TS RSP back to PE
6685 */
6686void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
6687{
6688 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006690 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006691 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6692 vos_mem_free(pWdaParams->wdaMsgParam) ;
6693 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006694 /*
6695 * No respone required for WDA_DEL_TS_REQ so just free the request
6696 * param here
6697 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006698 return ;
6699}
6700
Jeff Johnson295189b2012-06-20 16:38:30 -07006701/*
6702 * FUNCTION: WDA_ProcessDelTSReq
6703 * Request to WDI to Update the DELTS REQ params.
6704 */
6705VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
6706 tDelTsParams *pDelTSReqParams)
6707{
6708 WDI_Status status = WDI_STATUS_SUCCESS ;
6709 WDI_DelTSReqParamsType *wdiDelTSReqParam =
6710 (WDI_DelTSReqParamsType *)vos_mem_malloc(
6711 sizeof(WDI_DelTSReqParamsType)) ;
6712 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006714 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006715 if(NULL == wdiDelTSReqParam)
6716 {
6717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006718 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006719 VOS_ASSERT(0);
6720 return VOS_STATUS_E_NOMEM;
6721 }
6722 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6723 if(NULL == pWdaParams)
6724 {
6725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006726 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006727 VOS_ASSERT(0);
6728 vos_mem_free(wdiDelTSReqParam);
6729 return VOS_STATUS_E_NOMEM;
6730 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006731 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
6732 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
6733 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
6734 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
6735 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006736 pWdaParams->pWdaContext = pWDA;
6737 /* Store DEL TS pointer, as this will be used for response */
6738 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006739 /* store Params pass it to WDI */
6740 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006741 status = WDI_DelTSReq(wdiDelTSReqParam,
6742 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006743 if(IS_WDI_STATUS_FAILURE(status))
6744 {
6745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6746 "Failure in DEL TS REQ Params WDI API, free all the memory " );
6747 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6748 vos_mem_free(pWdaParams->wdaMsgParam);
6749 vos_mem_free(pWdaParams);
6750 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006751 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006752}
Jeff Johnson295189b2012-06-20 16:38:30 -07006753/*
6754 * FUNCTION: WDA_UpdateBeaconParamsCallback
6755 * Free the memory. No need to send any response to PE in this case
6756 */
6757void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
6758{
6759 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006761 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006762 if(NULL == pWdaParams)
6763 {
6764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006765 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006766 VOS_ASSERT(0) ;
6767 return ;
6768 }
6769 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6770 vos_mem_free(pWdaParams->wdaMsgParam) ;
6771 vos_mem_free(pWdaParams);
6772 /*
6773 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
6774 * param here
6775 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006776 return ;
6777}
Jeff Johnson295189b2012-06-20 16:38:30 -07006778/*
6779 * FUNCTION: WDA_ProcessUpdateBeaconParams
6780 * Request to WDI to send the beacon parameters to HAL to update the Hardware
6781 */
6782VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
6783 tUpdateBeaconParams *pUpdateBeaconParams)
6784{
6785 WDI_Status status = WDI_STATUS_SUCCESS ;
6786 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
6787 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
6788 sizeof(WDI_UpdateBeaconParamsType)) ;
6789 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006791 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006792 if(NULL == wdiUpdateBeaconParams)
6793 {
6794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006795 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006796 VOS_ASSERT(0);
6797 return VOS_STATUS_E_NOMEM;
6798 }
6799 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6800 if(NULL == pWdaParams)
6801 {
6802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006803 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006804 VOS_ASSERT(0);
6805 vos_mem_free(wdiUpdateBeaconParams);
6806 return VOS_STATUS_E_NOMEM;
6807 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006808 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
6809 pUpdateBeaconParams->bssIdx;
6810 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
6811 pUpdateBeaconParams->fShortPreamble;
6812 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
6813 pUpdateBeaconParams->fShortSlotTime;
6814 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
6815 pUpdateBeaconParams->beaconInterval;
6816 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
6817 pUpdateBeaconParams->llaCoexist;
6818 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
6819 pUpdateBeaconParams->llbCoexist;
6820 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
6821 pUpdateBeaconParams->llgCoexist;
6822 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
6823 pUpdateBeaconParams->ht20MhzCoexist;
6824 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
6825 pUpdateBeaconParams->llnNonGFCoexist;
6826 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
6827 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
6828 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
6829 pUpdateBeaconParams->fRIFSMode;
6830 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
6831 pUpdateBeaconParams->paramChangeBitmap;
6832 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
6833
6834 pWdaParams->pWdaContext = pWDA;
6835 /* Store UpdateBeacon Req pointer, as this will be used for response */
6836 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006837 /* store Params pass it to WDI */
6838 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006839 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
6840 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
6841 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006842 if(IS_WDI_STATUS_FAILURE(status))
6843 {
6844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6845 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
6846 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6847 vos_mem_free(pWdaParams->wdaMsgParam);
6848 vos_mem_free(pWdaParams);
6849 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006850 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006851}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08006852#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -07006853/*
6854 * FUNCTION: WDA_TSMStatsReqCallback
6855 * send TSM Stats RSP back to PE
6856 */
6857void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
6858{
6859 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6860 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006861 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
6862 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006863
6864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006865 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006866 if(NULL == pWdaParams)
6867 {
6868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006869 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006870 VOS_ASSERT(0) ;
6871 return ;
6872 }
6873 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006874 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
6875
6876 if(NULL == pGetTsmStatsReqParams)
6877 {
6878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6879 "%s: pGetTsmStatsReqParams received NULL", __func__);
6880 VOS_ASSERT(0);
6881 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6882 vos_mem_free(pWdaParams);
6883 return;
6884 }
6885
6886 pTsmRspParams =
6887 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07006888 if( NULL == pTsmRspParams )
6889 {
6890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006891 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006892 VOS_ASSERT( 0 );
6893 return ;
6894 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006895 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
6896 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
6897 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
6898
Jeff Johnson295189b2012-06-20 16:38:30 -07006899 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
6900 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
6901 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
6902 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
6903 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
6904 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
6905 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
6906 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
6907 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
6908 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006909
6910 /* Assign get tsm stats req req (backup) in to the response */
6911 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
6912
6913 /* free WDI command buffer */
6914 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6915 vos_mem_free(pWdaParams);
6916
Jeff Johnson295189b2012-06-20 16:38:30 -07006917 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006918 return ;
6919}
6920
6921
Jeff Johnson295189b2012-06-20 16:38:30 -07006922/*
6923 * FUNCTION: WDA_ProcessTsmStatsReq
6924 * Request to WDI to get the TSM Stats params.
6925 */
6926VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006927 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07006928{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006929 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006930 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006931 tWDA_ReqParams *pWdaParams = NULL;
6932 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
6933
Jeff Johnson295189b2012-06-20 16:38:30 -07006934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006935 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006936 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
6937 sizeof(WDI_TSMStatsReqParamsType));
6938 if(NULL == wdiTSMReqParam)
6939 {
6940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006941 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006942 VOS_ASSERT(0);
6943 return VOS_STATUS_E_NOMEM;
6944 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006945 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6946 if(NULL == pWdaParams)
6947 {
6948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006949 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006950 VOS_ASSERT(0);
6951 vos_mem_free(wdiTSMReqParam);
6952 return VOS_STATUS_E_NOMEM;
6953 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006954 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
6955 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
6956 pTsmStats->bssId,
6957 sizeof(wpt_macAddr));
6958 wdiTSMReqParam->wdiReqStatusCB = NULL ;
6959
6960 pWdaParams->pWdaContext = pWDA;
6961 /* Store TSM Stats pointer, as this will be used for response */
6962 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006963 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006964 status = WDI_TSMStatsReq(wdiTSMReqParam,
6965 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006966 if(IS_WDI_STATUS_FAILURE(status))
6967 {
6968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6969 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006970 vos_mem_free(pWdaParams);
6971
6972 pGetTsmStatsRspParams =
6973 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
6974 if(NULL == pGetTsmStatsRspParams)
6975 {
6976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6977 "%s: VOS MEM Alloc Failure", __func__);
6978 VOS_ASSERT(0);
6979 vos_mem_free(pTsmStats);
6980 return VOS_STATUS_E_NOMEM;
6981 }
6982 pGetTsmStatsRspParams->staId = pTsmStats->staId;
6983 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
6984 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
6985
6986 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006987 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006988 return CONVERT_WDI2VOS_STATUS(status) ;
6989}
6990#endif
6991/*
6992 * FUNCTION: WDA_SendBeaconParamsCallback
6993 * No need to send any response to PE in this case
6994 */
6995void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
6996{
6997
Jeff Johnson295189b2012-06-20 16:38:30 -07006998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006999 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007000 return ;
7001}
Jeff Johnson295189b2012-06-20 16:38:30 -07007002/*
7003 * FUNCTION: WDA_ProcessSendBeacon
7004 * Request to WDI to send the beacon template to HAL to update the TPE memory and
7005 * start beacon trasmission
7006 */
7007VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
7008 tSendbeaconParams *pSendbeaconParams)
7009{
7010 WDI_Status status = WDI_STATUS_SUCCESS ;
7011 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007013 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007014 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
7015 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
7016 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
7017 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07007018 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
7019 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05307020 /* p2pIeOffset should be atleast greater than timIeOffset */
7021 if ((pSendbeaconParams->p2pIeOffset != 0) &&
7022 (pSendbeaconParams->p2pIeOffset <
7023 pSendbeaconParams->timIeOffset))
7024 {
7025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7026 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
7027 VOS_ASSERT( 0 );
7028 return WDI_STATUS_E_FAILURE;
7029 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007030 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
7031 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07007032 /* Copy the beacon template to local buffer */
7033 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
7034 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
7035 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
7036
Jeff Johnson295189b2012-06-20 16:38:30 -07007037 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
7038 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007039 if(IS_WDI_STATUS_FAILURE(status))
7040 {
7041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7042 "Failure in SEND BEACON REQ Params WDI API" );
7043 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007044 vos_mem_free(pSendbeaconParams);
7045 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007046}
Jeff Johnson295189b2012-06-20 16:38:30 -07007047/*
7048 * FUNCTION: WDA_UpdateProbeRspParamsCallback
7049 * No need to send any response to PE in this case
7050 */
7051void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
7052{
Jeff Johnson295189b2012-06-20 16:38:30 -07007053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007054 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007055 return ;
7056}
7057
Jeff Johnson295189b2012-06-20 16:38:30 -07007058/*
7059 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
7060 * Request to WDI to send the probe response template to HAL to update the TPE memory and
7061 * send probe response
7062 */
7063VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
7064 tSendProbeRespParams *pSendProbeRspParams)
7065{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007066 WDI_Status status = WDI_STATUS_SUCCESS;
7067 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
7068 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07007069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007070 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007071
7072 if (!wdiSendProbeRspParam)
7073 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
7074
Jeff Johnson295189b2012-06-20 16:38:30 -07007075 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007076 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07007077 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007078 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07007079 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07007080 /* Copy the Probe Response template to local buffer */
7081 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007082 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07007083 pSendProbeRspParams->pProbeRespTemplate,
7084 pSendProbeRspParams->probeRespTemplateLen);
7085 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007086 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07007087 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
7088 WDI_PROBE_REQ_BITMAP_IE_LEN);
7089
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007090 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007091
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007092 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07007093 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007094 if(IS_WDI_STATUS_FAILURE(status))
7095 {
7096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7097 "Failure in SEND Probe RSP Params WDI API" );
7098 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007099 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007100 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007101 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007102}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007103#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -07007104/*
7105 * FUNCTION: WDA_SetMaxTxPowerCallBack
7106 * send the response to PE with power value received from WDI
7107 */
7108void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
7109 void* pUserData)
7110{
7111 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7112 tWDA_CbContext *pWDA = NULL;
7113 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
7114
7115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007116 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007117 if(NULL == pWdaParams)
7118 {
7119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007120 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007121 VOS_ASSERT(0) ;
7122 return ;
7123 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007124 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7125 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007126 if( NULL == pMaxTxPowerParams )
7127 {
7128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007129 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07007130 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007131 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7132 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007133 return ;
7134 }
Jeff Johnsone7245742012-09-05 17:12:55 -07007135
Jeff Johnson295189b2012-06-20 16:38:30 -07007136
7137 /*need to free memory for the pointers used in the
7138 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007139 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7140 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007141 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07007142
Jeff Johnson295189b2012-06-20 16:38:30 -07007143
7144 /* send response to UMAC*/
7145 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
7146
7147 return;
7148}
Jeff Johnson295189b2012-06-20 16:38:30 -07007149/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007150 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07007151 * Request to WDI to send set Max Tx Power Request
7152 */
7153 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
7154 tMaxTxPowerParams *MaxTxPowerParams)
7155{
7156 WDI_Status status = WDI_STATUS_SUCCESS;
7157 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
7158 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007159
Jeff Johnson295189b2012-06-20 16:38:30 -07007160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007161 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007162
Jeff Johnson295189b2012-06-20 16:38:30 -07007163 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
7164 sizeof(WDI_SetMaxTxPowerParamsType));
7165 if(NULL == wdiSetMaxTxPowerParams)
7166 {
7167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007168 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007169 VOS_ASSERT(0);
7170 return VOS_STATUS_E_NOMEM;
7171 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007172 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7173 if(NULL == pWdaParams)
7174 {
7175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007176 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007177 vos_mem_free(wdiSetMaxTxPowerParams);
7178 VOS_ASSERT(0);
7179 return VOS_STATUS_E_NOMEM;
7180 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007181 /* Copy.Max.Tx.Power Params to WDI structure */
7182 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
7183 MaxTxPowerParams->bssId,
7184 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007185 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
7186 MaxTxPowerParams->selfStaMacAddr,
7187 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007188 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
7189 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07007190 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007191 pWdaParams->pWdaContext = pWDA;
7192 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007193 /* store Params pass it to WDI */
7194 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007195 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
7196 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007197 if(IS_WDI_STATUS_FAILURE(status))
7198 {
7199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7200 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
7201 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7202 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007203 /* send response to UMAC*/
7204 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007205 }
7206 return CONVERT_WDI2VOS_STATUS(status);
7207
7208}
Jeff Johnson295189b2012-06-20 16:38:30 -07007209#endif
schang86c22c42013-03-13 18:41:24 -07007210
7211/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07007212 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
7213 * send the response to PE with power value received from WDI
7214 */
7215void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
7216 *pwdiSetMaxTxPowerPerBandRsp,
7217 void* pUserData)
7218{
7219 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7220 tWDA_CbContext *pWDA = NULL;
7221 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
7222
7223 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7224 "<------ %s ", __func__);
7225 if (NULL == pWdaParams)
7226 {
7227 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7228 "%s: pWdaParams received NULL", __func__);
7229 VOS_ASSERT(0);
7230 return ;
7231 }
7232 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7233 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
7234 if ( NULL == pMxTxPwrPerBandParams )
7235 {
7236 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7237 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
7238 VOS_ASSERT(0);
7239 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7240 vos_mem_free(pWdaParams);
7241 return;
7242 }
7243
7244 /*need to free memory for the pointers used in the
7245 WDA Process.Set Max Tx Power Req function*/
7246 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7247 vos_mem_free(pWdaParams);
7248 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
7249
7250 /* send response to UMAC*/
7251 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
7252 pMxTxPwrPerBandParams, 0);
7253
7254 return;
7255}
7256
7257/*
7258 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
7259 * Request to WDI to send set Max Tx Power Per band Request
7260 */
7261 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
7262 tMaxTxPowerPerBandParams
7263 *MaxTxPowerPerBandParams)
7264{
7265 WDI_Status status = WDI_STATUS_SUCCESS;
7266 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
7267 tWDA_ReqParams *pWdaParams = NULL;
7268
7269 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7270 "------> %s ", __func__);
7271
7272 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
7273 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
7274
7275 if (NULL == wdiSetMxTxPwrPerBandParams)
7276 {
7277 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7278 "%s: VOS MEM Alloc Failure", __func__);
7279 VOS_ASSERT(0);
7280 return VOS_STATUS_E_NOMEM;
7281 }
7282 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7283 if (NULL == pWdaParams)
7284 {
7285 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7286 "%s: VOS MEM Alloc Failure", __func__);
7287 vos_mem_free(wdiSetMxTxPwrPerBandParams);
7288 VOS_ASSERT(0);
7289 return VOS_STATUS_E_NOMEM;
7290 }
7291 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
7292 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
7293 MaxTxPowerPerBandParams->bandInfo;
7294 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
7295 MaxTxPowerPerBandParams->power;
7296 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
7297 pWdaParams->pWdaContext = pWDA;
7298 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
7299 /* store Params pass it to WDI */
7300 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
7301 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
7302 WDA_SetMaxTxPowerPerBandCallBack,
7303 pWdaParams);
7304 if (IS_WDI_STATUS_FAILURE(status))
7305 {
7306 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7307 "Failure in SET MAX TX Power REQ Params WDI API,"
7308 " free all the memory");
7309 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7310 vos_mem_free(pWdaParams);
7311 /* send response to UMAC*/
7312 WDA_SendMsg(pWDA,
7313 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
7314 MaxTxPowerPerBandParams, 0);
7315 }
7316 return CONVERT_WDI2VOS_STATUS(status);
7317}
7318
7319/*
schang86c22c42013-03-13 18:41:24 -07007320 * FUNCTION: WDA_SetTxPowerCallBack
7321 * send the response to PE with power value received from WDI
7322 */
7323void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
7324 void* pUserData)
7325{
7326 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7327 tWDA_CbContext *pWDA = NULL;
7328 tSirSetTxPowerReq *pTxPowerParams = NULL;
7329
7330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7331 "<------ %s ", __func__);
7332 if(NULL == pWdaParams)
7333 {
7334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7335 "%s: pWdaParams received NULL", __func__);
7336 VOS_ASSERT(0) ;
7337 return ;
7338 }
7339 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7340 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
7341 if(NULL == pTxPowerParams)
7342 {
7343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7344 "%s: pTxPowerParams received NULL " ,__func__);
7345 VOS_ASSERT(0);
7346 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7347 vos_mem_free(pWdaParams);
7348 return ;
7349 }
7350
7351 /*need to free memory for the pointers used in the
7352 WDA Process.Set Max Tx Power Req function*/
7353 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7354 vos_mem_free(pWdaParams);
7355
7356 /* send response to UMAC*/
7357 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
7358 return;
7359}
7360
7361/*
7362 * FUNCTION: WDA_ProcessSetTxPowerReq
7363 * Request to WDI to send set Tx Power Request
7364 */
7365 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
7366 tSirSetTxPowerReq *txPowerParams)
7367{
7368 WDI_Status status = WDI_STATUS_SUCCESS;
7369 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
7370 tWDA_ReqParams *pWdaParams = NULL;
7371
7372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7373 "------> %s ", __func__);
7374
7375 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
7376 sizeof(WDI_SetTxPowerParamsType));
7377 if(NULL == wdiSetTxPowerParams)
7378 {
7379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7380 "%s: VOS MEM Alloc Failure", __func__);
7381 VOS_ASSERT(0);
7382 return VOS_STATUS_E_NOMEM;
7383 }
7384 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7385 if(NULL == pWdaParams)
7386 {
7387 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7388 "%s: VOS MEM Alloc Failure", __func__);
7389 vos_mem_free(wdiSetTxPowerParams);
7390 VOS_ASSERT(0);
7391 return VOS_STATUS_E_NOMEM;
7392 }
7393 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
7394 txPowerParams->bssIdx;
7395 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
7396 txPowerParams->mwPower;
7397 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
7398 pWdaParams->pWdaContext = pWDA;
7399 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
7400 /* store Params pass it to WDI */
7401 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
7402 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
7403 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
7404 if(IS_WDI_STATUS_FAILURE(status))
7405 {
7406 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7407 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
7408 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7409 vos_mem_free(pWdaParams);
7410 /* send response to UMAC*/
7411 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
7412 }
7413 return CONVERT_WDI2VOS_STATUS(status);
7414}
7415
Jeff Johnson295189b2012-06-20 16:38:30 -07007416/*
7417 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7418 * Free the memory. No need to send any response to PE in this case
7419 */
7420void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
7421{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007422 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7423
Jeff Johnson295189b2012-06-20 16:38:30 -07007424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007425 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007426
7427 if(NULL == pWdaParams)
7428 {
7429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007430 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007431 VOS_ASSERT(0) ;
7432 return ;
7433 }
7434
7435 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7436 vos_mem_free(pWdaParams->wdaMsgParam) ;
7437 vos_mem_free(pWdaParams);
7438
Jeff Johnson295189b2012-06-20 16:38:30 -07007439 /*
7440 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
7441 * so just free the request param here
7442 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007443 return ;
7444}
7445
Jeff Johnson295189b2012-06-20 16:38:30 -07007446/*
7447 * FUNCTION: WDA_ProcessSetP2PGONOAReq
7448 * Request to WDI to set the P2P Group Owner Notice of Absence Req
7449 */
7450VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
7451 tP2pPsParams *pP2pPsConfigParams)
7452{
7453 WDI_Status status = WDI_STATUS_SUCCESS ;
7454 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
7455 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
7456 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007457 tWDA_ReqParams *pWdaParams = NULL;
7458
Jeff Johnson295189b2012-06-20 16:38:30 -07007459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007460 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007461 if(NULL == wdiSetP2PGONOAReqParam)
7462 {
7463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007464 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007465 VOS_ASSERT(0);
7466 return VOS_STATUS_E_NOMEM;
7467 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007468
7469 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7470 if(NULL == pWdaParams)
7471 {
7472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007473 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007474 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007475 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007476 VOS_ASSERT(0);
7477 return VOS_STATUS_E_NOMEM;
7478 }
7479
Jeff Johnson295189b2012-06-20 16:38:30 -07007480 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
7481 pP2pPsConfigParams->opp_ps;
7482 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
7483 pP2pPsConfigParams->ctWindow;
7484 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
7485 pP2pPsConfigParams->count;
7486 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
7487 pP2pPsConfigParams->duration;
7488 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
7489 pP2pPsConfigParams->interval;
7490 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
7491 pP2pPsConfigParams->single_noa_duration;
7492 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
7493 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007494
Jeff Johnson295189b2012-06-20 16:38:30 -07007495 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
7496 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007497 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
7498
Jeff Johnson295189b2012-06-20 16:38:30 -07007499 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007500 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
7501 pWdaParams->pWdaContext = pWDA;
7502
Jeff Johnson295189b2012-06-20 16:38:30 -07007503 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007504 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
7505
Jeff Johnson295189b2012-06-20 16:38:30 -07007506 if(IS_WDI_STATUS_FAILURE(status))
7507 {
7508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7509 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007510 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7511 vos_mem_free(pWdaParams->wdaMsgParam);
7512 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007513 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007514 return CONVERT_WDI2VOS_STATUS(status);
7515
Jeff Johnson295189b2012-06-20 16:38:30 -07007516}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307517
7518#ifdef FEATURE_WLAN_TDLS
7519/*
7520 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7521 * Free the memory. No need to send any response to PE in this case
7522 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307523void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
7524 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307525{
7526 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7527 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307528 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307529
7530
7531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7532 "<------ %s " ,__func__);
7533 if(NULL == pWdaParams)
7534 {
7535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7536 "%s: pWdaParams received NULL", __func__);
7537 VOS_ASSERT(0) ;
7538 return ;
7539 }
7540 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7541
7542 if(NULL == pWdaParams)
7543 {
7544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7545 "%s: pWdaParams received NULL", __func__);
7546 VOS_ASSERT(0) ;
7547 return ;
7548 }
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307549 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
7550 if( NULL == pTdlsLinkEstablishParams )
7551 {
7552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7553 "%s: pTdlsLinkEstablishParams "
7554 "received NULL " ,__func__);
7555 VOS_ASSERT(0);
7556 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7557 vos_mem_free(pWdaParams);
7558 return ;
7559 }
7560 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
7561 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307562 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307563 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307564 /* send response to UMAC*/
7565 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
7566
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307567 return ;
7568}
7569
7570VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
7571 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
7572{
7573 WDI_Status status = WDI_STATUS_SUCCESS ;
7574 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
7575 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
7576 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
7577 tWDA_ReqParams *pWdaParams = NULL;
7578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7579 "------> %s " ,__func__);
7580 if(NULL == wdiSetTDLSLinkEstablishReqParam)
7581 {
7582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7583 "%s: VOS MEM Alloc Failure", __func__);
7584 VOS_ASSERT(0);
7585 return VOS_STATUS_E_NOMEM;
7586 }
7587 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7588 if(NULL == pWdaParams)
7589 {
7590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7591 "%s: VOS MEM Alloc Failure", __func__);
7592 vos_mem_free(pTdlsLinkEstablishParams);
7593 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
7594 VOS_ASSERT(0);
7595 return VOS_STATUS_E_NOMEM;
7596 }
7597 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307598 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307599 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307600 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307601 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307602 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307603 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307604 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307605 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307606 pTdlsLinkEstablishParams->isBufsta;
Naresh Jayaramc7cbd782014-02-04 17:38:23 +05307607 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsOffChannelSupported =
7608 pTdlsLinkEstablishParams->isOffChannelSupported;
7609
7610 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannels,
7611 pTdlsLinkEstablishParams->validChannels,
7612 pTdlsLinkEstablishParams->validChannelsLen);
7613
7614 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannelsLen =
7615 pTdlsLinkEstablishParams->validChannelsLen;
7616
7617 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClasses,
7618 pTdlsLinkEstablishParams->validOperClasses,
7619 pTdlsLinkEstablishParams->validOperClassesLen);
7620 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClassesLen =
7621 pTdlsLinkEstablishParams->validOperClassesLen;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307622
7623 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
7624 /* Store msg pointer from PE, as this will be used for response */
7625 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
7626 /* store Params pass it to WDI */
7627 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
7628 pWdaParams->pWdaContext = pWDA;
7629
7630 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
7631 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
7632 WDA_SetTDLSLinkEstablishReqParamsCallback,
7633 pWdaParams);
7634 if(IS_WDI_STATUS_FAILURE(status))
7635 {
7636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7637 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
7638 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7639 vos_mem_free(pWdaParams->wdaMsgParam);
7640 vos_mem_free(pWdaParams);
7641 }
7642 return CONVERT_WDI2VOS_STATUS(status);
7643}
Atul Mittalc0f739f2014-07-31 13:47:47 +05307644
7645// tdlsoffchan
7646void WDA_SetTDLSChanSwitchReqParamsCallback(WDI_SetTdlsChanSwitchReqResp *wdiSetTdlsChanSwitchReqRsp,
7647 void* pUserData)
7648{
7649 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7650 tWDA_CbContext *pWDA = NULL;
7651 tTdlsChanSwitchParams *pTdlsChanSwitchParams;
7652
7653
7654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7655 "<------ %s " ,__func__);
7656 if(NULL == pWdaParams)
7657 {
7658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7659 "%s: pWdaParams received NULL", __func__);
Atul Mittalc0f739f2014-07-31 13:47:47 +05307660 VOS_ASSERT(0) ;
7661 return ;
7662 }
7663 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7664
Atul Mittal60bd4292014-08-14 12:19:27 +05307665 if(NULL == pWdaParams)
7666 {
7667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7668 "%s: pWdaParams received NULL", __func__);
7669 VOS_ASSERT(0) ;
7670 return ;
7671 }
Atul Mittalc0f739f2014-07-31 13:47:47 +05307672 pTdlsChanSwitchParams = (tTdlsChanSwitchParams *)pWdaParams->wdaMsgParam ;
Atul Mittal60bd4292014-08-14 12:19:27 +05307673 if( NULL == pTdlsChanSwitchParams )
Atul Mittalc0f739f2014-07-31 13:47:47 +05307674 {
7675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7676 "%s: pTdlsChanSwitchParams "
7677 "received NULL " ,__func__);
7678 VOS_ASSERT(0);
7679 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7680 vos_mem_free(pWdaParams);
7681 return ;
7682 }
7683 pTdlsChanSwitchParams->status = CONVERT_WDI2SIR_STATUS(
7684 wdiSetTdlsChanSwitchReqRsp->wdiStatus);
Atul Mittalc0f739f2014-07-31 13:47:47 +05307685 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7686 vos_mem_free(pWdaParams);
Atul Mittal60bd4292014-08-14 12:19:27 +05307687 /* send response to UMAC*/
7688 WDA_SendMsg(pWDA, WDA_SET_TDLS_CHAN_SWITCH_REQ_RSP, pTdlsChanSwitchParams, 0) ;
Atul Mittalc0f739f2014-07-31 13:47:47 +05307689
7690 return ;
7691}
7692VOS_STATUS WDA_ProcessSetTdlsChanSwitchReq(tWDA_CbContext *pWDA,
7693 tTdlsChanSwitchParams *pTdlsChanSwitchParams)
7694{
7695 WDI_Status status = WDI_STATUS_SUCCESS ;
7696 WDI_SetTDLSChanSwitchReqParamsType *wdiSetTDLSChanSwitchReqParam =
7697 (WDI_SetTDLSChanSwitchReqParamsType *)vos_mem_malloc(
7698 sizeof(WDI_SetTDLSChanSwitchReqParamsType));
7699 tWDA_ReqParams *pWdaParams = NULL;
7700
7701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7702 "Enter: %s ",__func__);
7703 if(NULL == wdiSetTDLSChanSwitchReqParam)
7704 {
7705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7706 "%s: VOS MEM Alloc Failure", __func__);
7707 VOS_ASSERT(0);
7708 return VOS_STATUS_E_NOMEM;
7709 }
7710
7711 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7712 if(NULL == pWdaParams)
7713 {
7714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7715 "%s: VOS MEM Alloc Failure", __func__);
7716 vos_mem_free(pTdlsChanSwitchParams);
7717 vos_mem_free(wdiSetTDLSChanSwitchReqParam);
7718 VOS_ASSERT(0);
7719 return VOS_STATUS_E_NOMEM;
7720 }
7721 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.staIdx =
7722 pTdlsChanSwitchParams->staIdx;
7723 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.isOffchannelInitiator =
7724 pTdlsChanSwitchParams->tdlsSwMode;
7725 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetOperClass =
7726 pTdlsChanSwitchParams->operClass;
7727 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetChannel =
7728 pTdlsChanSwitchParams->tdlsOffCh;
7729 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.secondaryChannelOffset =
7730 pTdlsChanSwitchParams->tdlsOffChBwOffset;
7731
7732
7733 /* Store msg pointer from PE, as this will be used for response */
7734 pWdaParams->wdaMsgParam = (void *)pTdlsChanSwitchParams ;
7735 /* store Params pass it to WDI */
7736 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSChanSwitchReqParam ;
7737 pWdaParams->pWdaContext = pWDA;
7738 status = WDI_SetTDLSChanSwitchReq(wdiSetTDLSChanSwitchReqParam,
7739 (WDI_SetTDLSChanSwitchReqParamsRspCb)
7740 WDA_SetTDLSChanSwitchReqParamsCallback,
7741 pWdaParams);
7742 if(IS_WDI_STATUS_FAILURE(status))
7743 {
7744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7745 "Failure in TDLS Channel Switch Req WDI API, free all the memory" );
7746 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7747 vos_mem_free(pWdaParams->wdaMsgParam);
7748 vos_mem_free(pWdaParams);
7749 }
7750 return CONVERT_WDI2VOS_STATUS(status);
7751}
7752#endif /*FEATURE_WLAN_TDLS*/
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307753
7754
Jeff Johnson295189b2012-06-20 16:38:30 -07007755#ifdef WLAN_FEATURE_VOWIFI_11R
7756/*
7757 * FUNCTION: WDA_AggrAddTSReqCallback
7758 * send ADD AGGREGATED TS RSP back to PE
7759 */
7760void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
7761{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007762 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7763 tWDA_CbContext *pWDA;
7764 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007765 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07007766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007767 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007768 if(NULL == pWdaParams)
7769 {
7770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007771 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007772 VOS_ASSERT(0) ;
7773 return ;
7774 }
7775
7776 pWDA = pWdaParams->pWdaContext;
7777 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007778
7779 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
7780 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007781 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007782 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007783 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007784
7785 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7786 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007787 return ;
7788}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07007789/*
7790 * FUNCTION: WDA_ProcessAddTSReq
7791 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
7792 */
7793VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
7794 tAggrAddTsParams *pAggrAddTsReqParams)
7795{
7796 WDI_Status status = WDI_STATUS_SUCCESS ;
7797 int i;
7798 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007799 tWDA_ReqParams *pWdaParams = NULL;
7800
7801
Jeff Johnson295189b2012-06-20 16:38:30 -07007802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007803 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007804 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
7805 sizeof(WDI_AggrAddTSReqParamsType)) ;
7806 if(NULL == wdiAggrAddTSReqParam)
7807 {
7808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007809 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007810 VOS_ASSERT(0);
7811 return VOS_STATUS_E_NOMEM;
7812 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007813
7814
7815 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7816 if(NULL == pWdaParams)
7817 {
7818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007819 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007820 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007821 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007822 VOS_ASSERT(0);
7823 return VOS_STATUS_E_NOMEM;
7824 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007825 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
7826 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
7827 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007828 for( i = 0; i < WDI_MAX_NO_AC; i++ )
7829 {
7830 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
7831 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
7832 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07007833 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
7834 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
7835 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
7836 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
7837 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
7838 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
7839 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
7840 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
7841 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
7842 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
7843 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
7844 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
7845 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
7846 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
7847 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
7848 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07007849 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
7850 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07007851 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
7852 pAggrAddTsReqParams->tspec[i].nomMsduSz;
7853 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
7854 pAggrAddTsReqParams->tspec[i].maxMsduSz;
7855 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
7856 pAggrAddTsReqParams->tspec[i].minSvcInterval;
7857 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
7858 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
7859 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
7860 pAggrAddTsReqParams->tspec[i].inactInterval;
7861 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
7862 pAggrAddTsReqParams->tspec[i].suspendInterval;
7863 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
7864 pAggrAddTsReqParams->tspec[i].svcStartTime;
7865 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
7866 pAggrAddTsReqParams->tspec[i].minDataRate;
7867 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
7868 pAggrAddTsReqParams->tspec[i].meanDataRate;
7869 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
7870 pAggrAddTsReqParams->tspec[i].peakDataRate;
7871 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
7872 pAggrAddTsReqParams->tspec[i].maxBurstSz;
7873 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
7874 pAggrAddTsReqParams->tspec[i].delayBound;
7875 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
7876 pAggrAddTsReqParams->tspec[i].minPhyRate;
7877 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
7878 pAggrAddTsReqParams->tspec[i].surplusBw;
7879 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
7880 pAggrAddTsReqParams->tspec[i].mediumTime;
7881 }
7882
7883 /* TODO: tAggrAddTsParams doesn't have the following fields */
7884#if 0
7885 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
7886 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
7887 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
7888 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
7889#endif
7890 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
7891
7892 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007893 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007894 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007895 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
7896
7897 pWdaParams->pWdaContext = pWDA;
7898
Jeff Johnson295189b2012-06-20 16:38:30 -07007899 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007900 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
7901
Jeff Johnson295189b2012-06-20 16:38:30 -07007902 if(IS_WDI_STATUS_FAILURE(status))
7903 {
7904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7905 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007906 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7907 vos_mem_free(pWdaParams);
7908
7909 /* send the failure response back to PE*/
7910 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
7911 {
7912 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
7913 }
7914
7915 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
7916 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007917 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007918 return CONVERT_WDI2VOS_STATUS(status) ;
7919}
7920#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07007921/*
Mihir Shetea4306052014-03-25 00:02:54 +05307922 * FUNCTION: WDA_EnterImpsRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007923 * send Enter IMPS RSP back to PE
7924 */
Mihir Shetea4306052014-03-25 00:02:54 +05307925void WDA_EnterImpsRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007926{
Mihir Shetea4306052014-03-25 00:02:54 +05307927 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7928 tWDA_CbContext *pWDA;
7929
Jeff Johnson295189b2012-06-20 16:38:30 -07007930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Mihir Shetea4306052014-03-25 00:02:54 +05307931 "<------ %s status=%d" ,__func__,status);
7932 if(NULL == pWdaParams)
7933 {
7934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7935 "%s: pWdaParams received NULL", __func__);
7936 VOS_ASSERT(0);
7937 return;
7938 }
7939
7940 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7941
7942 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7943 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007944 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007945 return ;
7946}
Mihir Shetea4306052014-03-25 00:02:54 +05307947
7948
7949/*
7950 * FUNCTION: WDA_EnterImpsReqCallback
7951 * Free memory and send Enter IMPS RSP back to PE.
7952 * Invoked when Enter IMPS REQ failed in WDI and no RSP callback is generated.
7953 */
7954void WDA_EnterImpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7955{
7956 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7957 tWDA_CbContext *pWDA;
7958
7959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7960 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7961
7962 if(NULL == pWdaParams)
7963 {
7964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7965 "%s: pWdaParams received NULL", __func__);
7966 VOS_ASSERT(0);
7967 return;
7968 }
7969
7970 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7971
7972 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7973 {
7974 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7975 vos_mem_free(pWdaParams);
7976 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
7977 CONVERT_WDI2SIR_STATUS(wdiStatus));
7978 }
7979
7980 return;
7981}
Jeff Johnson295189b2012-06-20 16:38:30 -07007982/*
7983 * FUNCTION: WDA_ProcessEnterImpsReq
7984 * Request to WDI to Enter IMPS power state.
7985 */
7986VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
7987{
7988 WDI_Status status = WDI_STATUS_SUCCESS ;
Mihir Shetea4306052014-03-25 00:02:54 +05307989 WDI_EnterImpsReqParamsType *wdiEnterImpsReqParams;
7990 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007992 "------> %s " ,__func__);
Mihir Shetea4306052014-03-25 00:02:54 +05307993
7994
7995 wdiEnterImpsReqParams = vos_mem_malloc(sizeof(WDI_EnterImpsReqParamsType));
7996 if (NULL == wdiEnterImpsReqParams)
7997 {
7998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7999 "%s: VOS MEM Alloc Failure", __func__);
8000 VOS_ASSERT(0);
8001 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
8002 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
8003 return VOS_STATUS_E_NOMEM;
8004 }
8005
8006 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8007 if (NULL == pWdaParams)
8008 {
8009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8010 "%s: VOS MEM Alloc Failure", __func__);
8011 VOS_ASSERT(0);
8012 vos_mem_free(wdiEnterImpsReqParams);
8013 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL ,
8014 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
8015 return VOS_STATUS_E_NOMEM;
8016 }
8017
8018 wdiEnterImpsReqParams->wdiReqStatusCB = WDA_EnterImpsReqCallback;
8019 wdiEnterImpsReqParams->pUserData = pWdaParams;
8020
8021 pWdaParams->wdaWdiApiMsgParam = wdiEnterImpsReqParams;
8022 pWdaParams->wdaMsgParam = NULL;
8023 pWdaParams->pWdaContext = pWDA;
8024
8025 status = WDI_EnterImpsReq(wdiEnterImpsReqParams,
8026 (WDI_EnterImpsRspCb)WDA_EnterImpsRspCallback,
8027 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008028 if(IS_WDI_STATUS_FAILURE(status))
8029 {
8030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8031 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Mihir Shetea4306052014-03-25 00:02:54 +05308032 vos_mem_free(wdiEnterImpsReqParams);
8033 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008034 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008035 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008036 return CONVERT_WDI2VOS_STATUS(status) ;
8037}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308038
8039/*
8040 * FUNCTION: WDA_ExitImpsRespCallback
8041 * send Exit IMPS RSP back to PE
8042 */
8043void WDA_ExitImpsRespCallback(WDI_Status status, void* pUserData)
8044{
8045 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8046 tWDA_CbContext *pWDA;
8047
8048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8049 "<------ %s " ,__func__);
8050
8051 if (NULL == pWdaParams)
8052 {
8053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8054 "%s: pWdaParams received NULL", __func__);
8055 VOS_ASSERT(0);
8056 return;
8057 }
8058 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8059
8060 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8061 vos_mem_free(pWdaParams);
8062
8063 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status));
8064 return;
8065}
8066
Jeff Johnson295189b2012-06-20 16:38:30 -07008067/*
8068 * FUNCTION: WDA_ExitImpsReqCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008069 */
8070void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
8071{
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308072 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008074 "<------ %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308075 if(NULL == pWdaParams)
8076 {
8077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8078 "%s: pWdaParams received NULL", __func__);
8079 VOS_ASSERT(0);
8080 return;
8081 }
8082
8083 if (IS_WDI_STATUS_FAILURE(status))
8084 {
8085 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8086 vos_mem_free(pWdaParams);
8087 if (WDI_STATUS_DEV_INTERNAL_FAILURE == status)
8088 {
8089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8090 FL("reload wlan driver"));
8091 wpalWlanReload();
8092 }
8093 }
8094 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07008095}
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308096
Jeff Johnson295189b2012-06-20 16:38:30 -07008097/*
8098 * FUNCTION: WDA_ProcessExitImpsReq
8099 * Request to WDI to Exit IMPS power state.
8100 */
8101VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
8102{
8103 WDI_Status status = WDI_STATUS_SUCCESS ;
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308104 tWDA_ReqParams *pWdaParams;
8105 WDI_ExitImpsReqParamsType *wdiExitImpsReqParams;
8106
Jeff Johnson295189b2012-06-20 16:38:30 -07008107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008108 "------> %s " ,__func__);
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308109 wdiExitImpsReqParams = (WDI_ExitImpsReqParamsType *)vos_mem_malloc(
8110 sizeof(WDI_ExitImpsReqParamsType));
8111 if (NULL == wdiExitImpsReqParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008112 {
Mahesh A Saptasagar329813b2014-12-15 12:16:51 +05308113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8114 "%s: VOS MEM Alloc Failure", __func__);
8115 VOS_ASSERT(0);
8116 return VOS_STATUS_E_NOMEM;
8117 }
8118 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8119 if(NULL == pWdaParams)
8120 {
8121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8122 "%s: VOS MEM Alloc Failure", __func__);
8123 VOS_ASSERT(0);
8124 vos_mem_free(wdiExitImpsReqParams);
8125 return VOS_STATUS_E_NOMEM;
8126 }
8127 wdiExitImpsReqParams->wdiReqStatusCB = WDA_ExitImpsReqCallback;
8128 wdiExitImpsReqParams->pUserData = pWdaParams;
8129
8130 /* Store param pointer as passed in by caller */
8131 /* store Params pass it to WDI */
8132 pWdaParams->wdaWdiApiMsgParam = wdiExitImpsReqParams;
8133 pWdaParams->pWdaContext = pWDA;
8134 pWdaParams->wdaMsgParam = wdiExitImpsReqParams;
8135 status = WDI_ExitImpsReq(wdiExitImpsReqParams,
8136 (WDI_ExitImpsRspCb)WDA_ExitImpsRespCallback,
8137 pWdaParams);
8138 if (IS_WDI_STATUS_FAILURE(status))
8139 {
8140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8141 "Failure in Exit IMPS REQ WDI API, free all the memory " );
8142 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8143 vos_mem_free(pWdaParams);
8144 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008145 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008146 return CONVERT_WDI2VOS_STATUS(status) ;
8147}
Jeff Johnson295189b2012-06-20 16:38:30 -07008148/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008149 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008150 * send Enter BMPS RSP back to PE
8151 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008152void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008153{
8154 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8155 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008156 tEnterBmpsParams *pEnterBmpsRspParams;
8157
Jeff Johnson295189b2012-06-20 16:38:30 -07008158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008159 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008160 if(NULL == pWdaParams)
8161 {
8162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008163 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008164 VOS_ASSERT(0) ;
8165 return ;
8166 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008167
8168 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8169 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
8170
8171 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008172 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008173
8174 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008175 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008176 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
8177
Jeff Johnson295189b2012-06-20 16:38:30 -07008178 return ;
8179}
Jeff Johnson295189b2012-06-20 16:38:30 -07008180/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008181 * FUNCTION: WDA_EnterBmpsReqCallback
8182 * Free memory and send Enter BMPS RSP back to PE.
8183 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
8184 */
8185void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8186{
8187 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8188 tWDA_CbContext *pWDA;
8189 tEnterBmpsParams *pEnterBmpsRspParams;
8190
8191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8192 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8193
8194 if(NULL == pWdaParams)
8195 {
8196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8197 "%s: pWdaParams received NULL", __func__);
8198 VOS_ASSERT(0);
8199 return;
8200 }
8201
8202 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8203 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
8204 pEnterBmpsRspParams->status = wdiStatus;
8205
8206 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8207 {
8208 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8209 vos_mem_free(pWdaParams);
8210 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
8211 }
8212
8213 return;
8214}
8215/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008216 * FUNCTION: WDA_ProcessEnterBmpsReq
8217 * Request to WDI to Enter BMPS power state.
8218 */
8219VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
8220 tEnterBmpsParams *pEnterBmpsReqParams)
8221{
8222 WDI_Status status = WDI_STATUS_SUCCESS;
8223 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
8224 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008226 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008227 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
8228 {
8229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008230 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008231 VOS_ASSERT(0);
8232 return VOS_STATUS_E_FAILURE;
8233 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008234 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
8235 if (NULL == wdiEnterBmpsReqParams)
8236 {
8237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008238 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008239 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008240 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
8241 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008242 return VOS_STATUS_E_NOMEM;
8243 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008244 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8245 if (NULL == pWdaParams)
8246 {
8247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008248 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008249 VOS_ASSERT(0);
8250 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008251 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
8252 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008253 return VOS_STATUS_E_NOMEM;
8254 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008255 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
8256 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
8257 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
8258 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08008259 // For ESE and 11R Roaming
Jeff Johnson295189b2012-06-20 16:38:30 -07008260 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
8261 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
8262 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008263 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
8264 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008265
Jeff Johnson295189b2012-06-20 16:38:30 -07008266 /* Store param pointer as passed in by caller */
8267 /* store Params pass it to WDI */
8268 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008269 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008270 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008271 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008272 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008273 if (IS_WDI_STATUS_FAILURE(status))
8274 {
8275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8276 "Failure in Enter BMPS REQ WDI API, free all the memory" );
8277 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008278 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07008279 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008280 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008281 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008282 return CONVERT_WDI2VOS_STATUS(status);
8283}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008284
8285
8286static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
8287 WDI_Status wdiStatus,
8288 tExitBmpsParams *pExitBmpsReqParams)
8289{
8290 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
8291
8292 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
8293}
8294
8295
Jeff Johnson295189b2012-06-20 16:38:30 -07008296/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008297 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008298 * send Exit BMPS RSP back to PE
8299 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008300void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008301{
8302 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8303 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008304 tExitBmpsParams *pExitBmpsRspParams;
8305
Jeff Johnson295189b2012-06-20 16:38:30 -07008306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008307 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008308 if(NULL == pWdaParams)
8309 {
8310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008311 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008312 VOS_ASSERT(0) ;
8313 return ;
8314 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008315
8316 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8317 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
8318
8319 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008320 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008321
Jeff Johnson295189b2012-06-20 16:38:30 -07008322 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8323 vos_mem_free(pWdaParams) ;
8324
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008325 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008326 return ;
8327}
Jeff Johnson295189b2012-06-20 16:38:30 -07008328/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008329 * FUNCTION: WDA_ExitBmpsReqCallback
8330 * Free memory and send Exit BMPS RSP back to PE.
8331 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
8332 */
8333void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8334{
8335 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8336 tWDA_CbContext *pWDA;
8337 tExitBmpsParams *pExitBmpsRspParams;
8338
8339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8340 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8341
8342 if(NULL == pWdaParams)
8343 {
8344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8345 "%s: pWdaParams received NULL", __func__);
8346 VOS_ASSERT(0);
8347 return;
8348 }
8349
8350 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8351 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
8352 pExitBmpsRspParams->status = wdiStatus;
8353
8354 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8355 {
8356 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8357 vos_mem_free(pWdaParams);
8358 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
8359 }
8360
8361 return;
8362}
8363/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008364 * FUNCTION: WDA_ProcessExitBmpsReq
8365 * Request to WDI to Exit BMPS power state.
8366 */
8367VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
8368 tExitBmpsParams *pExitBmpsReqParams)
8369{
8370 WDI_Status status = WDI_STATUS_SUCCESS ;
8371 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
8372 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
8373 sizeof(WDI_ExitBmpsReqParamsType)) ;
8374 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008376 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008377 if(NULL == wdiExitBmpsReqParams)
8378 {
8379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008380 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008381 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008382 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008383 return VOS_STATUS_E_NOMEM;
8384 }
8385 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8386 if(NULL == pWdaParams)
8387 {
8388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008389 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008390 VOS_ASSERT(0);
8391 vos_mem_free(wdiExitBmpsReqParams);
8392 return VOS_STATUS_E_NOMEM;
8393 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008394 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07008395
8396 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
8397
Yue Ma7f44bbe2013-04-12 11:47:39 -07008398 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
8399 wdiExitBmpsReqParams->pUserData = pWdaParams;
8400
Jeff Johnson295189b2012-06-20 16:38:30 -07008401 /* Store param pointer as passed in by caller */
8402 /* store Params pass it to WDI */
8403 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
8404 pWdaParams->pWdaContext = pWDA;
8405 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008406 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008407 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008408 if(IS_WDI_STATUS_FAILURE(status))
8409 {
8410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8411 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008412 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8413 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008414 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008415 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008416 return CONVERT_WDI2VOS_STATUS(status) ;
8417}
Jeff Johnson295189b2012-06-20 16:38:30 -07008418/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008419 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008420 * send Enter UAPSD RSP back to PE
8421 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008422void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008423{
8424 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8425 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008426 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008428 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008429 if(NULL == pWdaParams)
8430 {
8431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008432 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008433 VOS_ASSERT(0) ;
8434 return ;
8435 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008436
8437 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8438 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
8439
8440 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008441 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008442
Jeff Johnson295189b2012-06-20 16:38:30 -07008443 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8444 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008445 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008446 return ;
8447}
Jeff Johnson295189b2012-06-20 16:38:30 -07008448/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008449 * FUNCTION: WDA_EnterUapsdReqCallback
8450 * Free memory and send Enter UAPSD RSP back to PE.
8451 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
8452 */
8453void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
8454{
8455 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8456 tWDA_CbContext *pWDA;
8457 tUapsdParams *pEnterUapsdRsqParams;
8458
8459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8460 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8461
8462 if(NULL == pWdaParams)
8463 {
8464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8465 "%s: pWdaParams received NULL", __func__);
8466 VOS_ASSERT(0);
8467 return;
8468 }
8469
8470 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8471 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
8472 pEnterUapsdRsqParams->status = wdiStatus;
8473
8474 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8475 {
8476 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8477 vos_mem_free(pWdaParams);
8478 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
8479 }
8480
8481 return;
8482}
8483/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008484 * FUNCTION: WDA_ProcessEnterUapsdReq
8485 * Request to WDI to Enter UAPSD power state.
8486 */
8487VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
8488 tUapsdParams *pEnterUapsdReqParams)
8489{
8490 WDI_Status status = WDI_STATUS_SUCCESS ;
8491 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
8492 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
8493 sizeof(WDI_EnterUapsdReqParamsType)) ;
8494 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008496 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008497 if(NULL == wdiEnterUapsdReqParams)
8498 {
8499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008500 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008501 VOS_ASSERT(0);
8502 return VOS_STATUS_E_NOMEM;
8503 }
8504 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8505 if(NULL == pWdaParams)
8506 {
8507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008508 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008509 VOS_ASSERT(0);
8510 vos_mem_free(wdiEnterUapsdReqParams);
8511 return VOS_STATUS_E_NOMEM;
8512 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008513 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
8514 pEnterUapsdReqParams->beDeliveryEnabled;
8515 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
8516 pEnterUapsdReqParams->beTriggerEnabled;
8517 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
8518 pEnterUapsdReqParams->bkDeliveryEnabled;
8519 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
8520 pEnterUapsdReqParams->bkTriggerEnabled;
8521 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
8522 pEnterUapsdReqParams->viDeliveryEnabled;
8523 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
8524 pEnterUapsdReqParams->viTriggerEnabled;
8525 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
8526 pEnterUapsdReqParams->voDeliveryEnabled;
8527 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
8528 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07008529 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008530
Yue Ma7f44bbe2013-04-12 11:47:39 -07008531 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
8532 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008533
Jeff Johnson295189b2012-06-20 16:38:30 -07008534 /* Store param pointer as passed in by caller */
8535 /* store Params pass it to WDI */
8536 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
8537 pWdaParams->pWdaContext = pWDA;
8538 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008539 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008540 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008541 if(IS_WDI_STATUS_FAILURE(status))
8542 {
8543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8544 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
8545 vos_mem_free(pWdaParams->wdaMsgParam) ;
8546 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8547 vos_mem_free(pWdaParams) ;
8548 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008549 return CONVERT_WDI2VOS_STATUS(status) ;
8550}
Jeff Johnson295189b2012-06-20 16:38:30 -07008551/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008552 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008553 * send Exit UAPSD RSP back to PE
8554 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008555void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008556{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008557
8558 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8559 tWDA_CbContext *pWDA;
8560 tExitUapsdParams *pExitUapsdRspParams;
8561
Jeff Johnson295189b2012-06-20 16:38:30 -07008562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008563 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008564 if(NULL == pWdaParams)
8565 {
8566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008567 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008568 VOS_ASSERT(0);
8569 return;
8570 }
8571
8572 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8573 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
8574
8575 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008576 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008577
8578 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8579 vos_mem_free(pWdaParams) ;
8580
8581 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008582 return ;
8583}
Jeff Johnson295189b2012-06-20 16:38:30 -07008584/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008585 * FUNCTION: WDA_ExitUapsdReqCallback
8586 * Free memory and send Exit UAPSD RSP back to PE.
8587 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
8588 */
8589void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
8590{
8591 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8592 tWDA_CbContext *pWDA;
8593 tExitUapsdParams *pExitUapsdRspParams;
8594
8595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8596 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8597
8598 if(NULL == pWdaParams)
8599 {
8600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8601 "%s: pWdaParams received NULL", __func__);
8602 VOS_ASSERT(0);
8603 return;
8604 }
8605
8606 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8607 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
8608 pExitUapsdRspParams->status = wdiStatus;
8609
8610 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8611 {
8612 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8613 vos_mem_free(pWdaParams);
8614 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
8615 }
8616
8617 return;
8618}
8619/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008620 * FUNCTION: WDA_ProcessExitUapsdReq
8621 * Request to WDI to Exit UAPSD power state.
8622 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008623VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
8624 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008625{
8626 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008627 tWDA_ReqParams *pWdaParams ;
8628 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
8629 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
8630 sizeof(WDI_ExitUapsdReqParamsType)) ;
8631
Jeff Johnson295189b2012-06-20 16:38:30 -07008632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008633 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008634
8635 if(NULL == wdiExitUapsdReqParams)
8636 {
8637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008638 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008639 VOS_ASSERT(0);
8640 return VOS_STATUS_E_NOMEM;
8641 }
8642 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8643 if(NULL == pWdaParams)
8644 {
8645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008646 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008647 VOS_ASSERT(0);
8648 vos_mem_free(wdiExitUapsdReqParams);
8649 return VOS_STATUS_E_NOMEM;
8650 }
8651
8652 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008653 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
8654 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008655
8656 /* Store param pointer as passed in by caller */
8657 /* store Params pass it to WDI */
8658 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
8659 pWdaParams->pWdaContext = pWDA;
8660 pWdaParams->wdaMsgParam = pExitUapsdParams;
8661
Yue Ma7f44bbe2013-04-12 11:47:39 -07008662 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008663 if(IS_WDI_STATUS_FAILURE(status))
8664 {
8665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8666 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008667 vos_mem_free(pWdaParams->wdaMsgParam) ;
8668 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8669 vos_mem_free(pWdaParams) ;
8670
Jeff Johnson295189b2012-06-20 16:38:30 -07008671 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008672 return CONVERT_WDI2VOS_STATUS(status) ;
8673}
8674
Jeff Johnson295189b2012-06-20 16:38:30 -07008675/*
8676 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
8677 *
8678 */
8679void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
8680{
8681 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008683 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008684 if(NULL == pWdaParams)
8685 {
8686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008687 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008688 VOS_ASSERT(0) ;
8689 return ;
8690 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008691 if( pWdaParams != NULL )
8692 {
8693 if( pWdaParams->wdaWdiApiMsgParam != NULL )
8694 {
8695 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8696 }
8697 if( pWdaParams->wdaMsgParam != NULL )
8698 {
8699 vos_mem_free(pWdaParams->wdaMsgParam) ;
8700 }
8701 vos_mem_free(pWdaParams) ;
8702 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008703 return ;
8704}
Jeff Johnson295189b2012-06-20 16:38:30 -07008705/*
8706 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
8707 * Request to WDI to set the power save params at start.
8708 */
8709VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
8710 tSirPowerSaveCfg *pPowerSaveCfg)
8711{
8712 WDI_Status status = WDI_STATUS_SUCCESS ;
8713 tHalCfg *tlvStruct = NULL ;
8714 tANI_U8 *tlvStructStart = NULL ;
8715 v_PVOID_t *configParam;
8716 tANI_U32 configParamSize;
8717 tANI_U32 *configDataValue;
8718 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
8719 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008721 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008722 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
8723 {
8724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008725 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008726 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008727 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008728 return VOS_STATUS_E_FAILURE;
8729 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008730 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
8731 if (NULL == wdiPowerSaveCfg)
8732 {
8733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008734 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008735 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008736 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008737 return VOS_STATUS_E_NOMEM;
8738 }
8739 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8740 if(NULL == pWdaParams)
8741 {
8742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008743 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008744 VOS_ASSERT(0);
8745 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008746 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008747 return VOS_STATUS_E_NOMEM;
8748 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008749 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
8750 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07008751 if(NULL == configParam)
8752 {
8753 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08008754 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008755 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07008756 vos_mem_free(pWdaParams);
8757 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008758 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008759 return VOS_STATUS_E_NOMEM;
8760 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008761 vos_mem_set(configParam, configParamSize, 0);
8762 wdiPowerSaveCfg->pConfigBuffer = configParam;
8763 tlvStruct = (tHalCfg *)configParam;
8764 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008765 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
8766 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
8767 tlvStruct->length = sizeof(tANI_U32);
8768 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8769 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07008770 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8771 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008772 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
8773 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
8774 tlvStruct->length = sizeof(tANI_U32);
8775 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8776 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07008777 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8778 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008779 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
8780 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
8781 tlvStruct->length = sizeof(tANI_U32);
8782 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8783 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07008784 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8785 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008786 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
8787 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
8788 tlvStruct->length = sizeof(tANI_U32);
8789 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8790 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07008791 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8792 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008793 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
8794 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
8795 tlvStruct->length = sizeof(tANI_U32);
8796 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8797 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07008798 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8799 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008800 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
8801 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
8802 tlvStruct->length = sizeof(tANI_U32);
8803 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8804 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07008805 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8806 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008807 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
8808 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
8809 tlvStruct->length = sizeof(tANI_U32);
8810 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8811 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07008812 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8813 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008814 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
8815 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
8816 tlvStruct->length = sizeof(tANI_U32);
8817 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8818 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
8819 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8820 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008821 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
8822 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
8823 tlvStruct->length = sizeof(tANI_U32);
8824 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8825 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
8826 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8827 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008828 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
8829 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
8830 tlvStruct->length = sizeof(tANI_U32);
8831 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8832 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07008833 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8834 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008835 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
8836 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
8837 tlvStruct->length = sizeof(tANI_U32);
8838 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8839 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07008840 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8841 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008842 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008843 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008844 /* store Params pass it to WDI */
8845 pWdaParams->wdaMsgParam = configParam;
8846 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
8847 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008848 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
8849 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008850 if(IS_WDI_STATUS_FAILURE(status))
8851 {
8852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8853 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
8854 vos_mem_free(pWdaParams->wdaMsgParam);
8855 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8856 vos_mem_free(pWdaParams);
8857 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008858 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008859 return CONVERT_WDI2VOS_STATUS(status);
8860}
Jeff Johnson295189b2012-06-20 16:38:30 -07008861/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008862 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008863 *
8864 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008865void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008866{
Yue Ma7f44bbe2013-04-12 11:47:39 -07008867 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8868
Jeff Johnson295189b2012-06-20 16:38:30 -07008869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008870 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008871
8872 if(NULL == pWdaParams)
8873 {
8874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8875 "%s: pWdaParams received NULL", __func__);
8876 VOS_ASSERT(0);
8877 return ;
8878 }
8879
8880 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07008881 vos_mem_free(pWdaParams);
8882
Jeff Johnson295189b2012-06-20 16:38:30 -07008883 return ;
8884}
Jeff Johnson295189b2012-06-20 16:38:30 -07008885/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008886 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
8887 * Free memory.
8888 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
8889 */
8890void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
8891{
8892 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8893
8894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8895 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8896
8897 if(NULL == pWdaParams)
8898 {
8899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8900 "%s: pWdaParams received NULL", __func__);
8901 VOS_ASSERT(0);
8902 return;
8903 }
8904
8905 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8906 {
8907 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8908 vos_mem_free(pWdaParams);
8909 }
8910
8911 return;
8912}
8913/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008914 * FUNCTION: WDA_SetUapsdAcParamsReq
8915 * Request to WDI to set the UAPSD params for an ac (sta mode).
8916 */
8917VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
8918 tUapsdInfo *pUapsdInfo)
8919{
8920 WDI_Status status = WDI_STATUS_SUCCESS;
8921 tWDA_CbContext *pWDA = NULL ;
8922 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
8923 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
8924 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
8925 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008927 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008928 if(NULL == wdiUapsdParams)
8929 {
8930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008931 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008932 VOS_ASSERT(0);
8933 return VOS_STATUS_E_NOMEM;
8934 }
8935 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8936 if(NULL == pWdaParams)
8937 {
8938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008939 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008940 VOS_ASSERT(0);
8941 vos_mem_free(wdiUapsdParams);
8942 return VOS_STATUS_E_NOMEM;
8943 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008944 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
8945 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
8946 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
8947 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
8948 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
8949 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008950 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
8951 wdiUapsdParams->pUserData = pWdaParams;
8952
Jeff Johnson295189b2012-06-20 16:38:30 -07008953 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07008954 pWdaParams->pWdaContext = pWDA;
8955 /* Store param pointer as passed in by caller */
8956 pWdaParams->wdaMsgParam = pUapsdInfo;
8957 /* store Params pass it to WDI */
8958 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008959 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008960 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07008961 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008962 if(IS_WDI_STATUS_FAILURE(status))
8963 {
8964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8965 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
8966 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8967 vos_mem_free(pWdaParams);
8968 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008969 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
8970 return VOS_STATUS_SUCCESS;
8971 else
8972 return VOS_STATUS_E_FAILURE;
8973
Jeff Johnson295189b2012-06-20 16:38:30 -07008974}
8975/*
8976 * FUNCTION: WDA_ClearUapsdAcParamsReq
8977 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
8978 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
8979 * and again enter the UPASD with the modified params. Hence the disable
8980 * function was kept empty.
8981 *
8982 */
8983VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
8984{
8985 /* do nothing */
8986 return VOS_STATUS_SUCCESS;
8987}
Jeff Johnson295189b2012-06-20 16:38:30 -07008988/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008989 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008990 *
8991 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008992void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008993{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008994 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8995
Jeff Johnson295189b2012-06-20 16:38:30 -07008996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008997 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008998
8999 if(NULL == pWdaParams)
9000 {
9001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009002 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009003 VOS_ASSERT(0) ;
9004 return ;
9005 }
9006
9007 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9008 vos_mem_free(pWdaParams->wdaMsgParam);
9009 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009010
Jeff Johnson295189b2012-06-20 16:38:30 -07009011 //print a msg, nothing else to do
9012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009013 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009014 return ;
9015}
Jeff Johnson295189b2012-06-20 16:38:30 -07009016/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009017 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
9018 * Free memory.
9019 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
9020 */
9021void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
9022{
9023 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9024
9025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9026 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9027
9028 if(NULL == pWdaParams)
9029 {
9030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9031 "%s: pWdaParams received NULL", __func__);
9032 VOS_ASSERT(0);
9033 return;
9034 }
9035
9036 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9037 {
9038 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9039 vos_mem_free(pWdaParams->wdaMsgParam);
9040 vos_mem_free(pWdaParams);
9041 }
9042
9043 return;
9044}
9045/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009046 * FUNCTION: WDA_UpdateUapsdParamsReq
9047 * Request to WDI to update UAPSD params (in softAP mode) for a station.
9048 */
9049VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
9050 tUpdateUapsdParams* pUpdateUapsdInfo)
9051{
9052 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009053 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009054 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
9055 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
9056 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009057 tWDA_ReqParams *pWdaParams = NULL;
9058
Jeff Johnson295189b2012-06-20 16:38:30 -07009059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009060 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009061 if(NULL == wdiUpdateUapsdParams)
9062 {
9063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009064 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009065 VOS_ASSERT(0);
9066 return VOS_STATUS_E_NOMEM;
9067 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009068 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
9069 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
9070 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009071 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
9072 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009073
9074 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9075 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009076 {
9077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009078 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009079 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009080 vos_mem_free(pUpdateUapsdInfo);
9081 vos_mem_free(wdiUpdateUapsdParams);
9082 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07009083 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009084 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009085 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07009086 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009087 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
9088 pWdaParams->pWdaContext = pWDA;
9089
Jeff Johnson43971f52012-07-17 12:26:56 -07009090 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009091 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009092 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009093
Jeff Johnson43971f52012-07-17 12:26:56 -07009094 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009095 {
9096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9097 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009098 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
9099 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9100 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009101 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009102 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009103 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009104}
Jeff Johnson295189b2012-06-20 16:38:30 -07009105/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009106 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009107 *
9108 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009109void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009110{
9111 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009113 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009114 if(WDI_STATUS_SUCCESS != wdiStatus)
9115 {
9116 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009117 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009118 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009119 if(NULL == pWdaParams)
9120 {
9121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009122 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009123 VOS_ASSERT(0) ;
9124 return ;
9125 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009126 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9127 vos_mem_free(pWdaParams->wdaMsgParam);
9128 vos_mem_free(pWdaParams);
9129 return ;
9130}
Jeff Johnson295189b2012-06-20 16:38:30 -07009131/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009132 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
9133 * Free memory.
9134 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
9135 */
9136void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9137{
9138 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9139
9140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9141 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9142
9143 if(NULL == pWdaParams)
9144 {
9145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9146 "%s: pWdaParams received NULL", __func__);
9147 VOS_ASSERT(0);
9148 return;
9149 }
9150
9151 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9152 {
9153 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9154 vos_mem_free(pWdaParams->wdaMsgParam);
9155 vos_mem_free(pWdaParams);
9156 }
9157
9158 return;
9159}
9160/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009161 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
9162 *
9163 */
9164VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
9165 tSirWlanSetRxpFilters *pWlanSuspendParam)
9166{
Jeff Johnson295189b2012-06-20 16:38:30 -07009167 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009168 WDI_Status wstatus;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +05309169 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009170 tWDA_ReqParams *pWdaParams ;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +05309171 /* Sanity Check
9172 * This is very unlikely and add assert to collect more info next time */
9173 if(NULL == pWlanSuspendParam)
9174 {
9175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9176 "%s: pWlanSuspendParam received NULL", __func__);
9177 VOS_ASSERT(0) ;
9178 return VOS_STATUS_E_FAULT;
9179 }
9180 wdiRxpFilterParams = (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
9181 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009183 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009184 if(NULL == wdiRxpFilterParams)
9185 {
9186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009187 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009188 VOS_ASSERT(0);
9189 vos_mem_free(pWlanSuspendParam);
9190 return VOS_STATUS_E_NOMEM;
9191 }
9192 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9193 if(NULL == pWdaParams)
9194 {
9195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009196 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009197 VOS_ASSERT(0);
9198 vos_mem_free(wdiRxpFilterParams);
9199 vos_mem_free(pWlanSuspendParam);
9200 return VOS_STATUS_E_NOMEM;
9201 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009202 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
9203 pWlanSuspendParam->setMcstBcstFilter;
9204 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
9205 pWlanSuspendParam->configuredMcstBcstFilterSetting;
9206
Yue Ma7f44bbe2013-04-12 11:47:39 -07009207 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
9208 wdiRxpFilterParams->pUserData = pWdaParams;
9209
Jeff Johnson295189b2012-06-20 16:38:30 -07009210 pWdaParams->pWdaContext = pWDA;
9211 pWdaParams->wdaMsgParam = pWlanSuspendParam;
9212 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009213 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009214 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07009215 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009216 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009217 {
9218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9219 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009220 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009221 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9222 vos_mem_free(pWdaParams->wdaMsgParam);
9223 vos_mem_free(pWdaParams);
9224 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009225 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009226}
Jeff Johnson295189b2012-06-20 16:38:30 -07009227/*
9228 * FUNCTION: WDA_WdiIndicationCallback
9229 *
9230 */
9231void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
9232 void* pUserData)
9233{
9234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009235 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009236}
Jeff Johnson295189b2012-06-20 16:38:30 -07009237/*
9238 * FUNCTION: WDA_ProcessWlanSuspendInd
9239 *
9240 */
9241VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
9242 tSirWlanSuspendParam *pWlanSuspendParam)
9243{
9244 WDI_Status wdiStatus;
9245 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009247 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009248 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
9249 pWlanSuspendParam->configuredMcstBcstFilterSetting;
9250 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
9251 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07009253 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
9254 if(WDI_STATUS_PENDING == wdiStatus)
9255 {
9256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009257 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009258 }
9259 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
9260 {
9261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009262 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009263 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009264 vos_mem_free(pWlanSuspendParam);
9265 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9266}
9267
Chet Lanctot186b5732013-03-18 10:26:30 -07009268#ifdef WLAN_FEATURE_11W
9269/*
9270 * FUNCTION: WDA_ProcessExcludeUnecryptInd
9271 *
9272 */
9273VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
9274 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
9275{
9276 WDI_Status wdiStatus;
9277 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
9278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9279 "------> %s ", __func__);
9280
9281 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
9282 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
9283 sizeof(tSirMacAddr));
9284
9285 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
9286 wdiExclUnencryptParams.pUserData = pWDA;
9287
9288 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
9289 if(WDI_STATUS_PENDING == wdiStatus)
9290 {
9291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9292 "Pending received for %s:%d ", __func__, __LINE__ );
9293 }
9294 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
9295 {
9296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9297 "Failure in %s:%d ", __func__, __LINE__ );
9298 }
9299 vos_mem_free(pExclUnencryptParam);
9300 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9301}
9302#endif
9303
Jeff Johnson295189b2012-06-20 16:38:30 -07009304/*
9305 * FUNCTION: WDA_ProcessWlanResumeCallback
9306 *
9307 */
9308void WDA_ProcessWlanResumeCallback(
9309 WDI_SuspendResumeRspParamsType *resumeRspParams,
9310 void* pUserData)
9311{
9312 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009314 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009315 if(NULL == pWdaParams)
9316 {
9317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009318 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009319 VOS_ASSERT(0) ;
9320 return ;
9321 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009322 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
9323 {
9324 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009325 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009326 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009327 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9328 vos_mem_free(pWdaParams->wdaMsgParam);
9329 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009330 return ;
9331}
Jeff Johnson295189b2012-06-20 16:38:30 -07009332/*
9333 * FUNCTION: WDA_ProcessWlanResumeReq
9334 *
9335 */
9336VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
9337 tSirWlanResumeParam *pWlanResumeParam)
9338{
9339 WDI_Status wdiStatus;
9340 WDI_ResumeParamsType *wdiResumeParams =
9341 (WDI_ResumeParamsType *)vos_mem_malloc(
9342 sizeof(WDI_ResumeParamsType) ) ;
9343 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009345 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009346 if(NULL == wdiResumeParams)
9347 {
9348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009349 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009350 VOS_ASSERT(0);
9351 return VOS_STATUS_E_NOMEM;
9352 }
9353 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9354 if(NULL == pWdaParams)
9355 {
9356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009357 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009358 VOS_ASSERT(0);
9359 vos_mem_free(wdiResumeParams);
9360 return VOS_STATUS_E_NOMEM;
9361 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009362 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
9363 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07009365 wdiResumeParams->wdiReqStatusCB = NULL;
9366 pWdaParams->wdaMsgParam = pWlanResumeParam;
9367 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
9368 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009369 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
9370 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
9371 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009372 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9373 {
9374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9375 "Failure in Host Resume REQ WDI API, free all the memory " );
9376 VOS_ASSERT(0);
9377 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9378 vos_mem_free(pWdaParams->wdaMsgParam);
9379 vos_mem_free(pWdaParams);
9380 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009381 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9382}
9383
Jeff Johnson295189b2012-06-20 16:38:30 -07009384/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009385 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009386 *
9387 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009388void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009389{
9390 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009392 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009393 if(NULL == pWdaParams)
9394 {
9395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009396 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009397 VOS_ASSERT(0) ;
9398 return ;
9399 }
9400
9401 vos_mem_free(pWdaParams->wdaMsgParam) ;
9402 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9403 vos_mem_free(pWdaParams) ;
9404 /*
9405 * No respone required for SetBeaconFilter req so just free the request
9406 * param here
9407 */
9408
Jeff Johnson295189b2012-06-20 16:38:30 -07009409 return ;
9410}
Jeff Johnson295189b2012-06-20 16:38:30 -07009411/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009412 * FUNCTION: WDA_SetBeaconFilterReqCallback
9413 * Free memory.
9414 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
9415 */
9416void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9417{
9418 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9419
9420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9421 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9422
9423 if(NULL == pWdaParams)
9424 {
9425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9426 "%s: pWdaParams received NULL", __func__);
9427 VOS_ASSERT(0);
9428 return;
9429 }
9430
9431 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9432 {
9433 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9434 vos_mem_free(pWdaParams->wdaMsgParam);
9435 vos_mem_free(pWdaParams);
9436 }
9437
9438 return;
9439}
9440/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009441 * FUNCTION: WDA_SetBeaconFilterReq
9442 * Request to WDI to send the beacon filtering related information.
9443 */
9444VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
9445 tBeaconFilterMsg* pBeaconFilterInfo)
9446{
9447 WDI_Status status = WDI_STATUS_SUCCESS;
9448 tANI_U8 *dstPtr, *srcPtr;
9449 tANI_U8 filterLength;
9450 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
9451 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
9452 sizeof(WDI_BeaconFilterReqParamsType) ) ;
9453 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009455 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009456 if(NULL == wdiBeaconFilterInfo)
9457 {
9458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009459 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009460 VOS_ASSERT(0);
9461 return VOS_STATUS_E_NOMEM;
9462 }
9463 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9464 if(NULL == pWdaParams)
9465 {
9466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009467 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009468 VOS_ASSERT(0);
9469 vos_mem_free(wdiBeaconFilterInfo);
9470 return VOS_STATUS_E_NOMEM;
9471 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009472 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
9473 pBeaconFilterInfo->beaconInterval;
9474 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
9475 pBeaconFilterInfo->capabilityInfo;
9476 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
9477 pBeaconFilterInfo->capabilityMask;
9478 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07009479
9480 //Fill the BssIdx
9481 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
9482
Jeff Johnson295189b2012-06-20 16:38:30 -07009483 //Fill structure with info contained in the beaconFilterTable
9484 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
9485 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
9486 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
9487 if(WDI_BEACON_FILTER_LEN < filterLength)
9488 {
9489 filterLength = WDI_BEACON_FILTER_LEN;
9490 }
9491 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009492 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
9493 wdiBeaconFilterInfo->pUserData = pWdaParams;
9494
Jeff Johnson295189b2012-06-20 16:38:30 -07009495 /* Store param pointer as passed in by caller */
9496 /* store Params pass it to WDI */
9497 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
9498 pWdaParams->pWdaContext = pWDA;
9499 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
9500
Jeff Johnson295189b2012-06-20 16:38:30 -07009501 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009502 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009503 if(IS_WDI_STATUS_FAILURE(status))
9504 {
9505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9506 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
9507 vos_mem_free(pWdaParams->wdaMsgParam) ;
9508 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9509 vos_mem_free(pWdaParams) ;
9510 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009511 return CONVERT_WDI2VOS_STATUS(status) ;
9512}
Jeff Johnson295189b2012-06-20 16:38:30 -07009513/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009514 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009515 *
9516 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009517void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009518{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009519 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9520
Jeff Johnson295189b2012-06-20 16:38:30 -07009521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009522 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009523
9524 if(NULL == pWdaParams)
9525 {
9526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009527 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009528 VOS_ASSERT(0) ;
9529 return ;
9530 }
9531
9532 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9533 vos_mem_free(pWdaParams->wdaMsgParam);
9534 vos_mem_free(pWdaParams);
9535
Jeff Johnson295189b2012-06-20 16:38:30 -07009536 //print a msg, nothing else to do
9537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009538 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009539 return ;
9540}
Yue Ma7f44bbe2013-04-12 11:47:39 -07009541/*
9542 * FUNCTION: WDA_RemBeaconFilterReqCallback
9543 * Free memory.
9544 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
9545 */
9546void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9547{
9548 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9549
9550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9551 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9552
9553 if(NULL == pWdaParams)
9554 {
9555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9556 "%s: pWdaParams received NULL", __func__);
9557 VOS_ASSERT(0);
9558 return;
9559 }
9560
9561 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9562 {
9563 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9564 vos_mem_free(pWdaParams->wdaMsgParam);
9565 vos_mem_free(pWdaParams);
9566 }
9567
9568 return;
9569}
Jeff Johnson295189b2012-06-20 16:38:30 -07009570 // TODO: PE does not have this feature for now implemented,
9571 // but the support for removing beacon filter exists between
9572 // HAL and FW. This function can be called whenever PE defines
9573 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07009574/*
9575 * FUNCTION: WDA_RemBeaconFilterReq
9576 * Request to WDI to send the removal of beacon filtering related information.
9577 */
9578VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
9579 tRemBeaconFilterMsg* pBeaconFilterInfo)
9580{
9581 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009582 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009583 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
9584 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
9585 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009586 tWDA_ReqParams *pWdaParams ;
9587
Jeff Johnson295189b2012-06-20 16:38:30 -07009588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009589 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009590 if(NULL == wdiBeaconFilterInfo)
9591 {
9592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009593 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009594 VOS_ASSERT(0);
9595 return VOS_STATUS_E_NOMEM;
9596 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009597 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9598 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009599 {
9600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009601 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009602 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009603 vos_mem_free(wdiBeaconFilterInfo);
9604 vos_mem_free(pBeaconFilterInfo);
9605 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07009606 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009607
9608 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
9609 pBeaconFilterInfo->ucIeCount;
9610 //Fill structure with info contained in the ucRemIeId
9611 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
9612 pBeaconFilterInfo->ucRemIeId,
9613 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
9614 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
9615 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009616
9617 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009618 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07009619 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009620 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
9621
9622 pWdaParams->pWdaContext = pWDA;
9623
Jeff Johnson43971f52012-07-17 12:26:56 -07009624 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009625 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009626 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009627 {
9628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9629 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009630 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009631 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9632 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009633 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009634 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009635 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009636}
Jeff Johnson295189b2012-06-20 16:38:30 -07009637/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009638 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009639 *
9640 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009641void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009642{
9643 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009645 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009646 if(NULL == pWdaParams)
9647 {
9648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009649 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009650 VOS_ASSERT(0) ;
9651 return ;
9652 }
9653
9654 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9655 vos_mem_free(pWdaParams) ;
9656
Jeff Johnson295189b2012-06-20 16:38:30 -07009657 return ;
9658}
Jeff Johnson295189b2012-06-20 16:38:30 -07009659/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009660 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
9661 * Free memory.
9662 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
9663 */
9664void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
9665{
9666 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9667
9668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9669 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9670
9671 if(NULL == pWdaParams)
9672 {
9673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9674 "%s: pWdaParams received NULL", __func__);
9675 VOS_ASSERT(0);
9676 return;
9677 }
9678
9679 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9680 {
9681 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9682 vos_mem_free(pWdaParams);
9683 }
9684
9685 return;
9686}
9687/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009688 * FUNCTION: WDA_SetRSSIThresholdsReq
9689 * Request to WDI to set the RSSI thresholds (sta mode).
9690 */
9691VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
9692{
9693 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009694 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009695 tWDA_CbContext *pWDA = NULL ;
9696 v_PVOID_t pVosContext = NULL;
9697 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
9698 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
9699 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
9700 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009702 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009703 if(NULL == wdiRSSIThresholdsInfo)
9704 {
9705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009706 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009707 VOS_ASSERT(0);
9708 return VOS_STATUS_E_NOMEM;
9709 }
9710 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9711 if(NULL == pWdaParams)
9712 {
9713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009714 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009715 VOS_ASSERT(0);
9716 vos_mem_free(wdiRSSIThresholdsInfo);
9717 return VOS_STATUS_E_NOMEM;
9718 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009719 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07009720 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
9721 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
9722 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07009723 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
9724 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
9725 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07009726 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
9727 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
9728 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009729 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
9730 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009731 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
9732 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
9733
Jeff Johnson295189b2012-06-20 16:38:30 -07009734 /* Store param pointer as passed in by caller */
9735 /* store Params pass it to WDI */
9736 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
9737 pWdaParams->pWdaContext = pWDA;
9738 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07009739 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009740 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009741 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009742 {
9743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9744 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009745 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009746 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9747 vos_mem_free(pWdaParams) ;
9748 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009749 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009750
9751}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009752/*
Yue Madb90ac12013-04-04 13:39:13 -07009753 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009754 *
9755 */
Yue Madb90ac12013-04-04 13:39:13 -07009756void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009757{
9758 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9759
9760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009761 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009762 if(NULL == pWdaParams)
9763 {
9764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009765 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009766 VOS_ASSERT(0) ;
9767 return ;
9768 }
9769
9770 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9771 vos_mem_free(pWdaParams->wdaMsgParam);
9772 vos_mem_free(pWdaParams) ;
9773
9774 //print a msg, nothing else to do
9775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -07009776 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009777 return ;
9778}
Jeff Johnson295189b2012-06-20 16:38:30 -07009779/*
Yue Madb90ac12013-04-04 13:39:13 -07009780 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -07009781 * Free memory.
9782 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -07009783 */
9784void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
9785{
9786 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9787
9788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9789 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9790
9791 if(NULL == pWdaParams)
9792 {
9793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9794 "%s: Invalid pWdaParams pointer", __func__);
9795 VOS_ASSERT(0);
9796 return;
9797 }
9798
9799 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9800 {
9801 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9802 vos_mem_free(pWdaParams->wdaMsgParam);
9803 vos_mem_free(pWdaParams);
9804 }
9805
9806 return;
9807}
9808/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009809 * FUNCTION: WDA_ProcessHostOffloadReq
9810 * Request to WDI to set the filter to minimize unnecessary host wakeup due
9811 * to broadcast traffic (sta mode).
9812 */
9813VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
9814 tSirHostOffloadReq *pHostOffloadParams)
9815{
9816 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009817 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009818 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
9819 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
9820 sizeof(WDI_HostOffloadReqParamsType)) ;
9821 tWDA_ReqParams *pWdaParams ;
9822
9823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009824 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07009825
9826 if(NULL == wdiHostOffloadInfo)
9827 {
9828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009829 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009830 VOS_ASSERT(0);
9831 return VOS_STATUS_E_NOMEM;
9832 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009833 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9834 if(NULL == pWdaParams)
9835 {
9836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009837 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009838 VOS_ASSERT(0);
9839 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009840 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009841 return VOS_STATUS_E_NOMEM;
9842 }
9843
9844 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
9845 pHostOffloadParams->offloadType;
9846 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
9847 pHostOffloadParams->enableOrDisable;
9848
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009849 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
9850 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
9851
Jeff Johnson295189b2012-06-20 16:38:30 -07009852 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
9853 {
9854 case SIR_IPV4_ARP_REPLY_OFFLOAD:
9855 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
9856 pHostOffloadParams->params.hostIpv4Addr,
9857 4);
9858 break;
9859 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
9860 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
9861 pHostOffloadParams->params.hostIpv6Addr,
9862 16);
9863 break;
9864 case SIR_IPV6_NS_OFFLOAD:
9865 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
9866 pHostOffloadParams->params.hostIpv6Addr,
9867 16);
9868
9869#ifdef WLAN_NS_OFFLOAD
9870 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
9871 {
9872 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
9873 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
9874 16);
9875 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
9876 }
9877 else
9878 {
9879 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
9880 }
9881
9882 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
9883 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
9884 16);
9885 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
9886 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
9887 6);
9888
9889 //Only two are supported so let's go through them without a loop
9890 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
9891 {
9892 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
9893 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
9894 16);
9895 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
9896 }
9897 else
9898 {
9899 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
9900 }
9901
9902 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
9903 {
9904 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
9905 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
9906 16);
9907 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
9908 }
9909 else
9910 {
9911 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
9912 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +05309913 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
9914 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07009915 break;
9916#endif //WLAN_NS_OFFLOAD
9917 default:
9918 {
9919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9920 "No Handling for Offload Type %x in WDA "
9921 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
9922 //WDA_VOS_ASSERT(0) ;
9923 }
9924 }
Yue Madb90ac12013-04-04 13:39:13 -07009925 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
9926 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009927
Jeff Johnson295189b2012-06-20 16:38:30 -07009928 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009929 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009930 /* store Params pass it to WDI */
9931 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
9932 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009933
Jeff Johnson295189b2012-06-20 16:38:30 -07009934
Jeff Johnson43971f52012-07-17 12:26:56 -07009935 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -07009936 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009937
Jeff Johnson43971f52012-07-17 12:26:56 -07009938 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009939 {
9940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
c_hpothu86feba52014-10-28 15:51:18 +05309941 "Failure in host offload REQ WDI API, free all the memory %d",
9942 wstatus);
Jeff Johnson43971f52012-07-17 12:26:56 -07009943 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009944 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9945 vos_mem_free(pWdaParams->wdaMsgParam);
9946 vos_mem_free(pWdaParams) ;
9947 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009948 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009949
9950}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009951/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009952 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009953 *
9954 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009955void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009956{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009957 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9958
Jeff Johnson295189b2012-06-20 16:38:30 -07009959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009960 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009961
9962 if(NULL == pWdaParams)
9963 {
9964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009965 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009966 VOS_ASSERT(0) ;
9967 return ;
9968 }
9969
9970 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9971 vos_mem_free(pWdaParams->wdaMsgParam);
9972 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009973
Jeff Johnson295189b2012-06-20 16:38:30 -07009974 //print a msg, nothing else to do
9975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009976 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009977 return ;
9978}
Jeff Johnson295189b2012-06-20 16:38:30 -07009979/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009980 * FUNCTION: WDA_KeepAliveReqCallback
9981 * Free memory.
9982 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
9983 */
9984void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
9985{
9986 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9987
9988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9989 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9990
9991 if(NULL == pWdaParams)
9992 {
9993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9994 "%s: pWdaParams received NULL", __func__);
9995 VOS_ASSERT(0);
9996 return;
9997 }
9998
9999 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10000 {
10001 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10002 vos_mem_free(pWdaParams->wdaMsgParam);
10003 vos_mem_free(pWdaParams);
10004 }
10005
10006 return;
10007}
10008/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010009 * FUNCTION: WDA_ProcessKeepAliveReq
10010 * Request to WDI to send Keep Alive packets to minimize unnecessary host
10011 * wakeup due to broadcast traffic (sta mode).
10012 */
10013VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
10014 tSirKeepAliveReq *pKeepAliveParams)
10015{
10016 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010017 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010018 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
10019 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
10020 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010021 tWDA_ReqParams *pWdaParams;
10022
Jeff Johnson295189b2012-06-20 16:38:30 -070010023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010024 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010025 if(NULL == wdiKeepAliveInfo)
10026 {
10027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010028 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010029 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010030 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010031 return VOS_STATUS_E_NOMEM;
10032 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010033
10034 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10035 if(NULL == pWdaParams)
10036 {
10037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010038 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010039 VOS_ASSERT(0);
10040 vos_mem_free(wdiKeepAliveInfo);
10041 vos_mem_free(pKeepAliveParams);
10042 return VOS_STATUS_E_NOMEM;
10043 }
10044
Jeff Johnson295189b2012-06-20 16:38:30 -070010045 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
10046 pKeepAliveParams->packetType;
10047 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
10048 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010049
10050 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
10051 pKeepAliveParams->bssId,
10052 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010053
10054 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
10055 {
10056 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
10057 pKeepAliveParams->hostIpv4Addr,
10058 SIR_IPV4_ADDR_LEN);
10059 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
10060 pKeepAliveParams->destIpv4Addr,
10061 SIR_IPV4_ADDR_LEN);
10062 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
10063 pKeepAliveParams->destMacAddr,
10064 SIR_MAC_ADDR_LEN);
10065 }
10066 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
10067 {
10068 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
10069 SIR_IPV4_ADDR_LEN,
10070 0);
10071 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
10072 SIR_IPV4_ADDR_LEN,
10073 0);
10074 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
10075 SIR_MAC_ADDR_LEN,
10076 0);
10077 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010078 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
10079 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010080
Jeff Johnson295189b2012-06-20 16:38:30 -070010081 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010082 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010083 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010084 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
10085 pWdaParams->pWdaContext = pWDA;
10086
Jeff Johnson295189b2012-06-20 16:38:30 -070010087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
10088 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
10089 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
10090 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
10091 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
10092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
10093 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
10094 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
10095 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
10096 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
10097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10098 "WDA DMAC : %d:%d:%d:%d:%d:%d",
10099 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
10100 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
10101 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
10102 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
10103 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
10104 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
10105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10106 "TimePeriod %d PacketType %d",
10107 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
10108 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -070010109 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010110 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010111
Jeff Johnson43971f52012-07-17 12:26:56 -070010112 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010113 {
10114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10115 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010116 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010117 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10118 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -070010119 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010120 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010121 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010122
10123}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010124/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010125 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010126 *
10127 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010128void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010129 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
10130 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010131{
10132 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010134 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010135 if(NULL == pWdaParams)
10136 {
10137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010138 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010139 VOS_ASSERT(0) ;
10140 return ;
10141 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010142 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10143 vos_mem_free(pWdaParams->wdaMsgParam);
10144 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010145 return ;
10146}
Jeff Johnson295189b2012-06-20 16:38:30 -070010147/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010148 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
10149 * Free memory.
10150 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
10151 */
10152void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
10153{
10154 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10155
10156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10157 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10158
10159 if(NULL == pWdaParams)
10160 {
10161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10162 "%s: pWdaParams received NULL", __func__);
10163 VOS_ASSERT(0);
10164 return;
10165 }
10166
10167 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10168 {
10169 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10170 vos_mem_free(pWdaParams->wdaMsgParam);
10171 vos_mem_free(pWdaParams);
10172 }
10173
10174 return;
10175}
10176
10177/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010178 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
10179 * Request to WDI to add WOWL Bcast pattern
10180 */
10181VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
10182 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
10183{
10184 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010185 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010186 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
10187 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
10188 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
10189 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010191 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010192 if(NULL == wdiWowlAddBcPtrnInfo)
10193 {
10194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010195 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010196 VOS_ASSERT(0);
10197 return VOS_STATUS_E_NOMEM;
10198 }
10199 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10200 if(NULL == pWdaParams)
10201 {
10202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010203 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010204 VOS_ASSERT(0);
10205 vos_mem_free(wdiWowlAddBcPtrnInfo);
10206 return VOS_STATUS_E_NOMEM;
10207 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010208 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
10209 pWowlAddBcPtrnParams->ucPatternId;
10210 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
10211 pWowlAddBcPtrnParams->ucPatternByteOffset;
10212 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
10213 pWowlAddBcPtrnParams->ucPatternMaskSize;
10214 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
10215 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -070010216 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
10217 {
10218 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
10219 pWowlAddBcPtrnParams->ucPattern,
10220 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
10221 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
10222 pWowlAddBcPtrnParams->ucPatternMask,
10223 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
10224 }
10225 else
10226 {
10227 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
10228 pWowlAddBcPtrnParams->ucPattern,
10229 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10230 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
10231 pWowlAddBcPtrnParams->ucPatternMask,
10232 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10233
10234 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
10235 pWowlAddBcPtrnParams->ucPatternExt,
10236 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10237 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
10238 pWowlAddBcPtrnParams->ucPatternMaskExt,
10239 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10240 }
10241
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010242 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
10243 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
10244
Yue Ma7f44bbe2013-04-12 11:47:39 -070010245 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
10246 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010247 /* Store param pointer as passed in by caller */
10248 /* store Params pass it to WDI */
10249 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
10250 pWdaParams->pWdaContext = pWDA;
10251 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010252 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010253 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010254 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010255 {
10256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10257 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010258 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010259 vos_mem_free(pWdaParams->wdaMsgParam) ;
10260 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10261 vos_mem_free(pWdaParams) ;
10262 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010263 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010264
10265}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010266/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010267 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010268 *
10269 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010270void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010271 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
10272 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010273{
10274 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010276 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010277 if(NULL == pWdaParams)
10278 {
10279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010280 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010281 VOS_ASSERT(0) ;
10282 return ;
10283 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010284 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10285 vos_mem_free(pWdaParams->wdaMsgParam);
10286 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010287 return ;
10288}
Jeff Johnson295189b2012-06-20 16:38:30 -070010289/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010290 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
10291 * Free memory.
10292 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
10293 */
10294void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
10295{
10296 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10297
10298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10299 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10300
10301 if(NULL == pWdaParams)
10302 {
10303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10304 "%s: pWdaParams received NULL", __func__);
10305 VOS_ASSERT(0);
10306 return;
10307 }
10308
10309 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10310 {
10311 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10312 vos_mem_free(pWdaParams->wdaMsgParam);
10313 vos_mem_free(pWdaParams);
10314 }
10315
10316 return;
10317}
10318/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010319 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
10320 * Request to WDI to delete WOWL Bcast pattern
10321 */
10322VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
10323 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
10324{
10325 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010326 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010327 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
10328 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
10329 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
10330 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010332 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010333 if(NULL == wdiWowlDelBcPtrnInfo)
10334 {
10335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010336 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010337 VOS_ASSERT(0);
10338 return VOS_STATUS_E_NOMEM;
10339 }
10340 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10341 if(NULL == pWdaParams)
10342 {
10343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010344 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010345 VOS_ASSERT(0);
10346 vos_mem_free(wdiWowlDelBcPtrnInfo);
10347 return VOS_STATUS_E_NOMEM;
10348 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010349 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
10350 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010351
10352 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
10353 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
10354
Yue Ma7f44bbe2013-04-12 11:47:39 -070010355 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
10356 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010357 /* Store param pointer as passed in by caller */
10358 /* store Params pass it to WDI */
10359 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
10360 pWdaParams->pWdaContext = pWDA;
10361 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010362 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010363 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010364 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010365 {
10366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10367 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010368 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010369 vos_mem_free(pWdaParams->wdaMsgParam) ;
10370 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10371 vos_mem_free(pWdaParams) ;
10372 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010373 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010374
10375}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010376/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010377 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010378 *
10379 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010380void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010381{
10382 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10383 tWDA_CbContext *pWDA;
10384 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010386 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010387 if(NULL == pWdaParams)
10388 {
10389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010390 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010391 VOS_ASSERT(0) ;
10392 return ;
10393 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010394 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
10395 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
10396
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010397 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
10398
Jeff Johnson295189b2012-06-20 16:38:30 -070010399 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10400 vos_mem_free(pWdaParams) ;
10401
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010402 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010403 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -070010404 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010405 return ;
10406}
Jeff Johnson295189b2012-06-20 16:38:30 -070010407/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010408 * FUNCTION: WDA_WowlEnterReqCallback
10409 * Free memory and send WOWL Enter RSP back to PE.
10410 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
10411 */
10412void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
10413{
10414 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10415 tWDA_CbContext *pWDA;
10416 tSirHalWowlEnterParams *pWowlEnterParams;
10417
10418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10419 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10420
10421 if(NULL == pWdaParams)
10422 {
10423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10424 "%s: pWdaParams received NULL", __func__);
10425 VOS_ASSERT(0);
10426 return;
10427 }
10428
10429 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10430 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
10431 pWowlEnterParams->status = wdiStatus;
10432
10433 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10434 {
10435 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10436 vos_mem_free(pWdaParams);
10437 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
10438 }
10439
10440 return;
10441}
10442/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010443 * FUNCTION: WDA_ProcessWowlEnterReq
10444 * Request to WDI to enter WOWL
10445 */
10446VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
10447 tSirHalWowlEnterParams *pWowlEnterParams)
10448{
10449 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010450 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010451 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
10452 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
10453 sizeof(WDI_WowlEnterReqParamsType)) ;
10454 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010456 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010457 if(NULL == wdiWowlEnterInfo)
10458 {
10459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010460 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010461 VOS_ASSERT(0);
10462 return VOS_STATUS_E_NOMEM;
10463 }
10464 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10465 if(NULL == pWdaParams)
10466 {
10467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010468 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010469 VOS_ASSERT(0);
10470 vos_mem_free(wdiWowlEnterInfo);
10471 return VOS_STATUS_E_NOMEM;
10472 }
Kumar Anandaca924e2013-07-22 14:35:34 -070010473
10474 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
10475
Jeff Johnson295189b2012-06-20 16:38:30 -070010476 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
10477 pWowlEnterParams->magicPtrn,
10478 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010479 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
10480 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010481 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
10482 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010483 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
10484 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010485 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
10486 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010487 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
10488 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010489 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
10490 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010491 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
10492 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -070010493 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
10494 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -070010495#ifdef WLAN_WAKEUP_EVENTS
10496 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
10497 pWowlEnterParams->ucWoWEAPIDRequestEnable;
10498
10499 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
10500 pWowlEnterParams->ucWoWEAPOL4WayEnable;
10501
10502 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
10503 pWowlEnterParams->ucWowNetScanOffloadMatch;
10504
10505 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
10506 pWowlEnterParams->ucWowGTKRekeyError;
10507
10508 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
10509 pWowlEnterParams->ucWoWBSSConnLoss;
10510#endif // WLAN_WAKEUP_EVENTS
10511
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010512 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
10513 pWowlEnterParams->bssIdx;
10514
Yue Ma7f44bbe2013-04-12 11:47:39 -070010515 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
10516 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010517 /* Store param pointer as passed in by caller */
10518 /* store Params pass it to WDI */
10519 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
10520 pWdaParams->pWdaContext = pWDA;
10521 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010522 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010523 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010524 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010525 {
10526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10527 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010528 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010529 vos_mem_free(pWdaParams->wdaMsgParam) ;
10530 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10531 vos_mem_free(pWdaParams) ;
10532 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010533 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010534
10535}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010536/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010537 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010538 *
10539 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010540void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010541{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010542 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10543 tWDA_CbContext *pWDA;
10544 tSirHalWowlExitParams *pWowlExitParams;
10545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010546 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010547 if(NULL == pWdaParams)
10548 {
10549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010550 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010551 VOS_ASSERT(0) ;
10552 return ;
10553 }
10554 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
10555 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
10556
10557 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010558 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010559
10560 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10561 vos_mem_free(pWdaParams) ;
10562
Jeff Johnson295189b2012-06-20 16:38:30 -070010563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010564 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010565 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010566 return ;
10567}
Jeff Johnson295189b2012-06-20 16:38:30 -070010568/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010569 * FUNCTION: WDA_WowlExitReqCallback
10570 * Free memory and send WOWL Exit RSP back to PE.
10571 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
10572 */
10573void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
10574{
10575 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10576 tWDA_CbContext *pWDA;
10577 tSirHalWowlExitParams *pWowlExitParams;
10578
10579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10580 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10581
10582 if(NULL == pWdaParams)
10583 {
10584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10585 "%s: pWdaParams received NULL", __func__);
10586 VOS_ASSERT(0);
10587 return;
10588 }
10589
10590 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10591 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
10592 pWowlExitParams->status = wdiStatus;
10593
10594 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10595 {
10596 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10597 vos_mem_free(pWdaParams);
10598 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
10599 }
10600
10601 return;
10602}
10603/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010604 * FUNCTION: WDA_ProcessWowlExitReq
10605 * Request to WDI to add WOWL Bcast pattern
10606 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010607VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
10608 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010609{
10610 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010611 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010612 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
10613 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
10614 sizeof(WDI_WowlExitReqParamsType)) ;
10615 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010617 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010618 if(NULL == wdiWowlExitInfo)
10619 {
10620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010621 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010622 VOS_ASSERT(0);
10623 return VOS_STATUS_E_NOMEM;
10624 }
10625 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10626 if(NULL == pWdaParams)
10627 {
10628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010629 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010630 VOS_ASSERT(0);
10631 vos_mem_free(wdiWowlExitInfo);
10632 return VOS_STATUS_E_NOMEM;
10633 }
10634
10635 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
10636 pWowlExitParams->bssIdx;
10637
Yue Ma7f44bbe2013-04-12 11:47:39 -070010638 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
10639 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010640
10641 /* Store param pointer as passed in by caller */
10642 /* store Params pass it to WDI */
10643 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
10644 pWdaParams->pWdaContext = pWDA;
10645 pWdaParams->wdaMsgParam = pWowlExitParams;
10646
10647 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010648 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010649
Jeff Johnson43971f52012-07-17 12:26:56 -070010650 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010651 {
10652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10653 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010654 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010655 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10656 vos_mem_free(pWdaParams->wdaMsgParam);
10657 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010658 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010659 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010660}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010661/*
10662 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
10663 * Request to WDI to determine whether a given station is capable of
10664 * using HW-based frame translation
10665 */
10666v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
10667 tANI_U8 staIdx)
10668{
10669 return WDI_IsHwFrameTxTranslationCapable(staIdx);
10670}
Katya Nigam6201c3e2014-05-27 17:51:42 +053010671
10672/*
10673 * FUNCTION: WDA_IsSelfSTA
10674 * Request to WDI to determine whether a given STAID is self station
10675 * index.
10676 */
10677v_BOOL_t WDA_IsSelfSTA(v_PVOID_t pVosContext, tANI_U8 ucSTAIdx)
10678{
10679
10680 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
10681
Girish Gowli05cf44e2014-06-12 21:53:37 +053010682 if (NULL != pWDA)
10683 return WDI_IsSelfSTA(pWDA->pWdiContext,ucSTAIdx);
10684 else
10685 return VOS_TRUE;
Katya Nigam6201c3e2014-05-27 17:51:42 +053010686}
Jeff Johnson295189b2012-06-20 16:38:30 -070010687/*
10688 * FUNCTION: WDA_NvDownloadReqCallback
10689 * send NV Download RSP back to PE
10690 */
10691void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
10692 void* pUserData)
10693{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010694
10695 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
10696 tWDA_CbContext *pWDA;
10697
Jeff Johnson295189b2012-06-20 16:38:30 -070010698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010699 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010700
10701 if(NULL == pWdaParams)
10702 {
10703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010704 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010705 VOS_ASSERT(0) ;
10706 return ;
10707 }
10708
10709 pWDA = pWdaParams->pWdaContext;
10710
Jeff Johnson295189b2012-06-20 16:38:30 -070010711 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010712 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10713 vos_mem_free(pWdaParams);
10714
Jeff Johnson295189b2012-06-20 16:38:30 -070010715 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070010716 return ;
10717}
Jeff Johnson295189b2012-06-20 16:38:30 -070010718/*
10719 * FUNCTION: WDA_ProcessNvDownloadReq
10720 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
10721 */
10722VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
10723{
10724 /* Initialize the local Variables*/
10725 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
10726 v_VOID_t *pNvBuffer=NULL;
10727 v_SIZE_t bufferSize = 0;
10728 WDI_Status status = WDI_STATUS_E_FAILURE;
10729 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010730 tWDA_ReqParams *pWdaParams ;
10731
Jeff Johnson295189b2012-06-20 16:38:30 -070010732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010733 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010734 if(NULL == pWDA)
10735 {
10736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010737 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010738 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070010739 return VOS_STATUS_E_FAILURE;
10740 }
10741
10742 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -070010743 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
10744
Jeff Johnson295189b2012-06-20 16:38:30 -070010745 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
10746 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010747 if(NULL == wdiNvDownloadReqParam)
10748 {
10749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010750 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010751 VOS_ASSERT(0);
10752 return VOS_STATUS_E_NOMEM;
10753 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010754 /* Copy Params to wdiNvDownloadReqParam*/
10755 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
10756 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010757
10758 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10759 if(NULL == pWdaParams)
10760 {
10761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010762 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010763 VOS_ASSERT(0);
10764 vos_mem_free(wdiNvDownloadReqParam);
10765 return VOS_STATUS_E_NOMEM;
10766 }
10767
Jeff Johnson295189b2012-06-20 16:38:30 -070010768 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010769 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
10770 pWdaParams->wdaMsgParam = NULL;
10771 pWdaParams->pWdaContext = pWDA;
10772
10773
Jeff Johnson295189b2012-06-20 16:38:30 -070010774 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010775
Jeff Johnson295189b2012-06-20 16:38:30 -070010776 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010777 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
10778
Jeff Johnson295189b2012-06-20 16:38:30 -070010779 if(IS_WDI_STATUS_FAILURE(status))
10780 {
10781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10782 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010783 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10784 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010785 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010786 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010787}
10788/*
10789 * FUNCTION: WDA_FlushAcReqCallback
10790 * send Flush AC RSP back to TL
10791 */
10792void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
10793{
10794 vos_msg_t wdaMsg = {0} ;
10795 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10796 tFlushACReq *pFlushACReqParams;
10797 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010799 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010800 if(NULL == pWdaParams)
10801 {
10802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010803 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010804 VOS_ASSERT(0) ;
10805 return ;
10806 }
10807
10808 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
10809 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
10810 if(NULL == pFlushACRspParams)
10811 {
10812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010813 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010814 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010815 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010816 return ;
10817 }
10818 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
10819 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
10820 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
10821 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
10822 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010823 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010824 vos_mem_free(pWdaParams->wdaMsgParam) ;
10825 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10826 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010827 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
10828 wdaMsg.bodyptr = (void *)pFlushACRspParams;
10829 // POST message to TL
10830 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
10831
Jeff Johnson295189b2012-06-20 16:38:30 -070010832 return ;
10833}
Jeff Johnson295189b2012-06-20 16:38:30 -070010834/*
10835 * FUNCTION: WDA_ProcessFlushAcReq
10836 * Request to WDI to Update the DELBA REQ params.
10837 */
10838VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
10839 tFlushACReq *pFlushAcReqParams)
10840{
10841 WDI_Status status = WDI_STATUS_SUCCESS ;
10842 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
10843 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
10844 sizeof(WDI_FlushAcReqParamsType)) ;
10845 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010846 if(NULL == wdiFlushAcReqParam)
10847 {
10848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010849 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010850 VOS_ASSERT(0);
10851 return VOS_STATUS_E_NOMEM;
10852 }
10853 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10854 if(NULL == pWdaParams)
10855 {
10856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010857 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010858 VOS_ASSERT(0);
10859 vos_mem_free(wdiFlushAcReqParam);
10860 return VOS_STATUS_E_NOMEM;
10861 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010863 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010864 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
10865 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
10866 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
10867 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -070010868 /* Store Flush AC pointer, as this will be used for response */
10869 /* store Params pass it to WDI */
10870 pWdaParams->pWdaContext = pWDA;
10871 pWdaParams->wdaMsgParam = pFlushAcReqParams;
10872 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010873 status = WDI_FlushAcReq(wdiFlushAcReqParam,
10874 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010875 if(IS_WDI_STATUS_FAILURE(status))
10876 {
10877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10878 "Failure in Flush AC REQ Params WDI API, free all the memory " );
10879 vos_mem_free(pWdaParams->wdaMsgParam) ;
10880 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10881 vos_mem_free(pWdaParams) ;
10882 //TODO: respond to TL with failure
10883 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010884 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010885}
Jeff Johnson295189b2012-06-20 16:38:30 -070010886/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010887 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010888 *
10889 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010890void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010891{
10892 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10893 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -070010894 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010895
10896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010897 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010898 if(NULL == pWdaParams)
10899 {
10900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010901 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010902 VOS_ASSERT(0) ;
10903 return ;
10904 }
10905 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10906 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
10907 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
10908 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10909 {
10910 pWDA->wdaAmpSessionOn = VOS_FALSE;
10911 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010912 vos_mem_free(pWdaParams->wdaMsgParam) ;
10913 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10914 vos_mem_free(pWdaParams) ;
10915 /*
10916 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
10917 * param here
10918 */
Jeff Johnson295189b2012-06-20 16:38:30 -070010919 return ;
10920}
Yue Ma7f44bbe2013-04-12 11:47:39 -070010921/*
10922 * FUNCTION: WDA_BtAmpEventReqCallback
10923 * Free memory.
10924 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
10925 */
10926void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
10927{
10928 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10929 tWDA_CbContext *pWDA;
10930 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010931
Yue Ma7f44bbe2013-04-12 11:47:39 -070010932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10933 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10934
10935 if(NULL == pWdaParams)
10936 {
10937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10938 "%s: pWdaParams received NULL", __func__);
10939 VOS_ASSERT(0);
10940 return;
10941 }
10942
10943 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10944 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
10945
10946 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
10947 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10948 {
10949 pWDA->wdaAmpSessionOn = VOS_FALSE;
10950 }
10951
10952 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10953 {
10954 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10955 vos_mem_free(pWdaParams->wdaMsgParam);
10956 vos_mem_free(pWdaParams);
10957 }
10958
10959 return;
10960}
Jeff Johnson295189b2012-06-20 16:38:30 -070010961/*
10962 * FUNCTION: WDA_ProcessBtAmpEventReq
10963 * Request to WDI to Update with BT AMP events.
10964 */
10965VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
10966 tSmeBtAmpEvent *pBtAmpEventParams)
10967{
10968 WDI_Status status = WDI_STATUS_SUCCESS ;
10969 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
10970 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
10971 sizeof(WDI_BtAmpEventParamsType)) ;
10972 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010974 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010975 if(NULL == wdiBtAmpEventParam)
10976 {
10977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010978 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010979 VOS_ASSERT(0);
10980 return VOS_STATUS_E_NOMEM;
10981 }
10982 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10983 if(NULL == pWdaParams)
10984 {
10985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010986 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010987 VOS_ASSERT(0);
10988 vos_mem_free(wdiBtAmpEventParam);
10989 return VOS_STATUS_E_NOMEM;
10990 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010991 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
10992 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010993 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
10994 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010995 /* Store BT AMP event pointer, as this will be used for response */
10996 /* store Params pass it to WDI */
10997 pWdaParams->pWdaContext = pWDA;
10998 pWdaParams->wdaMsgParam = pBtAmpEventParams;
10999 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011000 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011001 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011002 if(IS_WDI_STATUS_FAILURE(status))
11003 {
11004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11005 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
11006 vos_mem_free(pWdaParams->wdaMsgParam) ;
11007 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11008 vos_mem_free(pWdaParams) ;
11009 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011010 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
11011 {
11012 pWDA->wdaAmpSessionOn = VOS_TRUE;
11013 }
11014 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011015}
11016
Jeff Johnson295189b2012-06-20 16:38:30 -070011017/*
11018 * FUNCTION: WDA_FTMCommandReqCallback
11019 * Handle FTM CMD response came from HAL
11020 * Route responce to HDD FTM
11021 */
11022void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
11023 void *usrData)
11024{
11025 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011026 if((NULL == pWDA) || (NULL == ftmCmdRspData))
11027 {
11028 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053011029 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070011030 return;
11031 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011032 /* Release Current FTM Command Request */
11033 vos_mem_free(pWDA->wdaFTMCmdReq);
11034 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011035 /* Post FTM Responce to HDD FTM */
11036 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070011037 return;
11038}
Jeff Johnson295189b2012-06-20 16:38:30 -070011039/*
11040 * FUNCTION: WDA_ProcessFTMCommand
11041 * Send FTM command to WDI
11042 */
11043VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
11044 tPttMsgbuffer *pPTTFtmCmd)
11045{
11046 WDI_Status status = WDI_STATUS_SUCCESS;
11047 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011048 ftmCMDReq = (WDI_FTMCommandReqType *)
11049 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
11050 if(NULL == ftmCMDReq)
11051 {
11052 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11053 "WDA FTM Command buffer alloc fail");
11054 return VOS_STATUS_E_NOMEM;
11055 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011056 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
11057 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070011058 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070011059 /* Send command to WDI */
11060 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070011061 return status;
11062}
Jeff Johnsone7245742012-09-05 17:12:55 -070011063#ifdef FEATURE_OEM_DATA_SUPPORT
11064/*
11065 * FUNCTION: WDA_StartOemDataReqCallback
11066 *
11067 */
11068void WDA_StartOemDataReqCallback(
11069 WDI_oemDataRspParamsType *wdiOemDataRspParams,
11070 void* pUserData)
11071{
11072 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011073 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11074 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -070011075 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011076
Jeff Johnsone7245742012-09-05 17:12:55 -070011077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011078 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011079
11080 if(NULL == pWdaParams)
11081 {
11082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011083 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011084 VOS_ASSERT(0) ;
11085 return ;
11086 }
11087 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
11088
Jeff Johnsone7245742012-09-05 17:12:55 -070011089 if(NULL == pWDA)
11090 {
11091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011092 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011093 VOS_ASSERT(0);
11094 return ;
11095 }
11096
11097 /*
11098 * Allocate memory for response params sent to PE
11099 */
11100 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
11101
11102 // Check if memory is allocated for OemdataMeasRsp Params.
11103 if(NULL == pOemDataRspParams)
11104 {
11105 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11106 "OEM DATA WDA callback alloc fail");
11107 VOS_ASSERT(0) ;
11108 return;
11109 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011110
Jeff Johnsone7245742012-09-05 17:12:55 -070011111 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011112 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11113 vos_mem_free(pWdaParams->wdaMsgParam);
11114 vos_mem_free(pWdaParams) ;
11115
Jeff Johnsone7245742012-09-05 17:12:55 -070011116 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080011117 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070011118 * Also, here success always means that we have atleast one BSSID.
11119 */
11120 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
11121
11122 //enable Tx
11123 status = WDA_ResumeDataTx(pWDA);
11124 if(status != VOS_STATUS_SUCCESS)
11125 {
11126 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
11127 }
11128 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
11129 return ;
11130}
11131/*
11132 * FUNCTION: WDA_ProcessStartOemDataReq
11133 * Send Start Oem Data Req to WDI
11134 */
11135VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
11136 tStartOemDataReq *pOemDataReqParams)
11137{
11138 WDI_Status status = WDI_STATUS_SUCCESS;
11139 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011140 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070011141
11142 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
11143
11144 if(NULL == wdiOemDataReqParams)
11145 {
11146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011147 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011148 VOS_ASSERT(0);
11149 return VOS_STATUS_E_NOMEM;
11150 }
11151
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011152 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
11153 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
11154 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
11155 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070011156
11157 wdiOemDataReqParams->wdiReqStatusCB = NULL;
11158
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011159 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11160 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070011161 {
11162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011163 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011164 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011165 vos_mem_free(pOemDataReqParams);
11166 VOS_ASSERT(0);
11167 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070011168 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011169
Bernald44a1ae2013-01-09 08:30:39 -080011170 pWdaParams->pWdaContext = (void*)pWDA;
11171 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
11172 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011173
11174 status = WDI_StartOemDataReq(wdiOemDataReqParams,
11175 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011176
11177 if(IS_WDI_STATUS_FAILURE(status))
11178 {
11179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11180 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011181 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11182 vos_mem_free(pWdaParams->wdaMsgParam);
11183 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011184 }
11185 return CONVERT_WDI2VOS_STATUS(status) ;
11186}
11187#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070011188/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011189 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011190 *
11191 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011192void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011193{
11194 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011196 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011197 if(NULL == pWdaParams)
11198 {
11199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011200 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011201 VOS_ASSERT(0) ;
11202 return ;
11203 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011204
11205 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11206 vos_mem_free(pWdaParams->wdaMsgParam);
11207 vos_mem_free(pWdaParams);
11208
11209 return ;
11210}
11211/*
11212 * FUNCTION: WDA_SetTxPerTrackingReqCallback
11213 * Free memory.
11214 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
11215 */
11216void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
11217{
11218 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11219
11220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11221 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11222
11223 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070011224 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070011225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11226 "%s: pWdaParams received NULL", __func__);
11227 VOS_ASSERT(0);
11228 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011229 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011230
11231 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011232 {
11233 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011234 vos_mem_free(pWdaParams->wdaMsgParam);
11235 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011236 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011237
11238 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011239}
Jeff Johnson295189b2012-06-20 16:38:30 -070011240#ifdef WLAN_FEATURE_GTK_OFFLOAD
11241/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011242 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011243 *
11244 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011245void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011246 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011247{
11248 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11249
11250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011251 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080011252 if(NULL == pWdaParams)
11253 {
11254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11255 "%s: pWdaParams received NULL", __func__);
11256 VOS_ASSERT(0);
11257 return;
11258 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011259
Jeff Johnson295189b2012-06-20 16:38:30 -070011260 vos_mem_free(pWdaParams->wdaMsgParam) ;
11261 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11262 vos_mem_free(pWdaParams) ;
11263
11264 //print a msg, nothing else to do
11265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011266 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011267
11268 return ;
11269}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011270/*
11271 * FUNCTION: WDA_GTKOffloadReqCallback
11272 * Free memory.
11273 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
11274 */
11275void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
11276{
11277 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011278
Yue Ma7f44bbe2013-04-12 11:47:39 -070011279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11280 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11281
11282 if(NULL == pWdaParams)
11283 {
11284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11285 "%s: pWdaParams received NULL", __func__);
11286 VOS_ASSERT(0);
11287 return;
11288 }
11289
11290 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11291 {
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053011292 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
11293 sizeof(WDI_GtkOffloadReqMsg));
11294 vos_mem_zero(pWdaParams->wdaMsgParam,
11295 sizeof(tSirGtkOffloadParams));
Yue Ma7f44bbe2013-04-12 11:47:39 -070011296 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11297 vos_mem_free(pWdaParams->wdaMsgParam);
11298 vos_mem_free(pWdaParams);
11299 }
11300
11301 return;
11302}
Jeff Johnson295189b2012-06-20 16:38:30 -070011303/*
11304 * FUNCTION: WDA_ProcessGTKOffloadReq
11305 * Request to WDI to set the filter to minimize unnecessary host wakeup due
11306 * to broadcast traffic (sta mode).
11307 */
11308VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
11309 tpSirGtkOffloadParams pGtkOffloadParams)
11310{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011311 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011312 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
11313 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
11314 sizeof(WDI_GtkOffloadReqMsg)) ;
11315 tWDA_ReqParams *pWdaParams ;
11316
11317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011318 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011319
11320 if(NULL == wdiGtkOffloadReqMsg)
11321 {
11322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011323 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011324 VOS_ASSERT(0);
11325 return VOS_STATUS_E_NOMEM;
11326 }
11327
11328 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11329 if(NULL == pWdaParams)
11330 {
11331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011332 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011333 VOS_ASSERT(0);
11334 vos_mem_free(wdiGtkOffloadReqMsg);
11335 return VOS_STATUS_E_NOMEM;
11336 }
11337
11338 //
11339 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
11340 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011341
11342 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011343 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011344
Jeff Johnson295189b2012-06-20 16:38:30 -070011345 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
11346 // Copy KCK
11347 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
11348 // Copy KEK
11349 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
11350 // Copy KeyReplayCounter
11351 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
11352 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
11353
Yue Ma7f44bbe2013-04-12 11:47:39 -070011354 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
11355 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011356
Jeff Johnson295189b2012-06-20 16:38:30 -070011357
11358 /* Store Params pass it to WDI */
11359 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
11360 pWdaParams->pWdaContext = pWDA;
11361 /* Store param pointer as passed in by caller */
11362 pWdaParams->wdaMsgParam = pGtkOffloadParams;
11363
Yue Ma7f44bbe2013-04-12 11:47:39 -070011364 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011365
11366 if(IS_WDI_STATUS_FAILURE(status))
11367 {
11368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11369 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053011370 vos_mem_zero(wdiGtkOffloadReqMsg, sizeof(WDI_GtkOffloadReqMsg));
11371 vos_mem_zero(pGtkOffloadParams, sizeof(tSirGtkOffloadParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070011372 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11373 vos_mem_free(pWdaParams->wdaMsgParam);
11374 vos_mem_free(pWdaParams);
11375 }
11376
11377 return CONVERT_WDI2VOS_STATUS(status) ;
11378}
11379
11380/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011381 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011382 *
11383 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011384void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011385 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011386{
11387 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11388 tWDA_CbContext *pWDA;
11389 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Nirav Shah374de6e2014-02-13 16:40:01 +053011390 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070011391 vos_msg_t vosMsg;
11392
11393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011394 "<------ %s " ,__func__);
Nirav Shah374de6e2014-02-13 16:40:01 +053011395
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080011396 if(NULL == pWdaParams)
11397 {
11398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11399 "%s: pWdaParams received NULL", __func__);
11400 VOS_ASSERT(0);
11401 return;
11402 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011403
Nirav Shah374de6e2014-02-13 16:40:01 +053011404 pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams));
11405 if(NULL == pGtkOffloadGetInfoRsp)
11406 {
11407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11408 "%s: vos_mem_malloc failed ", __func__);
11409 VOS_ASSERT(0);
11410 return;
11411 }
11412
Jeff Johnson295189b2012-06-20 16:38:30 -070011413 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
11414 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
11415
11416 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
11417 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
11418
11419 /* Message Header */
11420 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070011421 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011422
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011423 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
11424 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
11425 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
11426 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
11427 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070011428
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011429 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
11430 pwdiGtkOffloadGetInfoRsparams->bssId,
11431 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011432 /* VOS message wrapper */
11433 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
11434 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
11435 vosMsg.bodyval = 0;
11436
11437 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11438 {
11439 /* free the mem and return */
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053011440 vos_mem_zero(pGtkOffloadGetInfoRsp,
11441 sizeof(tSirGtkOffloadGetInfoRspParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070011442 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
11443 }
11444
11445 vos_mem_free(pWdaParams->wdaMsgParam) ;
11446 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11447 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011448
11449 return;
11450}
11451/*
11452 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
11453 * Free memory and send RSP back to SME.
11454 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
11455 */
11456void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
11457{
11458 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11459 vos_msg_t vosMsg;
11460
11461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11462 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11463
11464 if(NULL == pWdaParams)
11465 {
11466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11467 "%s: pWdaParams received NULL", __func__);
11468 VOS_ASSERT(0);
11469 return;
11470 }
11471
11472 /* VOS message wrapper */
11473 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
11474 vosMsg.bodyptr = NULL;
11475 vosMsg.bodyval = 0;
11476
11477 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11478 {
11479 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11480 vos_mem_free(pWdaParams->wdaMsgParam);
11481 vos_mem_free(pWdaParams);
11482 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
11483 }
11484
11485 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011486}
11487#endif
11488
11489/*
11490 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
11491 * Request to WDI to set Tx Per Tracking configurations
11492 */
11493VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
11494{
11495 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011496 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011497 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
11498 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
11499 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
11500 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011502 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011503 if(NULL == pwdiSetTxPerTrackingReqParams)
11504 {
11505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011506 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011507 vos_mem_free(pTxPerTrackingParams);
11508 VOS_ASSERT(0);
11509 return VOS_STATUS_E_NOMEM;
11510 }
11511 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11512 if(NULL == pWdaParams)
11513 {
11514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011515 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011516 vos_mem_free(pwdiSetTxPerTrackingReqParams);
11517 vos_mem_free(pTxPerTrackingParams);
11518 VOS_ASSERT(0);
11519 return VOS_STATUS_E_NOMEM;
11520 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011521 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
11522 pTxPerTrackingParams->ucTxPerTrackingEnable;
11523 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
11524 pTxPerTrackingParams->ucTxPerTrackingPeriod;
11525 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
11526 pTxPerTrackingParams->ucTxPerTrackingRatio;
11527 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
11528 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011529 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
11530 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011531 /* Store param pointer as passed in by caller */
11532 /* store Params pass it to WDI
11533 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
11534 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
11535 pWdaParams->pWdaContext = pWDA;
11536 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011537 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011538 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011539 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011540 {
11541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11542 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011543 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011544 vos_mem_free(pWdaParams->wdaMsgParam) ;
11545 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11546 vos_mem_free(pWdaParams) ;
11547 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011548 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011549
11550}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011551/*
11552 * FUNCTION: WDA_HALDumpCmdCallback
11553 * Send the VOS complete .
11554 */
11555void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
11556 void* pUserData)
11557{
11558 tANI_U8 *buffer = NULL;
11559 tWDA_CbContext *pWDA = NULL;
11560 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011561 if(NULL == pWdaParams)
11562 {
11563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011564 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011565 VOS_ASSERT(0) ;
11566 return ;
11567 }
11568
11569 pWDA = pWdaParams->pWdaContext;
11570 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011571 if(wdiRspParams->usBufferLen > 0)
11572 {
11573 /*Copy the Resp data to UMAC supplied buffer*/
11574 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
11575 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011576 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11577 vos_mem_free(pWdaParams);
11578
11579 /* Indicate VOSS about the start complete */
11580 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070011581 return ;
11582}
11583
Jeff Johnson295189b2012-06-20 16:38:30 -070011584/*
11585 * FUNCTION: WDA_ProcessHALDumpCmdReq
11586 * Send Dump command to WDI
11587 */
11588VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
11589 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
11590 tANI_U32 arg4, tANI_U8 *pBuffer)
11591{
11592 WDI_Status status = WDI_STATUS_SUCCESS;
11593 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
11594 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
11595 tWDA_ReqParams *pWdaParams ;
11596 pVosContextType pVosContext = NULL;
11597 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011598 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
11599 (void *)pMac);
Katya Nigame4bafe02014-02-28 15:37:57 +053011600 if(pVosContext)
11601 {
11602 if (pVosContext->isLogpInProgress)
11603 {
11604 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
11605 "%s:LOGP in Progress. Ignore!!!", __func__);
11606 return VOS_STATUS_E_BUSY;
11607 }
11608 }
11609 else
11610 {
11611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11612 "%s: VOS Context Null", __func__);
11613 return VOS_STATUS_E_RESOURCES;
11614 }
11615
Jeff Johnson295189b2012-06-20 16:38:30 -070011616 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11617 if(NULL == pWdaParams)
11618 {
11619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011620 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011621 return VOS_STATUS_E_NOMEM;
11622 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011623 /* Allocate memory WDI request structure*/
11624 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
11625 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
11626 if(NULL == wdiHALDumpCmdReqParam)
11627 {
11628 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11629 "WDA HAL DUMP Command buffer alloc fail");
11630 vos_mem_free(pWdaParams);
11631 return WDI_STATUS_E_FAILURE;
11632 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011633 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070011634 /* Extract the arguments */
11635 wdiHalDumpCmdInfo->command = cmd;
11636 wdiHalDumpCmdInfo->argument1 = arg1;
11637 wdiHalDumpCmdInfo->argument2 = arg2;
11638 wdiHalDumpCmdInfo->argument3 = arg3;
11639 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070011640 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011641 pWdaParams->pWdaContext = pVosContext->pWDAContext;
11642
11643 /* Response message will be passed through the buffer */
11644 pWdaParams->wdaMsgParam = (void *)pBuffer;
11645
11646 /* store Params pass it to WDI */
11647 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011648 /* Send command to WDI */
11649 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -080011650 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), WDA_DUMPCMD_WAIT_TIMEOUT );
Jeff Johnson295189b2012-06-20 16:38:30 -070011651 if ( vStatus != VOS_STATUS_SUCCESS )
11652 {
11653 if ( vStatus == VOS_STATUS_E_TIMEOUT )
11654 {
11655 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011656 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011657 }
11658 else
11659 {
11660 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011661 "%s: WDA_HALDUMP reporting other error",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011662 }
11663 VOS_ASSERT(0);
11664 }
11665 return status;
11666}
Jeff Johnson295189b2012-06-20 16:38:30 -070011667#ifdef WLAN_FEATURE_GTK_OFFLOAD
11668/*
11669 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
11670 * Request to WDI to get GTK Offload Information
11671 */
11672VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
11673 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
11674{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011675 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011676 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
11677 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
11678 tWDA_ReqParams *pWdaParams ;
11679
11680 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
11681 {
11682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011683 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011684 VOS_ASSERT(0);
11685 return VOS_STATUS_E_NOMEM;
11686 }
11687
11688 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11689 if(NULL == pWdaParams)
11690 {
11691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011692 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011693 VOS_ASSERT(0);
11694 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
11695 return VOS_STATUS_E_NOMEM;
11696 }
11697
Yue Ma7f44bbe2013-04-12 11:47:39 -070011698 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
11699 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011700
Jeff Johnson295189b2012-06-20 16:38:30 -070011701 /* Store Params pass it to WDI */
11702 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
11703 pWdaParams->pWdaContext = pWDA;
11704 /* Store param pointer as passed in by caller */
11705 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
11706
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011707 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011708 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011709
Yue Ma7f44bbe2013-04-12 11:47:39 -070011710 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011711
11712 if(IS_WDI_STATUS_FAILURE(status))
11713 {
11714 /* failure returned by WDI API */
11715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11716 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
11717 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11718 vos_mem_free(pWdaParams) ;
11719 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
11720 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
11721 }
11722
11723 return CONVERT_WDI2VOS_STATUS(status) ;
11724}
11725#endif // WLAN_FEATURE_GTK_OFFLOAD
11726
11727/*
Yue Mab9c86f42013-08-14 15:59:08 -070011728 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
11729 *
11730 */
11731VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
11732 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
11733{
11734 WDI_Status wdiStatus;
11735 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
11736
11737 addPeriodicTxPtrnParams =
11738 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
11739
11740 if (NULL == addPeriodicTxPtrnParams)
11741 {
11742 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11743 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
11744 __func__);
11745
11746 return VOS_STATUS_E_NOMEM;
11747 }
11748
11749 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
11750 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
11751
11752 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
11753 addPeriodicTxPtrnParams->pUserData = pWDA;
11754
11755 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
11756
11757 if (WDI_STATUS_PENDING == wdiStatus)
11758 {
11759 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11760 "Pending received for %s:%d", __func__, __LINE__ );
11761 }
11762 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11763 {
11764 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11765 "Failure in %s:%d", __func__, __LINE__ );
11766 }
11767
11768 vos_mem_free(addPeriodicTxPtrnParams);
11769
11770 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11771}
11772
11773/*
11774 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
11775 *
11776 */
11777VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
11778 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
11779{
11780 WDI_Status wdiStatus;
11781 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
11782
11783 delPeriodicTxPtrnParams =
11784 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
11785
11786 if (NULL == delPeriodicTxPtrnParams)
11787 {
11788 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11789 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
11790 __func__);
11791
11792 return VOS_STATUS_E_NOMEM;
11793 }
11794
11795 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
11796 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
11797
11798 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
11799 delPeriodicTxPtrnParams->pUserData = pWDA;
11800
11801 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
11802
11803 if (WDI_STATUS_PENDING == wdiStatus)
11804 {
11805 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11806 "Pending received for %s:%d", __func__, __LINE__ );
11807 }
11808 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11809 {
11810 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11811 "Failure in %s:%d", __func__, __LINE__ );
11812 }
11813
11814 vos_mem_free(delPeriodicTxPtrnParams);
11815
11816 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11817}
11818
Rajeev79dbe4c2013-10-05 11:03:42 +053011819#ifdef FEATURE_WLAN_BATCH_SCAN
11820/*
11821 * FUNCTION: WDA_ProcessStopBatchScanInd
11822 *
11823 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
11824 *
11825 * PARAM:
11826 * pWDA: pointer to WDA context
11827 * pReq: pointer to stop batch scan request
11828 */
11829VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
11830 tSirStopBatchScanInd *pReq)
11831{
11832 WDI_Status wdiStatus;
11833 WDI_StopBatchScanIndType wdiReq;
11834
11835 wdiReq.param = pReq->param;
11836
11837 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
11838
11839 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11840 {
11841 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11842 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
11843 }
11844
11845 vos_mem_free(pReq);
11846
11847 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11848}
11849/*==========================================================================
11850 FUNCTION WDA_ProcessTriggerBatchScanResultInd
11851
11852 DESCRIPTION
11853 API to pull batch scan result from FW
11854
11855 PARAMETERS
11856 pWDA: Pointer to WDA context
11857 pGetBatchScanReq: Pointer to get batch scan result indication
11858
11859 RETURN VALUE
11860 NONE
11861
11862===========================================================================*/
11863VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
11864 tSirTriggerBatchScanResultInd *pReq)
11865{
11866 WDI_Status wdiStatus;
11867 WDI_TriggerBatchScanResultIndType wdiReq;
11868
11869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11870 "------> %s " ,__func__);
11871
11872 wdiReq.param = pReq->param;
11873
11874 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
11875
11876 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11877 {
11878 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11879 "Trigger batch scan result ind failed %s:%d",
11880 __func__, wdiStatus);
11881 }
11882
11883 vos_mem_free(pReq);
11884
11885 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11886}
11887
11888/*==========================================================================
11889 FUNCTION WDA_SetBatchScanRespCallback
11890
11891 DESCRIPTION
11892 API to process set batch scan response from FW
11893
11894 PARAMETERS
11895 pRsp: Pointer to set batch scan response
11896 pUserData: Pointer to user data
11897
11898 RETURN VALUE
11899 NONE
11900
11901===========================================================================*/
11902void WDA_SetBatchScanRespCallback
11903(
11904 WDI_SetBatchScanRspType *pRsp,
11905 void* pUserData
11906)
11907{
11908 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
11909 tpAniSirGlobal pMac;
11910 void *pCallbackContext;
11911 tWDA_CbContext *pWDA = NULL ;
11912 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11913
11914
11915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11916 "<------ %s " ,__func__);
11917 if (NULL == pWdaParams)
11918 {
11919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11920 "%s: pWdaParams received NULL", __func__);
11921 VOS_ASSERT(0) ;
11922 return ;
11923 }
11924
11925 /*extract WDA context*/
11926 pWDA = pWdaParams->pWdaContext;
11927 if (NULL == pWDA)
11928 {
11929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11930 "%s:pWDA is NULL can't invole HDD callback",
11931 __func__);
11932 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11933 vos_mem_free(pWdaParams->wdaMsgParam);
11934 vos_mem_free(pWdaParams);
11935 VOS_ASSERT(0);
11936 return;
11937 }
11938
11939 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11940 vos_mem_free(pWdaParams->wdaMsgParam);
11941 vos_mem_free(pWdaParams);
11942
11943 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
11944 if (NULL == pMac)
11945 {
11946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11947 "%s:pMac is NULL", __func__);
11948 VOS_ASSERT(0);
11949 return;
11950 }
11951
11952 pHddSetBatchScanRsp =
11953 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
11954 if (NULL == pHddSetBatchScanRsp)
11955 {
11956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11957 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
11958 VOS_ASSERT(0);
11959 return;
11960 }
11961
11962 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
11963
11964 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
11965 /*call hdd callback with set batch scan response data*/
11966 if(pMac->pmc.setBatchScanReqCallback)
11967 {
11968 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
11969 }
11970 else
11971 {
11972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11973 "%s:HDD callback is null", __func__);
11974 VOS_ASSERT(0);
11975 }
11976
11977 vos_mem_free(pHddSetBatchScanRsp);
11978 return ;
11979}
11980
11981/*==========================================================================
11982 FUNCTION WDA_ProcessSetBatchScanReq
11983
11984 DESCRIPTION
11985 API to send set batch scan request to WDI
11986
11987 PARAMETERS
11988 pWDA: Pointer to WDA context
11989 pSetBatchScanReq: Pointer to set batch scan req
11990
11991 RETURN VALUE
11992 NONE
11993
11994===========================================================================*/
11995VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
11996 tSirSetBatchScanReq *pSetBatchScanReq)
11997{
11998 WDI_Status status;
11999 tWDA_ReqParams *pWdaParams ;
12000 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
12001
12002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12003 "------> %s " ,__func__);
12004
12005 pWdiSetBatchScanReq =
12006 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
12007 if (NULL == pWdiSetBatchScanReq)
12008 {
12009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12010 "%s: VOS MEM Alloc Failure", __func__);
12011 vos_mem_free(pSetBatchScanReq);
12012 VOS_ASSERT(0);
12013 return VOS_STATUS_E_NOMEM;
12014 }
12015
12016 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
12017 if (NULL == pWdaParams)
12018 {
12019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12020 "%s: VOS MEM Alloc Failure", __func__);
12021 VOS_ASSERT(0);
12022 vos_mem_free(pSetBatchScanReq);
12023 vos_mem_free(pWdiSetBatchScanReq);
12024 return VOS_STATUS_E_NOMEM;
12025 }
12026
12027 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
12028 pWdiSetBatchScanReq->numberOfScansToBatch =
12029 pSetBatchScanReq->numberOfScansToBatch;
12030 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
12031 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
12032 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
12033
12034 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
12035 pWdaParams->pWdaContext = pWDA;
12036 pWdaParams->wdaMsgParam = pSetBatchScanReq;
12037
12038 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
12039 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
12040 if (IS_WDI_STATUS_FAILURE(status))
12041 {
12042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12043 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
12044 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12045 vos_mem_free(pWdaParams->wdaMsgParam);
12046 vos_mem_free(pWdaParams);
12047 }
12048 return CONVERT_WDI2VOS_STATUS(status);
12049}
12050
12051#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053012052/*
12053 * FUNCTION: WDA_ProcessHT40OBSSScanInd
12054 *
12055 * DESCRIPTION: This function sends start/update OBSS scan
12056 * inidcation message to WDI
12057 *
12058 * PARAM:
12059 * pWDA: pointer to WDA context
12060 * pReq: pointer to start OBSS scan request
12061 */
12062VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
12063 tSirHT40OBSSScanInd *pReq)
12064{
12065 WDI_Status status;
12066 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
12067 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053012068
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053012069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12070 "------> %s " ,__func__);
12071 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
12072 wdiOBSSScanParams.pUserData = pWDA;
12073
12074 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
12075 pWdiOBSSScanInd->cmdType = pReq->cmdType;
12076 pWdiOBSSScanInd->scanType = pReq->scanType;
12077 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
12078 pReq->OBSSScanActiveDwellTime;
12079 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
12080 pReq->OBSSScanPassiveDwellTime;
12081 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
12082 pReq->BSSChannelWidthTriggerScanInterval;
12083 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
12084 pReq->BSSWidthChannelTransitionDelayFactor;
12085 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
12086 pReq->OBSSScanActiveTotalPerChannel;
12087 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
12088 pReq->OBSSScanPassiveTotalPerChannel;
12089 pWdiOBSSScanInd->OBSSScanActivityThreshold =
12090 pReq->OBSSScanActivityThreshold;
12091 pWdiOBSSScanInd->channelCount = pReq->channelCount;
12092 vos_mem_copy(pWdiOBSSScanInd->channels,
12093 pReq->channels,
12094 pReq->channelCount);
12095 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
12096 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
12097 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
12098 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
12099 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
12100
12101 vos_mem_copy(pWdiOBSSScanInd->ieField,
12102 pReq->ieField,
12103 pReq->ieFieldLen);
12104
12105 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
12106 if (WDI_STATUS_PENDING == status)
12107 {
12108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12109 "Pending received for %s:%d ",__func__,__LINE__ );
12110 }
12111 else if (WDI_STATUS_SUCCESS_SYNC != status)
12112 {
12113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12114 "Failure in %s:%d ",__func__,__LINE__ );
12115 }
12116 return CONVERT_WDI2VOS_STATUS(status) ;
12117}
12118/*
12119 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
12120 *
12121 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
12122 *
12123 * PARAM:
12124 * pWDA: pointer to WDA context
12125 * pReq: pointer to stop batch scan request
12126 */
12127VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
12128 tANI_U8 *bssIdx)
12129{
12130 WDI_Status status;
12131
12132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12133 "------> %s " ,__func__);
12134
12135 status = WDI_HT40OBSSStopScanInd(*bssIdx);
12136 if (WDI_STATUS_PENDING == status)
12137 {
12138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12139 "Pending received for %s:%d ",__func__,__LINE__ );
12140 }
12141 else if (WDI_STATUS_SUCCESS_SYNC != status)
12142 {
12143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12144 "Failure in %s:%d ",__func__,__LINE__ );
12145 }
12146 return CONVERT_WDI2VOS_STATUS(status) ;
12147}
Yue Mab9c86f42013-08-14 15:59:08 -070012148/*
Chittajit Mitraf5413a42013-10-18 14:20:08 -070012149 * FUNCTION: WDA_ProcessRateUpdateInd
12150 *
12151 */
12152VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
12153 tSirRateUpdateInd *pRateUpdateParams)
12154{
12155 WDI_Status wdiStatus;
12156 WDI_RateUpdateIndParams rateUpdateParams;
12157
12158 vos_mem_copy(rateUpdateParams.bssid,
12159 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
12160
12161 rateUpdateParams.ucastDataRateTxFlag =
12162 pRateUpdateParams->ucastDataRateTxFlag;
12163 rateUpdateParams.reliableMcastDataRateTxFlag =
12164 pRateUpdateParams->reliableMcastDataRateTxFlag;
12165 rateUpdateParams.mcastDataRate24GHzTxFlag =
12166 pRateUpdateParams->mcastDataRate24GHzTxFlag;
12167 rateUpdateParams.mcastDataRate5GHzTxFlag =
12168 pRateUpdateParams->mcastDataRate5GHzTxFlag;
12169
12170 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
12171 rateUpdateParams.reliableMcastDataRate =
12172 pRateUpdateParams->reliableMcastDataRate;
12173 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
12174 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
12175
12176 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
12177 rateUpdateParams.pUserData = pWDA;
12178
12179 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
12180
12181 if (WDI_STATUS_PENDING == wdiStatus)
12182 {
12183 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12184 "Pending received for %s:%d", __func__, __LINE__ );
12185 }
12186 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12187 {
12188 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12189 "Failure in %s:%d", __func__, __LINE__ );
12190 }
12191
12192 vos_mem_free(pRateUpdateParams);
12193
12194 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12195}
12196
12197/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012198 * -------------------------------------------------------------------------
12199 * DATA interface with WDI for Mgmt Frames
12200 * -------------------------------------------------------------------------
12201 */
Jeff Johnson295189b2012-06-20 16:38:30 -070012202/*
12203 * FUNCTION: WDA_TxComplete
12204 * Callback function for the WDA_TxPacket
12205 */
12206VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
12207 VOS_STATUS status )
12208{
12209
12210 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
12211 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012212 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012213
12214 if(NULL == wdaContext)
12215 {
12216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12217 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012218 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012219 VOS_ASSERT(0);
12220 return VOS_STATUS_E_FAILURE;
12221 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012222
12223 /*Check if frame was timed out or not*/
12224 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
12225 (v_PVOID_t)&uUserData);
12226
12227 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
12228 {
12229 /*Discard frame - no further processing is needed*/
12230 vos_pkt_return_packet(pData);
12231 return VOS_STATUS_SUCCESS;
12232 }
12233
Jeff Johnson295189b2012-06-20 16:38:30 -070012234 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
12235 if( NULL!=wdaContext->pTxCbFunc)
12236 {
12237 /*check if packet is freed already*/
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012238 if(vos_atomic_set((uintptr_t*)&wdaContext->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (uintptr_t)pData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012239 {
12240 wdaContext->pTxCbFunc(pMac, pData);
12241 }
12242 else
12243 {
12244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012245 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012246 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012247 //Return from here since we reaching here because the packet already timeout
12248 return status;
12249 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012250 }
12251
12252 /*
12253 * Trigger the event to bring the HAL TL Tx complete function to come
12254 * out of wait
12255 * Let the coe above to complete the packet first. When this event is set,
12256 * the thread waiting for the event may run and set Vospacket_freed causing the original
12257 * packet not being freed.
12258 */
12259 status = vos_event_set(&wdaContext->txFrameEvent);
12260 if(!VOS_IS_STATUS_SUCCESS(status))
12261 {
12262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012263 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012264 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012265 return status;
12266}
Jeff Johnson295189b2012-06-20 16:38:30 -070012267/*
12268 * FUNCTION: WDA_TxPacket
12269 * Forward TX management frame to WDI
12270 */
12271VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
12272 void *pFrmBuf,
12273 tANI_U16 frmLen,
12274 eFrameType frmType,
12275 eFrameTxDir txDir,
12276 tANI_U8 tid,
12277 pWDATxRxCompFunc pCompFunc,
12278 void *pData,
12279 pWDAAckFnTxComp pAckTxComp,
Kanchanapally, Vidyullathaf9426e52013-12-24 17:28:54 +053012280 tANI_U32 txFlag)
Jeff Johnson295189b2012-06-20 16:38:30 -070012281{
12282 VOS_STATUS status = VOS_STATUS_SUCCESS ;
12283 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
12284 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
12285 tANI_U8 eventIdx = 0;
12286 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
12287 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -070012288 if((NULL == pWDA)||(NULL == pFrmBuf))
12289 {
12290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012291 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012292 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070012293 VOS_ASSERT(0);
12294 return VOS_STATUS_E_FAILURE;
12295 }
12296
12297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012298 "Tx Mgmt Frame Subtype: %d alloc(%p)", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070012299 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12300 if(NULL == pMac)
12301 {
12302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012303 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012304 VOS_ASSERT(0);
12305 return VOS_STATUS_E_FAILURE;
12306 }
12307
12308
12309
12310 /* store the call back function in WDA context */
12311 pWDA->pTxCbFunc = pCompFunc;
12312 /* store the call back for the function of ackTxComplete */
12313 if( pAckTxComp )
12314 {
Jeff Johnsone7245742012-09-05 17:12:55 -070012315 if( NULL != pWDA->pAckTxCbFunc )
12316 {
12317 /* Already TxComp is active no need to active again */
12318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012319 "There is already one request pending for tx complete");
Jeff Johnsone7245742012-09-05 17:12:55 -070012320 pWDA->pAckTxCbFunc( pMac, 0);
12321 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012322
Jeff Johnsone7245742012-09-05 17:12:55 -070012323 if( VOS_STATUS_SUCCESS !=
12324 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12325 {
12326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12327 "Tx Complete timeout Timer Stop Failed ");
12328 }
12329 else
12330 {
12331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080012332 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070012333 }
12334 }
12335
12336 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
12337 pWDA->pAckTxCbFunc = pAckTxComp;
12338 if( VOS_STATUS_SUCCESS !=
12339 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
12340 {
12341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12342 "Tx Complete Timer Start Failed ");
12343 pWDA->pAckTxCbFunc = NULL;
12344 return eHAL_STATUS_FAILURE;
12345 }
12346 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012347 /* Reset the event to be not signalled */
12348 status = vos_event_reset(&pWDA->txFrameEvent);
12349 if(!VOS_IS_STATUS_SUCCESS(status))
12350 {
12351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012352 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012353 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
12354 if( pAckTxComp )
12355 {
12356 pWDA->pAckTxCbFunc = NULL;
12357 if( VOS_STATUS_SUCCESS !=
12358 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12359 {
12360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12361 "Tx Complete timeout Timer Stop Failed ");
12362 }
12363 }
12364 return VOS_STATUS_E_FAILURE;
12365 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012366
12367 /* If Peer Sta mask is set don't overwrite to self sta */
12368 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070012369 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012370 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070012371 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012372 else
12373 {
Ganesh K08bce952012-12-13 15:04:41 -080012374 /* Get system role, use the self station if in unknown role or STA role */
12375 systemRole = wdaGetGlobalSystemRole(pMac);
12376 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
12377 (( eSYSTEM_STA_ROLE == systemRole )
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012378#if defined FEATURE_WLAN_ESE || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080012379 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012380#endif
Ganesh K08bce952012-12-13 15:04:41 -080012381 ))
12382 {
12383 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
12384 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080012385 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012386
Jeff Johnsone7245742012-09-05 17:12:55 -070012387 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
12388 disassoc frame reaches the HW, HAL has already deleted the peer station */
12389 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070012390 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080012391 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070012392 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070012393 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012394 /*Send Probe request frames on self sta idx*/
12395 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070012396 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012397 /* Since we donot want probe responses to be retried, send probe responses
12398 through the NO_ACK queues */
12399 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
12400 {
12401 //probe response is sent out using self station and no retries options.
12402 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
12403 }
12404 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
12405 {
12406 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
12407 }
12408 }
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012409 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012410
12411 /*Set frame tag to 0
12412 We will use the WDA user data in order to tag a frame as expired*/
12413 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
12414 (v_PVOID_t)0);
12415
12416
12417 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
12418 frmLen, ucTypeSubType, tid,
12419 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
12420 {
12421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012422 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012423 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012424 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 -070012425 if( pAckTxComp )
12426 {
12427 pWDA->pAckTxCbFunc = NULL;
12428 if( VOS_STATUS_SUCCESS !=
12429 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12430 {
12431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12432 "Tx Complete timeout Timer Stop Failed ");
12433 }
12434 }
12435 return VOS_STATUS_E_FAILURE;
12436 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012437 /*
12438 * Wait for the event to be set by the TL, to get the response of TX
12439 * complete, this event should be set by the Callback function called by TL
12440 */
12441 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
12442 &eventIdx);
12443 if(!VOS_IS_STATUS_SUCCESS(status))
12444 {
12445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12446 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012447 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012448 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
12449 after the packet gets completed(packet freed once)*/
12450
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070012451 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Katya Nigam53677462014-08-04 11:37:28 +053012452 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070012453
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012454 /*Tag Frame as timed out for later deletion*/
12455 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
12456 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
12457
Jeff Johnson295189b2012-06-20 16:38:30 -070012458 /* check whether the packet was freed already,so need not free again when
12459 * TL calls the WDA_Txcomplete routine
12460 */
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012461 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED);
12462 /*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 -070012463 {
12464 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012465 } */
12466
Jeff Johnson295189b2012-06-20 16:38:30 -070012467 if( pAckTxComp )
12468 {
12469 pWDA->pAckTxCbFunc = NULL;
12470 if( VOS_STATUS_SUCCESS !=
12471 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12472 {
12473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12474 "Tx Complete timeout Timer Stop Failed ");
12475 }
12476 }
12477 status = VOS_STATUS_E_FAILURE;
12478 }
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053012479#ifdef WLAN_DUMP_MGMTFRAMES
12480 if (VOS_IS_STATUS_SUCCESS(status))
12481 {
12482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12483 "%s() TX packet : SubType %d", __func__,pFc->subType);
12484 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12485 pData, frmLen);
12486 }
12487#endif
12488
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080012489 if (VOS_IS_STATUS_SUCCESS(status))
12490 {
12491 if (pMac->fEnableDebugLog & 0x1)
12492 {
12493 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
12494 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
12495 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
12496 {
12497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
12498 pFc->type, pFc->subType);
12499 }
12500 }
12501 }
12502
12503
Jeff Johnson295189b2012-06-20 16:38:30 -070012504 return status;
12505}
Jeff Johnson295189b2012-06-20 16:38:30 -070012506/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012507 * FUNCTION: WDA_ProcessDHCPStartInd
12508 * Forward DHCP Start to WDI
12509 */
12510static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
12511 tAniDHCPInd *dhcpStartInd)
12512{
12513 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053012514 WDI_DHCPInd wdiDHCPInd;
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012515
c_hpothu0b0cab72014-02-13 21:52:40 +053012516 wdiDHCPInd.device_mode = dhcpStartInd->device_mode;
12517 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStartInd->macAddr,
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012518 sizeof(tSirMacAddr));
12519
c_hpothu0b0cab72014-02-13 21:52:40 +053012520 status = WDI_dhcpStartInd(&wdiDHCPInd);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012521
c_hpothu0b0cab72014-02-13 21:52:40 +053012522 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012523 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12525 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012526 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012527 else if (WDI_STATUS_SUCCESS_SYNC != status)
12528 {
12529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12530 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
12531 }
12532
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012533 vos_mem_free(dhcpStartInd);
12534 return CONVERT_WDI2VOS_STATUS(status) ;
12535}
12536
12537 /*
12538 * FUNCTION: WDA_ProcessDHCPStopInd
12539 * Forward DHCP Stop to WDI
12540 */
12541 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
12542 tAniDHCPInd *dhcpStopInd)
12543 {
12544 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053012545 WDI_DHCPInd wdiDHCPInd;
12546
12547 wdiDHCPInd.device_mode = dhcpStopInd->device_mode;
12548 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
12549
12550 status = WDI_dhcpStopInd(&wdiDHCPInd);
12551
12552 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012553 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12555 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012556 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012557 else if (WDI_STATUS_SUCCESS_SYNC != status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012558 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12560 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012561 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012562
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012563 vos_mem_free(dhcpStopInd);
c_hpothu0b0cab72014-02-13 21:52:40 +053012564
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012565 return CONVERT_WDI2VOS_STATUS(status) ;
12566 }
12567
12568/*
Siddharth Bhal171788a2014-09-29 21:02:40 +053012569 * FUNCTION: WDA_ProcessSetSpoofMacAddrReq
12570 *
12571 * DESCRIPTION: This function sends Spoof Mac Addr Req to WDI
12572 *
12573 * PARAM:
12574 * pWDA: pointer to WDA context
12575 * pReq: pointer to stop batch scan request
12576 */
12577VOS_STATUS WDA_ProcessSetSpoofMacAddrReq(tWDA_CbContext *pWDA,
12578 tpSpoofMacAddrReqParams pReq)
12579{
12580 WDI_Status wdiStatus;
12581 WDI_SpoofMacAddrInfoType *WDI_SpoofMacAddrInfoParams;
12582 tWDA_ReqParams *pWdaParams;
12583
12584 WDI_SpoofMacAddrInfoParams = (WDI_SpoofMacAddrInfoType *)vos_mem_malloc(
12585 sizeof(WDI_SpoofMacAddrInfoType));
12586 if(NULL == WDI_SpoofMacAddrInfoParams) {
12587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12588 "%s: VOS MEM Alloc Failure in Spoof Req", __func__);
12589 VOS_ASSERT(0);
12590 return VOS_STATUS_E_NOMEM;
12591 }
12592 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12593 if(NULL == pWdaParams) {
12594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12595 "%s: VOS MEM Alloc Failure", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +053012596 vos_mem_free(WDI_SpoofMacAddrInfoParams);
Siddharth Bhal171788a2014-09-29 21:02:40 +053012597 VOS_ASSERT(0);
12598 return VOS_STATUS_E_NOMEM;
12599 }
12600
12601 vos_mem_copy(WDI_SpoofMacAddrInfoParams->macAddr,
12602 pReq->macAddr, VOS_MAC_ADDRESS_LEN);
12603
12604 pWdaParams->pWdaContext = pWDA;
12605 /* Store Upper layer req pointer, as this will be used for response */
Siddharth Bhal029d6732014-10-09 21:31:23 +053012606 pWdaParams->wdaMsgParam = (void *)pReq;
12607
12608 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, WDA_MAC_ADDRESS_STR,
12609 WDA_MAC_ADDR_ARRAY(WDI_SpoofMacAddrInfoParams->macAddr));
12610
Siddharth Bhal171788a2014-09-29 21:02:40 +053012611 /* store Params pass it to WDI */
12612 pWdaParams->wdaWdiApiMsgParam = (void *)WDI_SpoofMacAddrInfoParams ;
12613
12614 wdiStatus = WDI_SetSpoofMacAddrReq(WDI_SpoofMacAddrInfoParams,
Siddharth Bhal029d6732014-10-09 21:31:23 +053012615 (WDI_SetSpoofMacAddrRspCb) WDA_SpoofMacAddrRspCallback,
12616 pWdaParams );
Siddharth Bhal171788a2014-09-29 21:02:40 +053012617
12618 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12619 {
12620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12621 "Failure in SetSpoofMacAddrReq Params WDI API, free all the memory " );
12622 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12623 vos_mem_free(pWdaParams->wdaMsgParam);
12624 vos_mem_free(pWdaParams);
12625 }
12626
12627 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
12628}
12629
12630/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012631 * FUNCTION: WDA_McProcessMsg
12632 * Trigger DAL-AL to start CFG download
12633 */
12634VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
12635{
12636 VOS_STATUS status = VOS_STATUS_SUCCESS;
12637 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012638 if(NULL == pMsg)
12639 {
12640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012641 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012642 VOS_ASSERT(0);
12643 return VOS_STATUS_E_FAILURE;
12644 }
12645
12646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012647 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070012648
12649 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
12650 if(NULL == pWDA )
12651 {
12652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012653 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012654 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070012655 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012656 return VOS_STATUS_E_FAILURE;
12657 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012658 /* Process all the WDA messages.. */
12659 switch( pMsg->type )
12660 {
12661 case WNI_CFG_DNLD_REQ:
12662 {
12663 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070012664 /* call WDA complete event if config download success */
12665 if( VOS_IS_STATUS_SUCCESS(status) )
12666 {
12667 vos_WDAComplete_cback(pVosContext);
12668 }
12669 else
12670 {
12671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12672 "WDA Config Download failure" );
12673 }
12674 break ;
12675 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012676 /*
12677 * Init SCAN request from PE, convert it into DAL format
12678 * and send it to DAL
12679 */
12680 case WDA_INIT_SCAN_REQ:
12681 {
12682 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
12683 break ;
12684 }
12685 /* start SCAN request from PE */
12686 case WDA_START_SCAN_REQ:
12687 {
12688 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
12689 break ;
12690 }
12691 /* end SCAN request from PE */
12692 case WDA_END_SCAN_REQ:
12693 {
12694 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
12695 break ;
12696 }
12697 /* end SCAN request from PE */
12698 case WDA_FINISH_SCAN_REQ:
12699 {
12700 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
12701 break ;
12702 }
12703 /* join request from PE */
12704 case WDA_CHNL_SWITCH_REQ:
12705 {
12706 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
12707 {
12708 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
12709 }
12710 else
12711 {
Kalikinkar dhara1e83b772014-02-06 12:59:22 -080012712 if (IS_FEATURE_SUPPORTED_BY_FW(CH_SWITCH_V1) &&
12713 eHAL_CHANNEL_SWITCH_SOURCE_CSA ==
12714 ((tSwitchChannelParams*)pMsg->bodyptr)->channelSwitchSrc )
12715 {
12716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12717 "call ProcessChannelSwitchReq_V1" );
12718 WDA_ProcessChannelSwitchReq_V1(pWDA,
12719 (tSwitchChannelParams*)pMsg->bodyptr) ;
12720 }
12721 else
12722 {
12723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12724 "call ProcessChannelSwitchReq" );
12725 WDA_ProcessChannelSwitchReq(pWDA,
12726 (tSwitchChannelParams*)pMsg->bodyptr) ;
12727 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012728 }
12729 break ;
12730 }
12731 /* ADD BSS request from PE */
12732 case WDA_ADD_BSS_REQ:
12733 {
12734 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
12735 break ;
12736 }
12737 case WDA_ADD_STA_REQ:
12738 {
12739 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
12740 break ;
12741 }
12742 case WDA_DELETE_BSS_REQ:
12743 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012744 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
12745 break ;
12746 }
12747 case WDA_DELETE_STA_REQ:
12748 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012749 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
12750 break ;
12751 }
12752 case WDA_CONFIG_PARAM_UPDATE_REQ:
12753 {
12754 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
12755 break ;
12756 }
12757 case WDA_SET_BSSKEY_REQ:
12758 {
12759 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
12760 break ;
12761 }
12762 case WDA_SET_STAKEY_REQ:
12763 {
12764 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
12765 break ;
12766 }
12767 case WDA_SET_STA_BCASTKEY_REQ:
12768 {
12769 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
12770 break ;
12771 }
12772 case WDA_REMOVE_BSSKEY_REQ:
12773 {
12774 WDA_ProcessRemoveBssKeyReq(pWDA,
12775 (tRemoveBssKeyParams *)pMsg->bodyptr);
12776 break ;
12777 }
12778 case WDA_REMOVE_STAKEY_REQ:
12779 {
12780 WDA_ProcessRemoveStaKeyReq(pWDA,
12781 (tRemoveStaKeyParams *)pMsg->bodyptr);
12782 break ;
12783 }
12784 case WDA_REMOVE_STA_BCASTKEY_REQ:
12785 {
12786 /* TODO: currently UMAC is not sending this request, Add the code for
12787 handling this request when UMAC supports */
12788 break;
12789 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012790#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -070012791 case WDA_TSM_STATS_REQ:
12792 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070012793 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012794 break;
12795 }
12796#endif
12797 case WDA_UPDATE_EDCA_PROFILE_IND:
12798 {
12799 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
12800 break;
12801 }
12802 case WDA_ADD_TS_REQ:
12803 {
12804 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
12805 break;
12806 }
12807 case WDA_DEL_TS_REQ:
12808 {
12809 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
12810 break;
12811 }
12812 case WDA_ADDBA_REQ:
12813 {
12814 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
12815 break;
12816 }
12817 case WDA_DELBA_IND:
12818 {
12819 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
12820 break;
12821 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080012822 case WDA_UPDATE_CHAN_LIST_REQ:
12823 {
12824 WDA_ProcessUpdateChannelList(pWDA,
12825 (tSirUpdateChanList *)pMsg->bodyptr);
12826 break;
12827 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012828 case WDA_SET_LINK_STATE:
12829 {
12830 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
12831 break;
12832 }
12833 case WDA_GET_STATISTICS_REQ:
12834 {
12835 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
12836 break;
12837 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012838#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080012839 case WDA_GET_ROAM_RSSI_REQ:
12840 {
12841 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
12842 break;
12843 }
12844#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012845 case WDA_PWR_SAVE_CFG:
12846 {
12847 if(pWDA->wdaState == WDA_READY_STATE)
12848 {
12849 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
12850 }
12851 else
12852 {
12853 if(NULL != pMsg->bodyptr)
12854 {
12855 vos_mem_free(pMsg->bodyptr);
12856 }
12857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12858 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
12859 }
12860 break;
12861 }
12862 case WDA_ENTER_IMPS_REQ:
12863 {
12864 if(pWDA->wdaState == WDA_READY_STATE)
12865 {
12866 WDA_ProcessEnterImpsReq(pWDA);
12867 }
12868 else
12869 {
12870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12871 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
12872 }
12873 break;
12874 }
12875 case WDA_EXIT_IMPS_REQ:
12876 {
12877 if(pWDA->wdaState == WDA_READY_STATE)
12878 {
12879 WDA_ProcessExitImpsReq(pWDA);
12880 }
12881 else
12882 {
12883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12884 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
12885 }
12886 break;
12887 }
12888 case WDA_ENTER_BMPS_REQ:
12889 {
12890 if(pWDA->wdaState == WDA_READY_STATE)
12891 {
12892 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
12893 }
12894 else
12895 {
12896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12897 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
12898 }
12899 break;
12900 }
12901 case WDA_EXIT_BMPS_REQ:
12902 {
12903 if(pWDA->wdaState == WDA_READY_STATE)
12904 {
12905 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
12906 }
12907 else
12908 {
12909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12910 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
12911 }
12912 break;
12913 }
12914 case WDA_ENTER_UAPSD_REQ:
12915 {
12916 if(pWDA->wdaState == WDA_READY_STATE)
12917 {
12918 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
12919 }
12920 else
12921 {
12922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12923 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
12924 }
12925 break;
12926 }
12927 case WDA_EXIT_UAPSD_REQ:
12928 {
12929 if(pWDA->wdaState == WDA_READY_STATE)
12930 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012931 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012932 }
12933 else
12934 {
12935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12936 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
12937 }
12938 break;
12939 }
12940 case WDA_UPDATE_UAPSD_IND:
12941 {
12942 if(pWDA->wdaState == WDA_READY_STATE)
12943 {
12944 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
12945 }
12946 else
12947 {
12948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12949 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
12950 }
12951 break;
12952 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012953 case WDA_REGISTER_PE_CALLBACK :
12954 {
12955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12956 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
12957 /*TODO: store the PE callback */
12958 /* Do Nothing? MSG Body should be freed at here */
12959 if(NULL != pMsg->bodyptr)
12960 {
12961 vos_mem_free(pMsg->bodyptr);
12962 }
12963 break;
12964 }
12965 case WDA_SYS_READY_IND :
12966 {
12967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12968 "Handling msg type WDA_SYS_READY_IND " );
12969 pWDA->wdaState = WDA_READY_STATE;
12970 if(NULL != pMsg->bodyptr)
12971 {
12972 vos_mem_free(pMsg->bodyptr);
12973 }
12974 break;
12975 }
12976 case WDA_BEACON_FILTER_IND :
12977 {
12978 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
12979 break;
12980 }
12981 case WDA_BTC_SET_CFG:
12982 {
12983 /*TODO: handle this while dealing with BTC */
12984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12985 "Handling msg type WDA_BTC_SET_CFG " );
12986 /* Do Nothing? MSG Body should be freed at here */
12987 if(NULL != pMsg->bodyptr)
12988 {
12989 vos_mem_free(pMsg->bodyptr);
12990 }
12991 break;
12992 }
12993 case WDA_SIGNAL_BT_EVENT:
12994 {
12995 /*TODO: handle this while dealing with BTC */
12996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12997 "Handling msg type WDA_SIGNAL_BT_EVENT " );
12998 /* Do Nothing? MSG Body should be freed at here */
12999 if(NULL != pMsg->bodyptr)
13000 {
13001 vos_mem_free(pMsg->bodyptr);
13002 }
13003 break;
13004 }
13005 case WDA_CFG_RXP_FILTER_REQ:
13006 {
13007 WDA_ProcessConfigureRxpFilterReq(pWDA,
13008 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
13009 break;
13010 }
13011 case WDA_SET_HOST_OFFLOAD:
13012 {
13013 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
13014 break;
13015 }
13016 case WDA_SET_KEEP_ALIVE:
13017 {
13018 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
13019 break;
13020 }
13021#ifdef WLAN_NS_OFFLOAD
13022 case WDA_SET_NS_OFFLOAD:
13023 {
13024 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
13025 break;
13026 }
13027#endif //WLAN_NS_OFFLOAD
13028 case WDA_ADD_STA_SELF_REQ:
13029 {
13030 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
13031 break;
13032 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013033 case WDA_DEL_STA_SELF_REQ:
13034 {
13035 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
13036 break;
13037 }
13038 case WDA_WOWL_ADD_BCAST_PTRN:
13039 {
13040 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
13041 break;
13042 }
13043 case WDA_WOWL_DEL_BCAST_PTRN:
13044 {
13045 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
13046 break;
13047 }
13048 case WDA_WOWL_ENTER_REQ:
13049 {
13050 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
13051 break;
13052 }
13053 case WDA_WOWL_EXIT_REQ:
13054 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013055 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070013056 break;
13057 }
13058 case WDA_TL_FLUSH_AC_REQ:
13059 {
13060 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
13061 break;
13062 }
13063 case WDA_SIGNAL_BTAMP_EVENT:
13064 {
13065 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
13066 break;
13067 }
Abhishek Singh85b74712014-10-08 11:38:19 +053013068 case WDA_FW_STATS_GET_REQ:
13069 {
13070 WDA_ProcessFWStatsGetReq(pWDA,
13071 (tSirFWStatsGetReq *)pMsg->bodyptr);
13072 break;
13073 }
Sunil Duttbd736ed2014-05-26 21:19:41 +053013074#ifdef WLAN_FEATURE_LINK_LAYER_STATS
13075 case WDA_LINK_LAYER_STATS_SET_REQ:
13076 {
13077 WDA_ProcessLLStatsSetReq(pWDA, (tSirLLStatsSetReq *)pMsg->bodyptr);
13078 break;
13079 }
13080 case WDA_LINK_LAYER_STATS_GET_REQ:
13081 {
13082 WDA_ProcessLLStatsGetReq(pWDA, (tSirLLStatsGetReq *)pMsg->bodyptr);
13083 break;
13084 }
13085 case WDA_LINK_LAYER_STATS_CLEAR_REQ:
13086 {
13087 WDA_ProcessLLStatsClearReq(pWDA, (tSirLLStatsClearReq *)pMsg->bodyptr);
13088 break;
13089 }
13090#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Dino Mycle41bdc942014-06-10 11:30:24 +053013091#ifdef WLAN_FEATURE_EXTSCAN
13092 case WDA_EXTSCAN_GET_CAPABILITIES_REQ:
13093 {
13094 WDA_ProcessEXTScanGetCapabilitiesReq(pWDA,
13095 (tSirGetEXTScanCapabilitiesReqParams *)pMsg->bodyptr);
13096 break;
13097 }
13098 case WDA_EXTSCAN_START_REQ:
13099 {
13100 WDA_ProcessEXTScanStartReq(pWDA,
13101 (tSirEXTScanStartReqParams *)pMsg->bodyptr);
13102 break;
13103 }
13104 case WDA_EXTSCAN_STOP_REQ:
13105 {
13106 WDA_ProcessEXTScanStopReq(pWDA,
13107 (tSirEXTScanStopReqParams *)pMsg->bodyptr);
13108 break;
13109 }
13110 case WDA_EXTSCAN_GET_CACHED_RESULTS_REQ:
13111 {
13112 WDA_ProcessEXTScanGetCachedResultsReq(pWDA,
13113 (tSirEXTScanGetCachedResultsReqParams *)pMsg->bodyptr);
13114 break;
13115 }
13116 case WDA_EXTSCAN_SET_BSSID_HOTLIST_REQ:
13117 {
13118 WDA_ProcessEXTScanSetBSSIDHotlistReq(pWDA,
13119 (tSirEXTScanSetBssidHotListReqParams *)pMsg->bodyptr);
13120 break;
13121 }
13122 case WDA_EXTSCAN_RESET_BSSID_HOTLIST_REQ:
13123 {
13124 WDA_ProcessEXTScanResetBSSIDHotlistReq(pWDA,
13125 (tSirEXTScanResetBssidHotlistReqParams *)pMsg->bodyptr);
13126 break;
13127 }
13128 case WDA_EXTSCAN_SET_SIGNF_RSSI_CHANGE_REQ:
13129 {
13130 WDA_ProcessEXTScanSetSignfRSSIChangeReq(pWDA,
13131 (tSirEXTScanSetSignificantChangeReqParams *)pMsg->bodyptr);
13132 break;
13133 }
13134 case WDA_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_REQ:
13135 {
13136 WDA_ProcessEXTScanResetSignfRSSIChangeReq(pWDA,
13137 (tSirEXTScanResetSignificantChangeReqParams *)pMsg->bodyptr);
13138 break;
13139 }
13140#endif /* WLAN_FEATURE_EXTSCAN */
Jeff Johnson295189b2012-06-20 16:38:30 -070013141#ifdef WDA_UT
13142 case WDA_WDI_EVENT_MSG:
13143 {
13144 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
13145 break ;
13146 }
13147#endif
13148 case WDA_UPDATE_BEACON_IND:
13149 {
13150 WDA_ProcessUpdateBeaconParams(pWDA,
13151 (tUpdateBeaconParams *)pMsg->bodyptr);
13152 break;
13153 }
13154 case WDA_SEND_BEACON_REQ:
13155 {
13156 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
13157 break;
13158 }
13159 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
13160 {
13161 WDA_ProcessUpdateProbeRspTemplate(pWDA,
13162 (tSendProbeRespParams *)pMsg->bodyptr);
13163 break;
13164 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013165#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -070013166 case WDA_SET_MAX_TX_POWER_REQ:
13167 {
13168 WDA_ProcessSetMaxTxPowerReq(pWDA,
13169 (tMaxTxPowerParams *)pMsg->bodyptr);
13170 break;
13171 }
13172#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070013173 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
13174 {
13175 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
13176 pMsg->bodyptr);
13177 break;
13178 }
schang86c22c42013-03-13 18:41:24 -070013179 case WDA_SET_TX_POWER_REQ:
13180 {
13181 WDA_ProcessSetTxPowerReq(pWDA,
13182 (tSirSetTxPowerReq *)pMsg->bodyptr);
13183 break;
13184 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013185 case WDA_SET_P2P_GO_NOA_REQ:
13186 {
13187 WDA_ProcessSetP2PGONOAReq(pWDA,
13188 (tP2pPsParams *)pMsg->bodyptr);
13189 break;
13190 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013191 /* timer related messages */
13192 case WDA_TIMER_BA_ACTIVITY_REQ:
13193 {
13194 WDA_BaCheckActivity(pWDA) ;
13195 break ;
13196 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013197
13198 /* timer related messages */
13199 case WDA_TIMER_TRAFFIC_STATS_IND:
13200 {
13201 WDA_TimerTrafficStatsInd(pWDA);
13202 break;
13203 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013204#ifdef WLAN_FEATURE_VOWIFI_11R
13205 case WDA_AGGR_QOS_REQ:
13206 {
13207 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
13208 break;
13209 }
13210#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070013211 case WDA_FTM_CMD_REQ:
13212 {
13213 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
13214 break ;
13215 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013216#ifdef FEATURE_OEM_DATA_SUPPORT
13217 case WDA_START_OEM_DATA_REQ:
13218 {
13219 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
13220 break;
13221 }
13222#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070013223 /* Tx Complete Time out Indication */
13224 case WDA_TX_COMPLETE_TIMEOUT_IND:
13225 {
13226 WDA_ProcessTxCompleteTimeOutInd(pWDA);
13227 break;
13228 }
13229 case WDA_WLAN_SUSPEND_IND:
13230 {
13231 WDA_ProcessWlanSuspendInd(pWDA,
13232 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
13233 break;
13234 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013235 case WDA_WLAN_RESUME_REQ:
13236 {
13237 WDA_ProcessWlanResumeReq(pWDA,
13238 (tSirWlanResumeParam *)pMsg->bodyptr) ;
13239 break;
13240 }
13241
13242 case WDA_UPDATE_CF_IND:
13243 {
13244 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
13245 pMsg->bodyptr = NULL;
13246 break;
13247 }
13248#ifdef FEATURE_WLAN_SCAN_PNO
13249 case WDA_SET_PNO_REQ:
13250 {
13251 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
13252 break;
13253 }
13254 case WDA_UPDATE_SCAN_PARAMS_REQ:
13255 {
13256 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
13257 break;
13258 }
13259 case WDA_SET_RSSI_FILTER_REQ:
13260 {
13261 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
13262 break;
13263 }
13264#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013265#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013266 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013267 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013268 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013269 break;
13270 }
13271#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013272 case WDA_SET_TX_PER_TRACKING_REQ:
13273 {
13274 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
13275 break;
13276 }
13277
13278#ifdef WLAN_FEATURE_PACKET_FILTERING
13279 case WDA_8023_MULTICAST_LIST_REQ:
13280 {
13281 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
13282 break;
13283 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013284 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
13285 {
13286 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
13287 break;
13288 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013289 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
13290 {
13291 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
13292 break;
13293 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013294 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
13295 {
13296 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
13297 break;
13298 }
13299#endif // WLAN_FEATURE_PACKET_FILTERING
13300
13301
13302 case WDA_TRANSMISSION_CONTROL_IND:
13303 {
13304 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
13305 break;
13306 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013307 case WDA_SET_POWER_PARAMS_REQ:
13308 {
13309 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
13310 break;
13311 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013312#ifdef WLAN_FEATURE_GTK_OFFLOAD
13313 case WDA_GTK_OFFLOAD_REQ:
13314 {
13315 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
13316 break;
13317 }
13318
13319 case WDA_GTK_OFFLOAD_GETINFO_REQ:
13320 {
13321 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
13322 break;
13323 }
13324#endif //WLAN_FEATURE_GTK_OFFLOAD
13325
13326 case WDA_SET_TM_LEVEL_REQ:
13327 {
13328 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
13329 break;
13330 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053013331
Mohit Khanna4a70d262012-09-11 16:30:12 -070013332 case WDA_UPDATE_OP_MODE:
13333 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053013334 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
13335 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
13336 {
13337 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
13338 }
13339 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070013340 {
13341 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
13342 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
13343 else
13344 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013345 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070013346 }
13347 else
13348 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013349 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070013350 break;
13351 }
Chet Lanctot186b5732013-03-18 10:26:30 -070013352#ifdef WLAN_FEATURE_11W
13353 case WDA_EXCLUDE_UNENCRYPTED_IND:
13354 {
13355 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
13356 break;
13357 }
13358#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053013359#ifdef FEATURE_WLAN_TDLS
13360 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
13361 {
13362 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
13363 break;
13364 }
13365#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013366 case WDA_DHCP_START_IND:
13367 {
13368 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
13369 break;
13370 }
13371 case WDA_DHCP_STOP_IND:
13372 {
13373 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
13374 break;
13375 }
Leo Chang9056f462013-08-01 19:21:11 -070013376#ifdef FEATURE_WLAN_LPHB
13377 case WDA_LPHB_CONF_REQ:
13378 {
13379 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
13380 break;
13381 }
13382#endif
Yue Mab9c86f42013-08-14 15:59:08 -070013383 case WDA_ADD_PERIODIC_TX_PTRN_IND:
13384 {
13385 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
13386 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
13387 break;
13388 }
13389 case WDA_DEL_PERIODIC_TX_PTRN_IND:
13390 {
13391 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
13392 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
13393 break;
13394 }
13395
Rajeev79dbe4c2013-10-05 11:03:42 +053013396#ifdef FEATURE_WLAN_BATCH_SCAN
13397 case WDA_SET_BATCH_SCAN_REQ:
13398 {
13399 WDA_ProcessSetBatchScanReq(pWDA,
13400 (tSirSetBatchScanReq *)pMsg->bodyptr);
13401 break;
13402 }
Chittajit Mitraf5413a42013-10-18 14:20:08 -070013403 case WDA_RATE_UPDATE_IND:
13404 {
13405 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
13406 break;
13407 }
Rajeev79dbe4c2013-10-05 11:03:42 +053013408 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
13409 {
13410 WDA_ProcessTriggerBatchScanResultInd(pWDA,
13411 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
13412 break;
13413 }
13414 case WDA_STOP_BATCH_SCAN_IND:
13415 {
13416 WDA_ProcessStopBatchScanInd(pWDA,
13417 (tSirStopBatchScanInd *)pMsg->bodyptr);
13418 break;
13419 }
c_hpothu92367912014-05-01 15:18:17 +053013420 case WDA_GET_BCN_MISS_RATE_REQ:
13421 WDA_ProcessGetBcnMissRateReq(pWDA,
13422 (tSirBcnMissRateReq *)pMsg->bodyptr);
13423 break;
Rajeev79dbe4c2013-10-05 11:03:42 +053013424#endif
13425
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053013426 case WDA_HT40_OBSS_SCAN_IND:
13427 {
13428 WDA_ProcessHT40OBSSScanInd(pWDA,
13429 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
13430 break;
13431 }
13432 case WDA_HT40_OBSS_STOP_SCAN_IND:
13433 {
13434 WDA_ProcessHT40OBSSStopScanInd(pWDA,
13435 (tANI_U8*)pMsg->bodyptr);
13436 break;
13437 }
Atul Mittalc0f739f2014-07-31 13:47:47 +053013438// tdlsoffchan
13439#ifdef FEATURE_WLAN_TDLS
13440 case WDA_SET_TDLS_CHAN_SWITCH_REQ:
13441 {
13442 WDA_ProcessSetTdlsChanSwitchReq(pWDA, (tTdlsChanSwitchParams *)pMsg->bodyptr);
13443 break;
13444 }
13445#endif
Siddharth Bhal171788a2014-09-29 21:02:40 +053013446 case WDA_SPOOF_MAC_ADDR_REQ:
13447 {
13448 WDA_ProcessSetSpoofMacAddrReq(pWDA, (tpSpoofMacAddrReqParams)pMsg->bodyptr);
13449 break;
13450 }
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053013451 case WDA_ENCRYPT_MSG_REQ:
13452 {
13453 WDA_ProcessEncryptMsgReq(pWDA, (u8 *)pMsg->bodyptr);
13454 break;
13455 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013456 default:
13457 {
Agarwal Ashishbf98caf2014-03-25 13:29:11 +053013458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070013459 "No Handling for msg type %x in WDA "
13460 ,pMsg->type);
13461 /* Do Nothing? MSG Body should be freed at here */
13462 if(NULL != pMsg->bodyptr)
13463 {
13464 vos_mem_free(pMsg->bodyptr);
13465 }
13466 //WDA_VOS_ASSERT(0) ;
13467 }
13468 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013469 return status ;
13470}
13471
Jeff Johnson295189b2012-06-20 16:38:30 -070013472/*
13473 * FUNCTION: WDA_LowLevelIndCallback
13474 * IND API callback from WDI, send Ind to PE
13475 */
13476void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
13477 void* pUserData )
13478{
13479 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
13480#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
13481 tSirRSSINotification rssiNotification;
13482#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013483 if(NULL == pWDA)
13484 {
13485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013486 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013487 VOS_ASSERT(0);
13488 return ;
13489 }
13490
13491 switch(wdiLowLevelInd->wdiIndicationType)
13492 {
13493 case WDI_RSSI_NOTIFICATION_IND:
13494 {
13495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13496 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013497#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
13498 rssiNotification.bReserved =
13499 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
13500 rssiNotification.bRssiThres1NegCross =
13501 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
13502 rssiNotification.bRssiThres1PosCross =
13503 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
13504 rssiNotification.bRssiThres2NegCross =
13505 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
13506 rssiNotification.bRssiThres2PosCross =
13507 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
13508 rssiNotification.bRssiThres3NegCross =
13509 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
13510 rssiNotification.bRssiThres3PosCross =
13511 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080013512 rssiNotification.avgRssi = (v_S7_t)
13513 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070013514 WLANTL_BMPSRSSIRegionChangedNotification(
13515 pWDA->pVosContext,
13516 &rssiNotification);
13517#endif
13518 break ;
13519 }
13520 case WDI_MISSED_BEACON_IND:
13521 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080013522 tpSirSmeMissedBeaconInd pMissBeacInd =
13523 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070013524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13525 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013526 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080013527 if(NULL == pMissBeacInd)
13528 {
13529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13530 "%s: VOS MEM Alloc Failure", __func__);
13531 break;
13532 }
13533 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
13534 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
13535 pMissBeacInd->bssIdx =
13536 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
13537 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013538 break ;
13539 }
13540 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
13541 {
13542 /* TODO: Decode Ind and send Ind to PE */
13543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13544 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
13545 break ;
13546 }
13547
13548 case WDI_MIC_FAILURE_IND:
13549 {
13550 tpSirSmeMicFailureInd pMicInd =
13551 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
13552
13553 if(NULL == pMicInd)
13554 {
13555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013556 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013557 break;
13558 }
13559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13560 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013561 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
13562 pMicInd->length = sizeof(tSirSmeMicFailureInd);
13563 vos_mem_copy(pMicInd->bssId,
13564 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
13565 sizeof(tSirMacAddr));
13566 vos_mem_copy(pMicInd->info.srcMacAddr,
13567 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
13568 sizeof(tSirMacAddr));
13569 vos_mem_copy(pMicInd->info.taMacAddr,
13570 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
13571 sizeof(tSirMacAddr));
13572 vos_mem_copy(pMicInd->info.dstMacAddr,
13573 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
13574 sizeof(tSirMacAddr));
13575 vos_mem_copy(pMicInd->info.rxMacAddr,
13576 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
13577 sizeof(tSirMacAddr));
13578 pMicInd->info.multicast =
13579 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
13580 pMicInd->info.keyId=
13581 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
13582 pMicInd->info.IV1=
13583 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
13584 vos_mem_copy(pMicInd->info.TSC,
13585 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070013586 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
13587 (void *)pMicInd , 0) ;
13588 break ;
13589 }
13590 case WDI_FATAL_ERROR_IND:
13591 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070013592 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070013593 /* TODO: Decode Ind and send Ind to PE */
13594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13595 "Received WDI_FATAL_ERROR_IND from WDI ");
13596 break ;
13597 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013598 case WDI_DEL_STA_IND:
13599 {
Jeff Johnson295189b2012-06-20 16:38:30 -070013600 tpDeleteStaContext pDelSTACtx =
13601 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
13602
13603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13604 "Received WDI_DEL_STA_IND from WDI ");
13605 if(NULL == pDelSTACtx)
13606 {
13607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013608 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013609 break;
13610 }
13611 vos_mem_copy(pDelSTACtx->addr2,
13612 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
13613 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013614 vos_mem_copy(pDelSTACtx->bssId,
13615 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
13616 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013617 pDelSTACtx->assocId =
13618 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
13619 pDelSTACtx->reasonCode =
13620 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
13621 pDelSTACtx->staId =
13622 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070013623 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
13624 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013625 break ;
13626 }
13627 case WDI_COEX_IND:
13628 {
13629 tANI_U32 index;
13630 vos_msg_t vosMsg;
c_hpothub3458992014-09-19 19:58:57 +053013631 tSirSmeCoexInd *pSmeCoexInd;
13632
13633 if (SIR_COEX_IND_TYPE_CXM_FEATURES_NOTIFICATION ==
13634 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType)
13635 {
13636 if(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData)
13637 {
13638 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13639 FL("Coex state: 0x%x coex feature: 0x%x"),
13640 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[0],
13641 wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[1]);
13642
13643 if (wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2] << 16)
13644 {
13645 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, FL("power limit: 0x%x"),
13646 (tANI_U16)(wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[2]));
13647 }
13648 }
13649 break;
13650 }
13651
13652 pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070013653 if(NULL == pSmeCoexInd)
13654 {
13655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013656 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013657 break;
13658 }
13659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13660 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013661 /* Message Header */
13662 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
13663 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070013664 /* Info from WDI Indication */
13665 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
13666 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
13667 {
13668 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
13669 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013670 /* VOS message wrapper */
13671 vosMsg.type = eWNI_SME_COEX_IND;
13672 vosMsg.bodyptr = (void *)pSmeCoexInd;
13673 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013674 /* Send message to SME */
13675 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13676 {
13677 /* free the mem and return */
13678 vos_mem_free((v_VOID_t *)pSmeCoexInd);
13679 }
13680 else
13681 {
13682 /* DEBUG */
13683 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13684 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
13685 pSmeCoexInd->coexIndType,
13686 pSmeCoexInd->coexIndData[0],
13687 pSmeCoexInd->coexIndData[1],
13688 pSmeCoexInd->coexIndData[2],
13689 pSmeCoexInd->coexIndData[3]);
13690 }
13691 break;
13692 }
13693 case WDI_TX_COMPLETE_IND:
13694 {
13695 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
13696 /* Calling TxCompleteAck Indication from wda context*/
13697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13698 "Complete Indication received from HAL");
13699 if( pWDA->pAckTxCbFunc )
13700 {
13701 if( VOS_STATUS_SUCCESS !=
13702 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
13703 {
13704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13705 "Tx Complete timeout Timer Stop Failed ");
13706 }
13707 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
13708 pWDA->pAckTxCbFunc = NULL;
13709 }
13710 else
13711 {
13712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13713 "Tx Complete Indication is received after timeout ");
13714 }
13715 break;
13716 }
Viral Modid86bde22012-12-10 13:09:21 -080013717 case WDI_P2P_NOA_START_IND :
13718 {
13719 tSirP2PNoaStart *pP2pNoaStart =
13720 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
13721
13722 if (NULL == pP2pNoaStart)
13723 {
13724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13725 "Memory allocation failure, "
13726 "WDI_P2P_NOA_START_IND not forwarded");
13727 break;
13728 }
13729 pP2pNoaStart->status =
13730 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
13731 pP2pNoaStart->bssIdx =
13732 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
13733 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
13734 (void *)pP2pNoaStart , 0) ;
13735 break;
13736 }
13737
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053013738#ifdef FEATURE_WLAN_TDLS
13739 case WDI_TDLS_IND :
13740 {
13741 tSirTdlsInd *pTdlsInd =
13742 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
13743
13744 if (NULL == pTdlsInd)
13745 {
13746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13747 "Memory allocation failure, "
13748 "WDI_TDLS_IND not forwarded");
13749 break;
13750 }
13751 pTdlsInd->status =
13752 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
13753 pTdlsInd->assocId =
13754 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
13755 pTdlsInd->staIdx =
13756 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
13757 pTdlsInd->reasonCode =
13758 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
13759 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
13760 (void *)pTdlsInd , 0) ;
13761 break;
13762 }
13763#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013764 case WDI_P2P_NOA_ATTR_IND :
13765 {
13766 tSirP2PNoaAttr *pP2pNoaAttr =
13767 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13769 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070013770 if (NULL == pP2pNoaAttr)
13771 {
13772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13773 "Memory allocation failure, "
13774 "WDI_P2P_NOA_ATTR_IND not forwarded");
13775 break;
13776 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013777 pP2pNoaAttr->index =
13778 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
13779 pP2pNoaAttr->oppPsFlag =
13780 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
13781 pP2pNoaAttr->ctWin =
13782 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
13783
13784 pP2pNoaAttr->uNoa1IntervalCnt =
13785 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
13786 pP2pNoaAttr->uNoa1Duration =
13787 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
13788 pP2pNoaAttr->uNoa1Interval =
13789 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
13790 pP2pNoaAttr->uNoa1StartTime =
13791 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070013792 pP2pNoaAttr->uNoa2IntervalCnt =
13793 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
13794 pP2pNoaAttr->uNoa2Duration =
13795 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
13796 pP2pNoaAttr->uNoa2Interval =
13797 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
13798 pP2pNoaAttr->uNoa2StartTime =
13799 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070013800 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
13801 (void *)pP2pNoaAttr , 0) ;
13802 break;
13803 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013804#ifdef FEATURE_WLAN_SCAN_PNO
13805 case WDI_PREF_NETWORK_FOUND_IND:
13806 {
13807 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070013808 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
13809 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
13810 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
13811 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
13812
Jeff Johnson295189b2012-06-20 16:38:30 -070013813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13814 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070013815 if (NULL == pPrefNetworkFoundInd)
13816 {
13817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13818 "Memory allocation failure, "
13819 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053013820 if (NULL !=
13821 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
13822 {
13823 wpalMemoryFree(
13824 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
13825 );
13826 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
13827 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013828 break;
13829 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013830 /* Message Header */
13831 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070013832 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070013833
13834 /* Info from WDI Indication */
13835 pPrefNetworkFoundInd->ssId.length =
13836 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070013837 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070013838 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
13839 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
13840 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070013841 if (NULL !=
13842 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
13843 {
13844 pPrefNetworkFoundInd->frameLength =
13845 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
13846 vos_mem_copy( pPrefNetworkFoundInd->data,
13847 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
13848 pPrefNetworkFoundInd->frameLength);
13849 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
13850 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
13851 }
13852 else
13853 {
13854 pPrefNetworkFoundInd->frameLength = 0;
13855 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013856 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070013857 /* VOS message wrapper */
13858 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
13859 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
13860 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013861 /* Send message to SME */
13862 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13863 {
13864 /* free the mem and return */
13865 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
13866 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013867 break;
13868 }
13869#endif // FEATURE_WLAN_SCAN_PNO
13870
13871#ifdef WLAN_WAKEUP_EVENTS
13872 case WDI_WAKE_REASON_IND:
13873 {
13874 vos_msg_t vosMsg;
13875 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
13876 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
13877 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
13878
13879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Sushant Kaushik1b645382014-10-13 16:39:36 +053013880 "[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 -070013881 wdiLowLevelInd->wdiIndicationType,
13882 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
13883 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
13884 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
13885
13886 if (NULL == pWakeReasonInd)
13887 {
13888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13889 "Memory allocation failure, "
13890 "WDI_WAKE_REASON_IND not forwarded");
13891 break;
13892 }
13893
13894 vos_mem_zero(pWakeReasonInd, allocSize);
13895
13896 /* Message Header */
13897 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
13898 pWakeReasonInd->mesgLen = allocSize;
13899
13900 /* Info from WDI Indication */
13901 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
13902 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
13903 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
13904 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
13905 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
13906 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
13907 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
13908 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
13909
13910 /* VOS message wrapper */
13911 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
13912 vosMsg.bodyptr = (void *) pWakeReasonInd;
13913 vosMsg.bodyval = 0;
13914
13915 /* Send message to SME */
13916 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13917 {
13918 /* free the mem and return */
13919 vos_mem_free((v_VOID_t *) pWakeReasonInd);
13920 }
13921
13922 break;
13923 }
13924#endif // WLAN_WAKEUP_EVENTS
13925
13926 case WDI_TX_PER_HIT_IND:
13927 {
13928 vos_msg_t vosMsg;
13929 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
13930 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
13931 /* VOS message wrapper */
13932 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
13933 vosMsg.bodyptr = NULL;
13934 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013935 /* Send message to SME */
13936 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13937 {
13938 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
13939 }
13940 break;
13941 }
13942
Leo Chang9056f462013-08-01 19:21:11 -070013943#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070013944 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070013945 {
Leo Changd9df8aa2013-09-26 13:32:26 -070013946 vos_msg_t vosMsg;
13947 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070013948
Leo Changd9df8aa2013-09-26 13:32:26 -070013949 lphbInd =
13950 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
13951 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070013952 {
13953 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13954 "%s: LPHB IND buffer alloc Fail", __func__);
13955 return ;
13956 }
13957
Leo Changd9df8aa2013-09-26 13:32:26 -070013958 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070013959 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070013960 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070013961 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070013962 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070013963 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
13964
13965 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070013966 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070013967 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
13968
Leo Changd9df8aa2013-09-26 13:32:26 -070013969 vosMsg.type = eWNI_SME_LPHB_IND;
13970 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070013971 vosMsg.bodyval = 0;
13972 /* Send message to SME */
13973 if (VOS_STATUS_SUCCESS !=
13974 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13975 {
13976 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13977 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070013978 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070013979 }
13980 break;
13981 }
13982#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070013983 case WDI_PERIODIC_TX_PTRN_FW_IND:
13984 {
13985 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13986 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
13987 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
13988 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
13989 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
13990 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
13991 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
13992
13993 break;
13994 }
Leo Chang9056f462013-08-01 19:21:11 -070013995
Ravi Joshid2ca7c42013-07-23 08:37:49 -070013996 case WDI_IBSS_PEER_INACTIVITY_IND:
13997 {
13998 tSirIbssPeerInactivityInd *pIbssInd =
13999 (tSirIbssPeerInactivityInd *)
14000 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
14001
14002 if (NULL == pIbssInd)
14003 {
14004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14005 "Memory allocation failure, "
14006 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
14007 break;
14008 }
14009
14010 pIbssInd->bssIdx =
14011 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
14012 pIbssInd->staIdx =
14013 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
14014 vos_mem_copy(pIbssInd->peerAddr,
14015 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
14016 sizeof(tSirMacAddr));
14017 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
14018 break;
14019 }
14020
Rajeev79dbe4c2013-10-05 11:03:42 +053014021#ifdef FEATURE_WLAN_BATCH_SCAN
14022 case WDI_BATCH_SCAN_RESULT_IND:
14023 {
14024 void *pBatchScanResult;
14025 void *pCallbackContext;
14026 tpAniSirGlobal pMac;
14027
14028 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
14029 "Received WDI_BATCHSCAN_RESULT_IND from FW");
14030
14031 /*sanity check*/
Sunil Duttbd736ed2014-05-26 21:19:41 +053014032 if (NULL == pWDA)
Rajeev79dbe4c2013-10-05 11:03:42 +053014033 {
14034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14035 "%s:pWDA is NULL", __func__);
14036 VOS_ASSERT(0);
14037 return;
14038 }
14039
14040 pBatchScanResult =
14041 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
14042 if (NULL == pBatchScanResult)
14043 {
14044 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14045 "%s:Batch scan result from FW is null can't invoke HDD callback",
14046 __func__);
14047 VOS_ASSERT(0);
14048 return;
14049 }
14050
14051 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14052 if (NULL == pMac)
14053 {
14054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14055 "%s:pMac is NULL", __func__);
14056 VOS_ASSERT(0);
14057 return;
14058 }
14059
14060 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
14061 /*call hdd callback with set batch scan response data*/
14062 if(pMac->pmc.batchScanResultCallback)
14063 {
14064 pMac->pmc.batchScanResultCallback(pCallbackContext,
14065 pBatchScanResult);
14066 }
14067 else
14068 {
14069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14070 "%s:HDD callback is null", __func__);
14071 VOS_ASSERT(0);
14072 }
14073 break;
14074 }
14075#endif
14076
Leo Chang0b0e45a2013-12-15 15:18:55 -080014077#ifdef FEATURE_WLAN_CH_AVOID
14078 case WDI_CH_AVOID_IND:
14079 {
14080 vos_msg_t vosMsg;
14081 tSirChAvoidIndType *chAvoidInd;
14082
14083 chAvoidInd =
14084 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
14085 if (NULL == chAvoidInd)
14086 {
14087 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14088 "%s: CH_AVOID IND buffer alloc Fail", __func__);
14089 return ;
14090 }
14091
14092 chAvoidInd->avoidRangeCount =
14093 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
14094 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
14095 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
14096 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
14097
14098 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14099 "%s : WDA CH avoid notification", __func__);
14100
14101 vosMsg.type = eWNI_SME_CH_AVOID_IND;
14102 vosMsg.bodyptr = chAvoidInd;
14103 vosMsg.bodyval = 0;
14104 /* Send message to SME */
14105 if (VOS_STATUS_SUCCESS !=
14106 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14107 {
14108 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14109 "post eWNI_SME_CH_AVOID_IND to SME Failed");
14110 vos_mem_free(chAvoidInd);
14111 }
14112 break;
14113 }
14114#endif /* FEATURE_WLAN_CH_AVOID */
14115
Sunil Duttbd736ed2014-05-26 21:19:41 +053014116#ifdef WLAN_FEATURE_LINK_LAYER_STATS
14117 case WDI_LL_STATS_RESULTS_IND:
14118 {
14119 void *pLinkLayerStatsInd;
Sunil Duttbd736ed2014-05-26 21:19:41 +053014120 tpAniSirGlobal pMac;
14121
14122 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14123 "Received WDI_LL_STATS_RESULTS_IND from FW");
14124
14125 /*sanity check*/
14126 if (NULL == pWDA)
14127 {
14128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14129 "%s:pWDA is NULL", __func__);
14130 VOS_ASSERT(0);
14131 return;
14132 }
14133
14134 pLinkLayerStatsInd =
Dino Mycled3d50022014-07-07 12:58:25 +053014135 (void *)wdiLowLevelInd->
14136 wdiIndicationData.wdiLinkLayerStatsResults.pLinkLayerStatsResults;
Sunil Duttbd736ed2014-05-26 21:19:41 +053014137 if (NULL == pLinkLayerStatsInd)
14138 {
14139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14140 "%s:Link Layer Statistics from FW is null can't invoke HDD callback",
14141 __func__);
14142 VOS_ASSERT(0);
14143 return;
14144 }
14145
14146 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14147 if (NULL == pMac)
14148 {
14149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14150 "%s:pMac is NULL", __func__);
14151 VOS_ASSERT(0);
14152 return;
14153 }
14154
Dino Mycled3d50022014-07-07 12:58:25 +053014155 /* call hdd callback with Link Layer Statistics.
14156 * vdev_id/ifacId in link_stats_results will be
14157 * used to retrieve the correct HDD context
14158 */
Sunil Duttbd736ed2014-05-26 21:19:41 +053014159 if (pMac->sme.pLinkLayerStatsIndCallback)
14160 {
Dino Mycled3d50022014-07-07 12:58:25 +053014161 pMac->sme.pLinkLayerStatsIndCallback(pMac->pAdapter,
Sunil Duttbd736ed2014-05-26 21:19:41 +053014162 WDA_LINK_LAYER_STATS_RESULTS_RSP,
Dino Mycled3d50022014-07-07 12:58:25 +053014163 pLinkLayerStatsInd,
14164 wdiLowLevelInd->
14165 wdiIndicationData.wdiLinkLayerStatsResults.macAddr);
Sunil Duttbd736ed2014-05-26 21:19:41 +053014166 }
14167 else
14168 {
14169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14170 "%s:HDD callback is null", __func__);
14171 }
14172 break;
14173 }
14174#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
14175
Dino Mycle41bdc942014-06-10 11:30:24 +053014176#ifdef WLAN_FEATURE_EXTSCAN
14177 case WDI_EXTSCAN_PROGRESS_IND:
14178 case WDI_EXTSCAN_SCAN_AVAILABLE_IND:
14179 case WDI_EXTSCAN_SCAN_RESULT_IND:
14180 case WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND:
14181 case WDI_EXTSCAN_SIGN_RSSI_RESULT_IND:
14182 {
14183 void *pEXTScanData;
14184 void *pCallbackContext;
14185 tpAniSirGlobal pMac;
14186 tANI_U16 indType;
14187
14188 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14189 "Received WDI_EXTSCAN Indications from FW");
14190 /*sanity check*/
14191 if (NULL == pWDA)
14192 {
14193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14194 "%s:pWDA is NULL", __func__);
14195 VOS_ASSERT(0);
14196 return;
14197 }
14198 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_PROGRESS_IND)
14199 {
14200 indType = WDA_EXTSCAN_PROGRESS_IND;
14201
14202 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14203 "WDI_EXTSCAN Indication is WDI_EXTSCAN_PROGRESS_IND");
14204 }
14205 if (wdiLowLevelInd->wdiIndicationType ==
14206 WDI_EXTSCAN_SCAN_AVAILABLE_IND)
14207 {
14208 indType = WDA_EXTSCAN_SCAN_AVAILABLE_IND;
14209
14210 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14211 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_AVAILABLE_IND");
14212 }
14213 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_SCAN_RESULT_IND)
14214 {
14215 indType = WDA_EXTSCAN_SCAN_RESULT_IND;
14216
14217 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14218 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_RESULT_IND");
14219 }
14220 if (wdiLowLevelInd->wdiIndicationType ==
14221 WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND)
14222 {
14223 indType = WDA_EXTSCAN_BSSID_HOTLIST_RESULT_IND;
14224
14225 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14226 "WDI_EXTSCAN Indication is WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND");
14227 }
14228 if (wdiLowLevelInd->wdiIndicationType ==
14229 WDI_EXTSCAN_SIGN_RSSI_RESULT_IND)
14230 {
14231 indType = WDA_EXTSCAN_SIGNF_RSSI_RESULT_IND;
14232
14233 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14234 "WDI_EXTSCAN Indication is WDA_EXTSCAN_SIGNF_RSSI_RESULT_IND");
14235 }
14236
14237 pEXTScanData =
14238 (void *)wdiLowLevelInd->wdiIndicationData.pEXTScanIndData;
14239 if (NULL == pEXTScanData)
14240 {
14241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14242 "%s: EXTSCAN Indication Data is null, can't invoke HDD callback",
14243 __func__);
14244 VOS_ASSERT(0);
14245 return;
14246 }
14247
14248 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14249 if (NULL == pMac)
14250 {
14251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14252 "%s:pMac is NULL", __func__);
14253 VOS_ASSERT(0);
14254 return;
14255 }
14256
14257 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
14258
14259 if(pMac->sme.pEXTScanIndCb)
14260 {
14261 pMac->sme.pEXTScanIndCb(pCallbackContext,
14262 indType,
14263 pEXTScanData);
14264 }
14265 else
14266 {
14267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14268 "%s:HDD callback is null", __func__);
14269 }
14270 break;
14271 }
14272#endif /* WLAN_FEATURE_EXTSCAN */
Abhishek Singh66c16762014-08-14 19:13:19 +053014273 case WDI_DEL_BA_IND:
14274 {
14275 tpBADeleteParams pDelBAInd =
14276 (tpBADeleteParams)vos_mem_malloc(sizeof(tpBADeleteParams));
14277
14278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14279 "Received WDI_DEL_BA_IND from WDI ");
14280 if(NULL == pDelBAInd)
14281 {
14282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14283 "%s: VOS MEM Alloc Failure", __func__);
14284 break;
14285 }
14286 vos_mem_copy(pDelBAInd->peerMacAddr,
14287 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.peerMacAddr,
14288 sizeof(tSirMacAddr));
14289 vos_mem_copy(pDelBAInd->bssId,
14290 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.bssId,
14291 sizeof(tSirMacAddr));
14292 pDelBAInd->staIdx =
14293 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.staIdx;
14294 pDelBAInd->baTID =
14295 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baTID;
14296 pDelBAInd->baDirection =
14297 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baDirection;
14298 pDelBAInd->reasonCode =
14299 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.reasonCode;
14300
14301 WDA_SendMsg(pWDA, SIR_LIM_DEL_BA_IND,
14302 (void *)pDelBAInd , 0) ;
14303 break;
14304 }
Dino Mycle41bdc942014-06-10 11:30:24 +053014305
Jeff Johnson295189b2012-06-20 16:38:30 -070014306 default:
14307 {
14308 /* TODO error */
14309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14310 "Received UNKNOWN Indication from WDI ");
14311 }
14312 }
14313 return ;
14314}
14315
Jeff Johnson295189b2012-06-20 16:38:30 -070014316/*
14317 * BA related processing in WDA.
14318 */
Jeff Johnson295189b2012-06-20 16:38:30 -070014319void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
14320 void* pUserData)
14321{
14322 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14323 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070014324 if(NULL == pWdaParams)
14325 {
14326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014327 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014328 VOS_ASSERT(0) ;
14329 return ;
14330 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014331 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070014332 vos_mem_free(pWdaParams->wdaMsgParam) ;
14333 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14334 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014336 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014337 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
14338 {
14339 tANI_U8 i = 0 ;
14340 tBaActivityInd *baActivityInd = NULL ;
14341 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
14342 tANI_U8 allocSize = sizeof(tBaActivityInd)
14343 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
14344 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
14345 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014346 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014347 if(NULL == baActivityInd)
14348 {
14349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014350 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014351 VOS_ASSERT(0) ;
14352 return;
14353 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014354 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
14355 sizeof(tSirMacAddr)) ;
14356 baActivityInd->baCandidateCnt = baCandidateCount ;
14357
14358 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
14359 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
14360
14361 for(i = 0 ; i < baCandidateCount ; i++)
14362 {
14363 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014364 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
14365 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014366 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
14367 {
14368 baCandidate->baInfo[tid].fBaEnable =
14369 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
14370 baCandidate->baInfo[tid].startingSeqNum =
14371 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
14372 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070014373 wdiBaCandidate++ ;
14374 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014375 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014376 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
14377 }
14378 else
14379 {
14380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14381 "BA Trigger RSP with Failure received ");
14382 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014383 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014384}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014385
14386
14387/*
14388 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
14389 * during MCC
14390 */
14391void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
14392{
14393 wpt_uint32 enabled;
14394 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
14395 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
14396 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
14397
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014398 if (NULL == pMac )
14399 {
14400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14401 "%s: Invoked with invalid MAC context ", __func__ );
14402 VOS_ASSERT(0);
14403 return;
14404 }
14405
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014406 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
14407 != eSIR_SUCCESS)
14408 {
14409 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14410 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
14411 return;
14412 }
14413
14414 if(!enabled)
14415 {
14416 return;
14417 }
14418
14419 if(NULL == pWDA)
14420 {
14421 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14422 "%s:WDA context is NULL", __func__);
14423 VOS_ASSERT(0);
14424 return;
14425 }
14426
14427 if(activate)
14428 {
14429 if( VOS_STATUS_SUCCESS !=
14430 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
14431 {
14432 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14433 "Traffic Stats Timer Start Failed ");
14434 return;
14435 }
14436 WDI_DS_ActivateTrafficStats();
14437 }
14438 else
14439 {
14440 WDI_DS_DeactivateTrafficStats();
14441 WDI_DS_ClearTrafficStats();
14442
14443 if( VOS_STATUS_SUCCESS !=
14444 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
14445 {
14446 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14447 "Traffic Stats Timer Stop Failed ");
14448 return;
14449 }
14450 }
14451}
14452
14453/*
14454 * Traffic Stats Timer handler
14455 */
14456void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
14457{
14458 WDI_Status wdiStatus;
14459 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
14460 WDI_TrafficStatsIndType trafficStatsIndParams;
14461 wpt_uint32 length, enabled;
14462 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14463
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014464 if (NULL == pMac )
14465 {
14466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14467 "%s: Invoked with invalid MAC context ", __func__ );
14468 VOS_ASSERT(0);
14469 return;
14470 }
14471
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014472 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
14473 != eSIR_SUCCESS)
14474 {
14475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14476 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
14477 return;
14478 }
14479
14480 if(!enabled)
14481 {
14482 WDI_DS_DeactivateTrafficStats();
14483 return;
14484 }
14485
14486 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
14487
14488 if(pWdiTrafficStats != NULL)
14489 {
14490 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
14491 trafficStatsIndParams.length = length;
14492 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080014493 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014494 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
14495 trafficStatsIndParams.pUserData = pWDA;
14496
14497 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
14498
14499 if(WDI_STATUS_PENDING == wdiStatus)
14500 {
14501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14502 "Pending received for %s:%d ",__func__,__LINE__ );
14503 }
14504 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
14505 {
14506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14507 "Failure in %s:%d ",__func__,__LINE__ );
14508 }
14509
14510 WDI_DS_ClearTrafficStats();
14511 }
14512 else
14513 {
14514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
14515 "pWdiTrafficStats is Null");
14516 }
14517
14518 if( VOS_STATUS_SUCCESS !=
14519 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
14520 {
14521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
14522 "Traffic Stats Timer Start Failed ");
14523 return;
14524 }
14525}
14526
Jeff Johnson295189b2012-06-20 16:38:30 -070014527/*
14528 * BA Activity check timer handler
14529 */
14530void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
14531{
14532 tANI_U8 curSta = 0 ;
14533 tANI_U8 tid = 0 ;
14534 tANI_U8 size = 0 ;
14535 tANI_U8 baCandidateCount = 0 ;
14536 tANI_U8 newBaCandidate = 0 ;
Abhishek Singh0644e482014-10-06 18:38:23 +053014537 tANI_U32 val;
Jeff Johnson295189b2012-06-20 16:38:30 -070014538 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
Abhishek Singh0644e482014-10-06 18:38:23 +053014539 tpAniSirGlobal pMac;
14540
Jeff Johnson295189b2012-06-20 16:38:30 -070014541 if(NULL == pWDA)
14542 {
14543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014544 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014545 VOS_ASSERT(0);
14546 return ;
14547 }
14548 if(WDA_MAX_STA < pWDA->wdaMaxSta)
14549 {
14550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14551 "Inconsistent STA entries in WDA");
14552 VOS_ASSERT(0) ;
Abhishek Singh0644e482014-10-06 18:38:23 +053014553 }
14554 if(NULL == pWDA->pVosContext)
14555 {
14556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14557 "%s: pVosContext is NULL",__func__);
14558 VOS_ASSERT(0);
14559 return ;
14560 }
14561 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Abhishek Singh68883952014-10-14 11:59:05 +053014562 if(NULL == pMac)
14563 {
14564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14565 "%s: pMac is NULL",__func__);
14566 VOS_ASSERT(0);
14567 return ;
14568 }
14569
Abhishek Singh0644e482014-10-06 18:38:23 +053014570 if (wlan_cfgGetInt(pMac,
14571 WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC, &val) !=
14572 eSIR_SUCCESS)
14573 {
14574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14575 "Unable to get WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC");
14576 val = 0;
14577 }
14578
Jeff Johnson295189b2012-06-20 16:38:30 -070014579 /* walk through all STA entries and find out TX packet count */
14580 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
14581 {
Abhishek Singh0644e482014-10-06 18:38:23 +053014582 tANI_U32 currentOperChan = pWDA->wdaStaInfo[curSta].currentOperChan;
Gopichand Nakkala976e3252013-01-03 15:45:56 -080014583#ifdef WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053014584 // We can only do BA on "hard" STAs.
14585 if (!(IS_HWSTA_IDX(curSta)))
14586 {
14587 continue;
14588 }
Gopichand Nakkala976e3252013-01-03 15:45:56 -080014589#endif //WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053014590 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
14591 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070014592 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014593 tANI_U32 txPktCount = 0 ;
14594 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014595 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070014596 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
14597 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070014598 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
14599 curSta, tid, &txPktCount)))
14600 {
14601#if 0
14602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
14603 "************* %d:%d, %d ",curSta, txPktCount,
14604 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
14605#endif
Abhishek Singh0644e482014-10-06 18:38:23 +053014606 if(val && ( (currentOperChan >= SIR_11B_CHANNEL_BEGIN) &&
14607 (currentOperChan <= SIR_11B_CHANNEL_END)))
14608 {
14609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14610 "%s: BTC disabled aggregation - dont start "
14611 "TX ADDBA req",__func__);
14612 }
14613 else if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070014614 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Abhishek Singh424ae432014-12-05 11:54:54 +053014615 && (((eSYSTEM_STA_IN_IBSS_ROLE ==
14616 pWDA->wdaGlobalSystemRole) && txPktCount )
14617 || (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
14618 curSta, tid))))
Jeff Johnson295189b2012-06-20 16:38:30 -070014619 {
14620 /* get prepare for sending message to HAL */
14621 //baCandidate[baCandidateCount].staIdx = curSta ;
14622 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
14623 newBaCandidate = WDA_ENABLE_BA ;
14624 }
14625 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
14626 }
14627 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014628 /* fill the entry for all the sta with given TID's */
14629 if(WDA_ENABLE_BA == newBaCandidate)
14630 {
14631 /* move to next BA candidate */
14632 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
14633 size += sizeof(WDI_TriggerBAReqCandidateType) ;
14634 baCandidateCount++ ;
14635 newBaCandidate = WDA_DISABLE_BA ;
14636 }
14637 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014638 /* prepare and send message to hal */
14639 if( 0 < baCandidateCount)
14640 {
14641 WDI_Status status = WDI_STATUS_SUCCESS ;
14642 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
14643 tWDA_ReqParams *pWdaParams =
14644 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014645 if(NULL == pWdaParams)
14646 {
14647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014648 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014649 VOS_ASSERT(0) ;
14650 return;
14651 }
14652 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
14653 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
14654 if(NULL == wdiTriggerBaReq)
14655 {
14656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014657 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014658 VOS_ASSERT(0) ;
14659 vos_mem_free(pWdaParams);
14660 return;
14661 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014662 do
14663 {
14664 WDI_TriggerBAReqinfoType *triggerBaInfo =
14665 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
14666 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
14667 /* TEMP_FIX: Need to see if WDI need check for assoc session for
14668 * for each request */
14669 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
14670 triggerBaInfo->ucBASessionID = 0;
14671 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
14672 } while(0) ;
14673 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
14674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014675 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014676 pWdaParams->pWdaContext = pWDA;
14677 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
14678 pWdaParams->wdaMsgParam = NULL;
14679 status = WDI_TriggerBAReq(wdiTriggerBaReq,
14680 WDA_TriggerBaReqCallback, pWdaParams) ;
14681 if(IS_WDI_STATUS_FAILURE(status))
14682 {
14683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14684 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
14685 vos_mem_free(pWdaParams->wdaMsgParam) ;
14686 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14687 vos_mem_free(pWdaParams) ;
14688 }
14689 }
14690 else
14691 {
14692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
14693 "There is no TID for initiating BA");
14694 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014695 if( VOS_STATUS_SUCCESS !=
14696 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
14697 {
14698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14699 "BA Activity Timer Stop Failed ");
14700 return ;
14701 }
14702 if( VOS_STATUS_SUCCESS !=
14703 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
14704 {
14705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14706 "BA Activity Timer Start Failed ");
14707 return;
14708 }
14709 return ;
14710}
Jeff Johnson295189b2012-06-20 16:38:30 -070014711/*
14712 * WDA common routine to create timer used by WDA.
14713 */
14714static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
14715{
Jeff Johnson295189b2012-06-20 16:38:30 -070014716 VOS_STATUS status = VOS_STATUS_SUCCESS ;
14717 tANI_U32 val = 0 ;
14718 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14719
14720 if(NULL == pMac)
14721 {
14722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014723 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014724 VOS_ASSERT(0);
14725 return VOS_STATUS_E_FAILURE;
14726 }
14727 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
14728 != eSIR_SUCCESS)
14729 {
14730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14731 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
14732 return VOS_STATUS_E_FAILURE;
14733 }
14734 val = SYS_MS_TO_TICKS(val) ;
14735
14736 /* BA activity check timer */
14737 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
14738 "BA Activity Check timer", WDA_TimerHandler,
14739 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
14740 if(status != TX_SUCCESS)
14741 {
14742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14743 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014744 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014745 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014746 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014747 /* Tx Complete Timeout timer */
14748 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
14749 "Tx Complete Check timer", WDA_TimerHandler,
14750 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014751 if(status != TX_SUCCESS)
14752 {
14753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14754 "Unable to create Tx Complete Timeout timer");
14755 /* Destroy timer of BA activity check timer */
14756 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
14757 if(status != TX_SUCCESS)
14758 {
14759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14760 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014761 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014762 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014763 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014764 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014765
14766 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
14767
14768 /* Traffic Stats timer */
14769 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
14770 "Traffic Stats timer", WDA_TimerHandler,
14771 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
14772 if(status != TX_SUCCESS)
14773 {
14774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14775 "Unable to create traffic stats timer");
14776 /* Destroy timer of BA activity check timer */
14777 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
14778 if(status != TX_SUCCESS)
14779 {
14780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14781 "Unable to Destroy BA activity timer");
14782 }
14783 /* Destroy timer of tx complete timer */
14784 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
14785 if(status != TX_SUCCESS)
14786 {
14787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14788 "Unable to Tx complete timer");
14789 }
14790 return VOS_STATUS_E_FAILURE ;
14791 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014792 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014793}
Jeff Johnson295189b2012-06-20 16:38:30 -070014794/*
14795 * WDA common routine to destroy timer used by WDA.
14796 */
14797static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
14798{
14799 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014800 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
14801 if(status != TX_SUCCESS)
14802 {
14803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14804 "Unable to Destroy Tx Complete Timeout timer");
14805 return eSIR_FAILURE ;
14806 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014807 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
14808 if(status != TX_SUCCESS)
14809 {
14810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14811 "Unable to Destroy BA activity timer");
14812 return eSIR_FAILURE ;
14813 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014814 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
14815 if(status != TX_SUCCESS)
14816 {
14817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14818 "Unable to Destroy traffic stats timer");
14819 return eSIR_FAILURE ;
14820 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014821 return eSIR_SUCCESS ;
14822}
Jeff Johnson295189b2012-06-20 16:38:30 -070014823/*
14824 * WDA timer handler.
14825 */
14826void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
14827{
14828 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
14829 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014830 /*
14831 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
14832 */
14833 wdaMsg.type = timerInfo ;
14834 wdaMsg.bodyptr = NULL;
14835 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070014836 /* post the message.. */
14837 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
14838 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
14839 {
14840 vosStatus = VOS_STATUS_E_BADMSG;
14841 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014842}
Jeff Johnson295189b2012-06-20 16:38:30 -070014843/*
14844 * WDA Tx Complete timeout Indication.
14845 */
14846void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
14847{
14848 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014849 if( pWDA->pAckTxCbFunc )
14850 {
14851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014852 "TxComplete timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070014853 pWDA->pAckTxCbFunc( pMac, 0);
14854 pWDA->pAckTxCbFunc = NULL;
14855 }
14856 else
14857 {
14858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014859 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070014860 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014861}
Jeff Johnson295189b2012-06-20 16:38:30 -070014862/*
14863 * WDA Set REG Domain to VOS NV
14864 */
Abhishek Singha306a442013-11-07 18:39:01 +053014865eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
14866 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070014867{
Abhishek Singha306a442013-11-07 18:39:01 +053014868 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070014869 {
14870 return eHAL_STATUS_INVALID_PARAMETER;
14871 }
14872 return eHAL_STATUS_SUCCESS;
14873}
Jeff Johnson295189b2012-06-20 16:38:30 -070014874
Jeff Johnson295189b2012-06-20 16:38:30 -070014875#ifdef FEATURE_WLAN_SCAN_PNO
14876/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014877 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014878 *
14879 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014880void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014881{
14882 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014883 tSirPNOScanReq *pPNOScanReqParams;
14884
Jeff Johnson295189b2012-06-20 16:38:30 -070014885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014886 "<------ %s, wdiStatus: %d",__func__, status);
Yue Ma7f44bbe2013-04-12 11:47:39 -070014887 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070014888 {
14889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014890 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014891 VOS_ASSERT(0) ;
14892 return ;
14893 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014894
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014895 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
14896 if(pPNOScanReqParams->statusCallback)
14897 {
14898 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
14899 (status == WDI_STATUS_SUCCESS) ?
14900 VOS_STATUS_SUCCESS : VOS_STATUS_E_FAILURE);
14901 }
14902
Yue Ma7f44bbe2013-04-12 11:47:39 -070014903 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14904 vos_mem_free(pWdaParams->wdaMsgParam);
14905 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014906
14907 return ;
14908}
Jeff Johnson295189b2012-06-20 16:38:30 -070014909/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014910 * FUNCTION: WDA_PNOScanReqCallback
14911 * Free memory.
14912 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
14913 */
14914void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014915{
Yue Ma7f44bbe2013-04-12 11:47:39 -070014916 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014917 tSirPNOScanReq *pPNOScanReqParams;
Yue Ma7f44bbe2013-04-12 11:47:39 -070014918
14919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14920 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14921
14922 if(NULL == pWdaParams)
14923 {
14924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14925 "%s: pWdaParams received NULL", __func__);
14926 VOS_ASSERT(0);
14927 return;
14928 }
14929
14930 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14931 {
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014932 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
14933 if(pPNOScanReqParams->statusCallback)
14934 {
14935 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
14936 VOS_STATUS_E_FAILURE);
14937 }
14938
Yue Ma7f44bbe2013-04-12 11:47:39 -070014939 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14940 vos_mem_free(pWdaParams->wdaMsgParam);
14941 vos_mem_free(pWdaParams);
14942 }
14943
14944 return;
14945}
14946/*
14947 * FUNCTION: WDA_UpdateScanParamsRespCallback
14948 *
14949 */
14950void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
14951{
14952 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014954 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070014955 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070014956 {
14957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014958 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014959 VOS_ASSERT(0) ;
14960 return ;
14961 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014962
14963 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14964 vos_mem_free(pWdaParams->wdaMsgParam);
14965 vos_mem_free(pWdaParams);
14966
Jeff Johnson295189b2012-06-20 16:38:30 -070014967 return ;
14968}
Jeff Johnson295189b2012-06-20 16:38:30 -070014969/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014970 * FUNCTION: WDA_UpdateScanParamsReqCallback
14971 * Free memory.
14972 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
14973 */
14974void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
14975{
14976 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14977
14978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14979 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14980
14981 if(NULL == pWdaParams)
14982 {
14983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14984 "%s: pWdaParams received NULL", __func__);
14985 VOS_ASSERT(0);
14986 return;
14987 }
14988
14989 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14990 {
14991 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14992 vos_mem_free(pWdaParams->wdaMsgParam);
14993 vos_mem_free(pWdaParams);
14994 }
14995
14996 return;
14997}
14998/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014999 * FUNCTION: WDA_ProcessSetPreferredNetworkList
15000 * Request to WDI to set Preferred Network List.Offload
15001 */
15002VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
15003 tSirPNOScanReq *pPNOScanReqParams)
15004{
Jeff Johnson43971f52012-07-17 12:26:56 -070015005 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015006 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
15007 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
15008 tWDA_ReqParams *pWdaParams ;
15009 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070015010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015011 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015012 if(NULL == pwdiPNOScanReqInfo)
15013 {
15014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015015 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015016 VOS_ASSERT(0);
15017 return VOS_STATUS_E_NOMEM;
15018 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015019 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15020 if(NULL == pWdaParams)
15021 {
15022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015023 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015024 VOS_ASSERT(0);
15025 vos_mem_free(pwdiPNOScanReqInfo);
15026 return VOS_STATUS_E_NOMEM;
15027 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015028 //
15029 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
15030 //
15031 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
15032 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070015033 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
15034 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
15035 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015036 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
15037 {
15038 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
15039 &pPNOScanReqParams->aNetworks[i],
15040 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
15041 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015042 /*Scan timer intervals*/
15043 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
15044 &pPNOScanReqParams->scanTimers,
15045 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070015046 /*Probe template for 2.4GHz band*/
15047 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
15048 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15049 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015050 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
15051 pPNOScanReqParams->p24GProbeTemplate,
15052 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070015053 /*Probe template for 5GHz band*/
15054 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
15055 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15056 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015057 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
15058 pPNOScanReqParams->p5GProbeTemplate,
15059 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015060 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
15061 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015062
Jeff Johnson295189b2012-06-20 16:38:30 -070015063 /* Store Params pass it to WDI */
15064 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
15065 pWdaParams->pWdaContext = pWDA;
15066 /* Store param pointer as passed in by caller */
15067 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015068 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015069 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015070 if(IS_WDI_STATUS_FAILURE(status))
15071 {
15072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15073 "Failure in Set PNO REQ WDI API, free all the memory " );
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053015074 if(pPNOScanReqParams->statusCallback)
15075 {
15076 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
15077 VOS_STATUS_E_FAILURE);
15078 }
15079
Jeff Johnson295189b2012-06-20 16:38:30 -070015080 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15081 vos_mem_free(pWdaParams->wdaMsgParam);
15082 pWdaParams->wdaWdiApiMsgParam = NULL;
15083 pWdaParams->wdaMsgParam = NULL;
15084 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015085 return CONVERT_WDI2VOS_STATUS(status) ;
15086}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015087
15088#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
15089
15090void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
15091{
15092 /*Convert the CSR Auth types to WDI Auth types */
15093 switch (csrAuthType)
15094 {
15095 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
15096 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
15097 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015098#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015099 case eCSR_AUTH_TYPE_CCKM_WPA:
15100 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
15101 break;
15102#endif
15103 case eCSR_AUTH_TYPE_WPA:
15104 *AuthType = eWDA_AUTH_TYPE_WPA;
15105 break;
15106 case eCSR_AUTH_TYPE_WPA_PSK:
15107 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
15108 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015109#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015110 case eCSR_AUTH_TYPE_CCKM_RSN:
15111 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
15112 break;
15113#endif
15114 case eCSR_AUTH_TYPE_RSN:
15115 *AuthType = eWDA_AUTH_TYPE_RSN;
15116 break;
15117 case eCSR_AUTH_TYPE_RSN_PSK:
15118 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
15119 break;
15120#if defined WLAN_FEATURE_VOWIFI_11R
15121 case eCSR_AUTH_TYPE_FT_RSN:
15122 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
15123 break;
15124 case eCSR_AUTH_TYPE_FT_RSN_PSK:
15125 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
15126 break;
15127#endif
15128#ifdef FEATURE_WLAN_WAPI
15129 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
15130 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
15131 break;
15132 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
15133 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
15134 break;
15135#endif /* FEATURE_WLAN_WAPI */
15136 case eCSR_AUTH_TYPE_SHARED_KEY:
15137 case eCSR_AUTH_TYPE_AUTOSWITCH:
15138 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
15139 break;
15140#if 0
15141 case eCSR_AUTH_TYPE_SHARED_KEY:
15142 *AuthType = eWDA_AUTH_TYPE_SHARED_KEY;
15143 break;
15144 case eCSR_AUTH_TYPE_AUTOSWITCH:
15145 *AuthType = eWDA_AUTH_TYPE_AUTOSWITCH;
15146#endif
15147 default:
Deepthi Gowribfd17132014-11-14 17:59:04 +053015148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015149 "%s: Unknown Auth Type", __func__);
15150 break;
15151 }
15152}
15153void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
15154{
15155 switch (csrEncrType)
15156 {
15157 case eCSR_ENCRYPT_TYPE_NONE:
15158 *EncrType = WDI_ED_NONE;
15159 break;
15160 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
15161 case eCSR_ENCRYPT_TYPE_WEP40:
15162 *EncrType = WDI_ED_WEP40;
15163 break;
15164 case eCSR_ENCRYPT_TYPE_WEP104:
15165 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
15166 *EncrType = WDI_ED_WEP104;
15167 break;
15168 case eCSR_ENCRYPT_TYPE_TKIP:
15169 *EncrType = WDI_ED_TKIP;
15170 break;
15171 case eCSR_ENCRYPT_TYPE_AES:
15172 *EncrType = WDI_ED_CCMP;
15173 break;
15174#ifdef WLAN_FEATURE_11W
15175 case eCSR_ENCRYPT_TYPE_AES_CMAC:
15176 *EncrType = WDI_ED_AES_128_CMAC;
15177 break;
15178#endif
15179#ifdef FEATURE_WLAN_WAPI
15180 case eCSR_ENCRYPT_TYPE_WPI:
15181 *EncrType = WDI_ED_WPI;
15182 break;
15183#endif
15184 case eCSR_ENCRYPT_TYPE_ANY:
15185 *EncrType = WDI_ED_ANY;
15186 break;
15187
15188 default:
15189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15190 "%s: Unknown Encryption Type", __func__);
15191 break;
15192 }
15193}
15194
15195/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015196 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015197 * Request to WDI to set Roam Offload Scan
15198 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015199VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015200 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
15201{
15202 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015203 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
15204 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015205 tWDA_ReqParams *pWdaParams ;
15206 v_U8_t csrAuthType;
15207 WDI_RoamNetworkType *pwdiRoamNetworkType;
15208 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
15209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15210 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015211 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015212 {
15213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15214 "%s: VOS MEM Alloc Failure", __func__);
15215 VOS_ASSERT(0);
15216 return VOS_STATUS_E_NOMEM;
15217 }
15218 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15219 if (NULL == pWdaParams)
15220 {
15221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15222 "%s: VOS MEM Alloc Failure", __func__);
15223 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015224 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015225 return VOS_STATUS_E_NOMEM;
15226 }
15227
15228 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015229 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015230 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015231 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
15232 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015233 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
15234 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
15235 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
15236 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
15237 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
15238 sizeof(pwdiRoamNetworkType->currAPbssid));
15239 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
15240 csrAuthType);
15241 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
15242 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
15243 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
15244 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
15245 pwdiRoamOffloadScanInfo->LookupThreshold =
15246 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080015247 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
15248 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015249 pwdiRoamOffloadScanInfo->RoamRssiDiff =
15250 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080015251 pwdiRoamOffloadScanInfo->MAWCEnabled =
15252 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015253 pwdiRoamOffloadScanInfo->Command =
15254 pRoamOffloadScanReqParams->Command ;
15255 pwdiRoamOffloadScanInfo->StartScanReason =
15256 pRoamOffloadScanReqParams->StartScanReason ;
15257 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
15258 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
15259 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
15260 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
15261 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
15262 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
15263 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
15264 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
15265 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
15266 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015267 pwdiRoamOffloadScanInfo->IsESEEnabled =
15268 pRoamOffloadScanReqParams->IsESEEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015269 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
15270 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
15271 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
15272 pwdiRoamNetworkType->ssId.ucLength =
15273 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
15274 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
15275 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
15276 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
15277 pwdiRoamNetworkType->ChannelCount =
15278 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
15279 pwdiRoamOffloadScanInfo->ChannelCacheType =
15280 pRoamOffloadScanReqParams->ChannelCacheType;
15281 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
15282 pRoamOffloadScanReqParams->ValidChannelList,
15283 pRoamOffloadScanReqParams->ValidChannelCount);
15284 pwdiRoamOffloadScanInfo->ValidChannelCount =
15285 pRoamOffloadScanReqParams->ValidChannelCount;
15286 pwdiRoamOffloadScanInfo->us24GProbeSize =
15287 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15288 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
15289 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
15290 pRoamOffloadScanReqParams->p24GProbeTemplate,
15291 pwdiRoamOffloadScanInfo->us24GProbeSize);
15292 pwdiRoamOffloadScanInfo->us5GProbeSize =
15293 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15294 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
15295 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
15296 pRoamOffloadScanReqParams->p5GProbeTemplate,
15297 pwdiRoamOffloadScanInfo->us5GProbeSize);
15298 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
15299 pRoamOffloadScanReqParams->MDID.mdiePresent;
15300 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
15301 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015302 pwdiRoamOffloadScanInfo->nProbes =
15303 pRoamOffloadScanReqParams->nProbes;
15304 pwdiRoamOffloadScanInfo->HomeAwayTime =
15305 pRoamOffloadScanReqParams->HomeAwayTime;
15306 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015307 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015308 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015309 pWdaParams->pWdaContext = pWDA;
15310 /* Store param pointer as passed in by caller */
15311 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015312 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015313 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
15314 if(IS_WDI_STATUS_FAILURE(status))
15315 {
15316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15317 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
15318 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15319 vos_mem_free(pWdaParams->wdaMsgParam);
15320 pWdaParams->wdaWdiApiMsgParam = NULL;
15321 pWdaParams->wdaMsgParam = NULL;
15322 }
15323 return CONVERT_WDI2VOS_STATUS(status) ;
15324}
15325#endif
15326
Jeff Johnson295189b2012-06-20 16:38:30 -070015327/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015328 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015329 *
15330 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015331void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015332{
15333 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15334
15335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015336 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015337
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015338 if(NULL == pWdaParams)
15339 {
15340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015341 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015342 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015343 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015344 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015345
Jeff Johnson295189b2012-06-20 16:38:30 -070015346 vos_mem_free(pWdaParams->wdaMsgParam) ;
15347 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15348 vos_mem_free(pWdaParams) ;
15349
15350 return ;
15351}
15352/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015353 * FUNCTION: WDA_RssiFilterReqCallback
15354 * Free memory.
15355 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
15356 */
15357void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
15358{
15359 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15360
15361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15362 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15363
15364 if(NULL == pWdaParams)
15365 {
15366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15367 "%s: pWdaParams received NULL", __func__);
15368 VOS_ASSERT(0);
15369 return;
15370 }
15371
15372 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15373 {
15374 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15375 vos_mem_free(pWdaParams->wdaMsgParam);
15376 vos_mem_free(pWdaParams);
15377 }
15378
15379 return;
15380}
15381/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015382 * FUNCTION: WDA_ProcessSetPreferredNetworkList
15383 * Request to WDI to set Preferred Network List.Offload
15384 */
15385VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
15386 tSirSetRSSIFilterReq* pRssiFilterParams)
15387{
Jeff Johnson43971f52012-07-17 12:26:56 -070015388 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015389 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
15390 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
15391 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015393 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015394 if(NULL == pwdiSetRssiFilterReqInfo)
15395 {
15396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015397 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015398 VOS_ASSERT(0);
15399 return VOS_STATUS_E_NOMEM;
15400 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015401 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15402 if(NULL == pWdaParams)
15403 {
15404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015405 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015406 VOS_ASSERT(0);
15407 vos_mem_free(pwdiSetRssiFilterReqInfo);
15408 return VOS_STATUS_E_NOMEM;
15409 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015410 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070015411 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
15412 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015413
Jeff Johnson295189b2012-06-20 16:38:30 -070015414 /* Store Params pass it to WDI */
15415 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
15416 pWdaParams->pWdaContext = pWDA;
15417 /* Store param pointer as passed in by caller */
15418 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015419 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015420 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015421 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015422 if(IS_WDI_STATUS_FAILURE(status))
15423 {
15424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15425 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
15426 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15427 vos_mem_free(pWdaParams->wdaMsgParam);
15428 pWdaParams->wdaWdiApiMsgParam = NULL;
15429 pWdaParams->wdaMsgParam = NULL;
15430 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015431 return CONVERT_WDI2VOS_STATUS(status) ;
15432}
15433
Jeff Johnson295189b2012-06-20 16:38:30 -070015434/*
15435 * FUNCTION: WDA_ProcessUpdateScanParams
15436 * Request to WDI to update Scan Parameters
15437 */
15438VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
15439 tSirUpdateScanParams *pUpdateScanParams)
15440{
Jeff Johnson43971f52012-07-17 12:26:56 -070015441 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015442 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
15443 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
15444 sizeof(WDI_UpdateScanParamsInfoType)) ;
15445 tWDA_ReqParams *pWdaParams ;
15446 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070015447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015448 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015449 if(NULL == wdiUpdateScanParamsInfoType)
15450 {
15451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015452 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015453 VOS_ASSERT(0);
15454 return VOS_STATUS_E_NOMEM;
15455 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015456 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15457 if ( NULL == pWdaParams )
15458 {
15459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015460 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015461 VOS_ASSERT(0);
15462 vos_mem_free(wdiUpdateScanParamsInfoType);
15463 return VOS_STATUS_E_NOMEM;
15464 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015465 //
15466 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
15467 //
Jeff Johnson295189b2012-06-20 16:38:30 -070015468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15469 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
15470 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
15471 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080015472 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070015473 pUpdateScanParams->b11dEnabled,
15474 pUpdateScanParams->b11dResolved,
15475 pUpdateScanParams->ucChannelCount,
15476 pUpdateScanParams->usPassiveMinChTime,
15477 pUpdateScanParams->usPassiveMaxChTime,
15478 pUpdateScanParams->usActiveMinChTime,
15479 pUpdateScanParams->usActiveMaxChTime,
15480 sizeof(tSirUpdateScanParams),
15481 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
15482
Jeff Johnson295189b2012-06-20 16:38:30 -070015483 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
15484 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070015485 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
15486 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070015487 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
15488 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070015489 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
15490 pUpdateScanParams->usActiveMaxChTime;
15491 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
15492 pUpdateScanParams->usActiveMinChTime;
15493 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
15494 pUpdateScanParams->usPassiveMaxChTime;
15495 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
15496 pUpdateScanParams->usPassiveMinChTime;
15497
Jeff Johnson295189b2012-06-20 16:38:30 -070015498 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053015499 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
15500 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070015501
Jeff Johnson295189b2012-06-20 16:38:30 -070015502 for ( i = 0; i <
15503 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
15504 i++)
15505 {
15506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15507 "Update Scan Parameters channel: %d",
15508 pUpdateScanParams->aChannels[i]);
15509
15510 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
15511 pUpdateScanParams->aChannels[i];
15512 }
15513
Yue Ma7f44bbe2013-04-12 11:47:39 -070015514 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
15515 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015516
Jeff Johnson295189b2012-06-20 16:38:30 -070015517 /* Store Params pass it to WDI */
15518 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
15519 pWdaParams->pWdaContext = pWDA;
15520 /* Store param pointer as passed in by caller */
15521 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070015522
Jeff Johnson295189b2012-06-20 16:38:30 -070015523
15524
15525 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015526 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015527 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015528 if(IS_WDI_STATUS_FAILURE(status))
15529 {
15530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15531 "Failure in Update Scan Params EQ WDI API, free all the memory " );
15532 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15533 vos_mem_free(pWdaParams->wdaMsgParam);
15534 vos_mem_free(pWdaParams);
15535 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015536 return CONVERT_WDI2VOS_STATUS(status) ;
15537}
15538#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015539
15540#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
15541/*
15542 * FUNCTION: WDA_RoamOffloadScanReqCallback
15543 *
15544 */
15545void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
15546{
15547 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070015548 vos_msg_t vosMsg;
15549 wpt_uint8 reason = 0;
15550
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070015551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015552 "<------ %s " ,__func__);
15553 if (NULL == pWdaParams)
15554 {
15555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15556 "%s: pWdaParams received NULL", __func__);
15557 VOS_ASSERT(0) ;
15558 return ;
15559 }
15560 if ( pWdaParams != NULL )
15561 {
15562 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
15563 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070015564 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015565 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15566 }
15567 if ( pWdaParams->wdaMsgParam != NULL)
15568 {
15569 vos_mem_free(pWdaParams->wdaMsgParam);
15570 }
15571
15572 vos_mem_free(pWdaParams) ;
15573 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070015574 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
15575 vosMsg.bodyptr = NULL;
15576 if (WDI_STATUS_SUCCESS != status)
15577 {
15578 reason = 0;
15579 }
15580 vosMsg.bodyval = reason;
15581 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15582 {
15583 /* free the mem and return */
15584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070015585 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070015586 }
15587
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015588 return ;
15589}
15590#endif
15591
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015592/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015593 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015594 *
15595 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015596void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015597{
15598 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15599
15600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15601 "<------ %s " ,__func__);
15602
15603 if(NULL == pWdaParams)
15604 {
15605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15606 "%s: pWdaParams received NULL", __func__);
15607 VOS_ASSERT(0);
15608 return;
15609 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015610
15611 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15612 vos_mem_free(pWdaParams->wdaMsgParam);
15613 vos_mem_free(pWdaParams);
15614
15615 return;
15616}
15617/*
15618 * FUNCTION: WDA_SetPowerParamsReqCallback
15619 * Free memory.
15620 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
15621 */
15622void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
15623{
15624 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15625
15626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15627 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15628
15629 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015630 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070015631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15632 "%s: pWdaParams received NULL", __func__);
15633 VOS_ASSERT(0);
15634 return;
15635 }
15636
15637 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15638 {
15639 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15640 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015641 vos_mem_free(pWdaParams);
15642 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015643
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015644 return;
15645}
15646
Jeff Johnson295189b2012-06-20 16:38:30 -070015647#ifdef WLAN_FEATURE_PACKET_FILTERING
15648/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015649 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015650 *
15651 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015652void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015653 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
15654 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015655{
15656 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070015657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015658 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015659 if(NULL == pWdaParams)
15660 {
15661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015662 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015663 VOS_ASSERT(0) ;
15664 return ;
15665 }
15666
15667 vos_mem_free(pWdaParams->wdaMsgParam) ;
15668 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15669 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015670 //print a msg, nothing else to do
15671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015672 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070015673 return ;
15674}
Jeff Johnson295189b2012-06-20 16:38:30 -070015675/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015676 * FUNCTION: WDA_8023MulticastListReqCallback
15677 * Free memory.
15678 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
15679 */
15680void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
15681{
15682 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15683
15684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15685 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15686
15687 if(NULL == pWdaParams)
15688 {
15689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15690 "%s: pWdaParams received NULL", __func__);
15691 VOS_ASSERT(0);
15692 return;
15693 }
15694
15695 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15696 {
15697 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15698 vos_mem_free(pWdaParams->wdaMsgParam);
15699 vos_mem_free(pWdaParams);
15700 }
15701
15702 return;
15703}
15704/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015705 * FUNCTION: WDA_Process8023MulticastListReq
15706 * Request to WDI to add 8023 Multicast List
15707 */
15708VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
15709 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
15710{
Jeff Johnson43971f52012-07-17 12:26:56 -070015711 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015712 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
15713 tWDA_ReqParams *pWdaParams ;
15714 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070015715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015716 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015717 pwdiFltPktSetMcListReqParamsType =
15718 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
15719 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
15720 ) ;
15721 if(NULL == pwdiFltPktSetMcListReqParamsType)
15722 {
15723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015724 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015725 return VOS_STATUS_E_NOMEM;
15726 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015727 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15728 if(NULL == pWdaParams)
15729 {
15730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015731 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015732 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
15733 return VOS_STATUS_E_NOMEM;
15734 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015735
Jeff Johnson295189b2012-06-20 16:38:30 -070015736 //
15737 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
15738 //
15739 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070015740 pRcvFltMcAddrList->ulMulticastAddrCnt;
15741
15742 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
15743 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
15744 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
15745 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
15746
Jeff Johnson295189b2012-06-20 16:38:30 -070015747 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
15748 {
15749 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
15750 &(pRcvFltMcAddrList->multicastAddr[i]),
15751 sizeof(tSirMacAddr));
15752 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015753 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
15754 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015755
Jeff Johnson295189b2012-06-20 16:38:30 -070015756 /* Store Params pass it to WDI */
15757 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
15758 pWdaParams->pWdaContext = pWDA;
15759 /* Store param pointer as passed in by caller */
15760 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070015761 status = WDI_8023MulticastListReq(
15762 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015763 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015764 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015765 if(IS_WDI_STATUS_FAILURE(status))
15766 {
15767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15768 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
15769 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15770 vos_mem_free(pWdaParams->wdaMsgParam);
15771 vos_mem_free(pWdaParams);
15772 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015773 return CONVERT_WDI2VOS_STATUS(status) ;
15774}
Jeff Johnson295189b2012-06-20 16:38:30 -070015775/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015776 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015777 *
15778 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015779void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015780 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
15781 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015782{
15783 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070015784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015785 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015786 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070015787 if(NULL == pWdaParams)
15788 {
15789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015790 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015791 VOS_ASSERT(0) ;
15792 return ;
15793 }
15794
15795 vos_mem_free(pWdaParams->wdaMsgParam) ;
15796 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15797 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015798 //print a msg, nothing else to do
15799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015800 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070015801 return ;
15802}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015803
15804/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015805 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
15806 * Free memory.
15807 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015808 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015809void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015810 void* pUserData)
15811{
15812 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15813
15814 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15815 "<------ %s, wdiStatus: %d",
15816 __func__, wdiStatus);
15817
15818 if (NULL == pWdaParams)
15819 {
15820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15821 "%s: Invalid pWdaParams pointer", __func__);
15822 VOS_ASSERT(0);
15823 return;
15824 }
15825
15826 if (IS_WDI_STATUS_FAILURE(wdiStatus))
15827 {
15828 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15829 vos_mem_free(pWdaParams->wdaMsgParam);
15830 vos_mem_free(pWdaParams);
15831 }
15832
15833 return;
15834}
15835
Jeff Johnson295189b2012-06-20 16:38:30 -070015836/*
15837 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
15838 * Request to WDI to set Receive Filters
15839 */
15840VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
15841 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
15842{
Jeff Johnson43971f52012-07-17 12:26:56 -070015843 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015844 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
15845 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
15846 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
15847 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
15848 tWDA_ReqParams *pWdaParams ;
15849 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070015850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015851 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015852 if(NULL == pwdiSetRcvPktFilterReqParamsType)
15853 {
15854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015855 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015856 VOS_ASSERT(0);
15857 return VOS_STATUS_E_NOMEM;
15858 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015859 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15860 if(NULL == pWdaParams)
15861 {
15862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015863 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015864 VOS_ASSERT(0);
15865 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
15866 return VOS_STATUS_E_NOMEM;
15867 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015868 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
15869 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
15870 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
15871 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070015872 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
15873 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
15874
15875 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
15876 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070015877
15878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15879 "FID %d FT %d NParams %d CT %d",
15880 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
15881 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
15882 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
15883 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070015884 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
15885 {
15886 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
15887 &pRcvPktFilterCfg->paramsData[i],
15888 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070015889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015890 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070015891 pwdiSetRcvPktFilterReqParamsType->
15892 wdiPktFilterCfg.paramsData[i].protocolLayer,
15893 pwdiSetRcvPktFilterReqParamsType->
15894 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070015895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015896 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070015897 pwdiSetRcvPktFilterReqParamsType->
15898 wdiPktFilterCfg.paramsData[i].dataOffset,
15899 pwdiSetRcvPktFilterReqParamsType->
15900 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070015901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015902 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070015903 pwdiSetRcvPktFilterReqParamsType->
15904 wdiPktFilterCfg.paramsData[i].compareData[0],
15905 pwdiSetRcvPktFilterReqParamsType->
15906 wdiPktFilterCfg.paramsData[i].compareData[1],
15907 pwdiSetRcvPktFilterReqParamsType->
15908 wdiPktFilterCfg.paramsData[i].compareData[2],
15909 pwdiSetRcvPktFilterReqParamsType->
15910 wdiPktFilterCfg.paramsData[i].compareData[3],
15911 pwdiSetRcvPktFilterReqParamsType->
15912 wdiPktFilterCfg.paramsData[i].compareData[4],
15913 pwdiSetRcvPktFilterReqParamsType->
15914 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070015915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015916 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070015917 pwdiSetRcvPktFilterReqParamsType->
15918 wdiPktFilterCfg.paramsData[i].dataMask[0],
15919 pwdiSetRcvPktFilterReqParamsType->
15920 wdiPktFilterCfg.paramsData[i].dataMask[1],
15921 pwdiSetRcvPktFilterReqParamsType->
15922 wdiPktFilterCfg.paramsData[i].dataMask[2],
15923 pwdiSetRcvPktFilterReqParamsType->
15924 wdiPktFilterCfg.paramsData[i].dataMask[3],
15925 pwdiSetRcvPktFilterReqParamsType->
15926 wdiPktFilterCfg.paramsData[i].dataMask[4],
15927 pwdiSetRcvPktFilterReqParamsType->
15928 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070015929 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015930 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015931 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015932 /* Store Params pass it to WDI */
15933 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
15934 pWdaParams->pWdaContext = pWDA;
15935 /* Store param pointer as passed in by caller */
15936 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070015937 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015938 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015939 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015940 if(IS_WDI_STATUS_FAILURE(status))
15941 {
15942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15943 "Failure in SetFilter(),free all the memory,status %d ",status);
15944 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15945 vos_mem_free(pWdaParams->wdaMsgParam);
15946 vos_mem_free(pWdaParams);
15947 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015948 return CONVERT_WDI2VOS_STATUS(status) ;
15949}
Jeff Johnson295189b2012-06-20 16:38:30 -070015950/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015951 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015952 *
15953 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015954void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015955 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
15956 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015957{
15958 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15959 tWDA_CbContext *pWDA;
15960 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
15961 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
15962 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
15963 tANI_U8 i;
15964 vos_msg_t vosMsg;
15965
15966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015967 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015968 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
15969
Jeff Johnsone7245742012-09-05 17:12:55 -070015970 if(NULL == pRcvFltPktMatchCntRsp)
15971 {
15972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015973 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070015974 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015975 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070015976 return ;
15977 }
15978
Jeff Johnson295189b2012-06-20 16:38:30 -070015979 if(NULL == pWdaParams)
15980 {
15981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015982 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015983 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015984 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070015985 return ;
15986 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015987 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
15988 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070015989 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
15990 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
15991
15992 /* Message Header */
15993 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
15994 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
15995
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015996 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070015997
15998 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
15999 {
16000 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
16001 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
16002 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016003 /* VOS message wrapper */
16004 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
16005 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
16006 vosMsg.bodyval = 0;
16007 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
16008 {
16009 /* free the mem and return */
16010 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
16011 }
16012
16013 vos_mem_free(pWdaParams->wdaMsgParam) ;
16014 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16015 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070016016
16017 return;
16018}
16019/*
16020 * FUNCTION: WDA_FilterMatchCountReqCallback
16021 * Free memory and send RSP back to SME.
16022 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
16023 */
16024void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
16025{
16026 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16027 vos_msg_t vosMsg;
16028
16029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16030 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16031
16032 if(NULL == pWdaParams)
16033 {
16034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16035 "%s: pWdaParams received NULL", __func__);
16036 VOS_ASSERT(0);
16037 return;
16038 }
16039
16040 /* VOS message wrapper */
16041 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
16042 vosMsg.bodyptr = NULL;
16043 vosMsg.bodyval = 0;
16044
16045 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16046 {
16047 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16048 vos_mem_free(pWdaParams->wdaMsgParam);
16049 vos_mem_free(pWdaParams);
16050 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
16051 }
16052
16053 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070016054}
Jeff Johnson295189b2012-06-20 16:38:30 -070016055/*
16056 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
16057 * Request to WDI to get PC Filter Match Count
16058 */
16059VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
16060{
Jeff Johnson43971f52012-07-17 12:26:56 -070016061 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016062 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
16063 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
16064 tWDA_ReqParams *pWdaParams ;
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 == pwdiRcvFltPktMatchCntReqParamsType)
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(pwdiRcvFltPktMatchCntReqParamsType);
16081 return VOS_STATUS_E_NOMEM;
16082 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016083
Yue Ma7f44bbe2013-04-12 11:47:39 -070016084 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
16085 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016086
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016087 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
16088 pRcvFltPktMatchRsp->bssId,
16089 sizeof(wpt_macAddr));
16090
Jeff Johnson295189b2012-06-20 16:38:30 -070016091 /* Store Params pass it to WDI */
16092 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
16093 pWdaParams->pWdaContext = pWDA;
16094 /* Store param pointer as passed in by caller */
16095 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070016096 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016097 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016098 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016099 if(IS_WDI_STATUS_FAILURE(status))
16100 {
16101 /* failure returned by WDI API */
16102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16103 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
16104 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16105 vos_mem_free(pWdaParams) ;
16106 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
16107 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
16108 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016109 return CONVERT_WDI2VOS_STATUS(status) ;
16110}
Jeff Johnson295189b2012-06-20 16:38:30 -070016111/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016112 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070016113 *
16114 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016115void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070016116 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
16117 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070016118{
16119 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070016120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016121 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016122/* WDA_VOS_ASSERT(NULL != pWdaParams); */
16123 if(NULL == pWdaParams)
16124 {
16125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016126 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016127 VOS_ASSERT(0) ;
16128 return ;
16129 }
16130
16131 vos_mem_free(pWdaParams->wdaMsgParam) ;
16132 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16133 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016134 //print a msg, nothing else to do
16135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016136 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070016137 return ;
16138}
Jeff Johnson295189b2012-06-20 16:38:30 -070016139/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070016140 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
16141 * Free memory.
16142 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
16143 */
16144void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
16145{
16146 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16147
16148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16149 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
16150
16151 if(NULL == pWdaParams)
16152 {
16153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16154 "%s: Invalid pWdaParams pointer", __func__);
16155 VOS_ASSERT(0);
16156 return;
16157 }
16158
16159 if(IS_WDI_STATUS_FAILURE(wdiStatus))
16160 {
16161 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16162 vos_mem_free(pWdaParams->wdaMsgParam);
16163 vos_mem_free(pWdaParams);
16164 }
16165
16166 return;
16167}
16168/*
Jeff Johnson295189b2012-06-20 16:38:30 -070016169 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
16170 * Request to WDI to clear Receive Filters
16171 */
16172VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
16173 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
16174{
Jeff Johnson43971f52012-07-17 12:26:56 -070016175 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016176 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
16177 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
16178 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016180 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016181 if(NULL == pwdiRcvFltPktClearReqParamsType)
16182 {
16183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016184 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016185 VOS_ASSERT(0);
16186 return VOS_STATUS_E_NOMEM;
16187 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016188 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16189 if(NULL == pWdaParams)
16190 {
16191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016192 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016193 VOS_ASSERT(0);
16194 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
16195 return VOS_STATUS_E_NOMEM;
16196 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016197 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
16198 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070016199 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
16200 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
16201 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
16202 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016203
Yue Ma7f44bbe2013-04-12 11:47:39 -070016204 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016205 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016206 /* Store Params pass it to WDI */
16207 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
16208 pWdaParams->pWdaContext = pWDA;
16209 /* Store param pointer as passed in by caller */
16210 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070016211 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016212 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016213 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016214 if(IS_WDI_STATUS_FAILURE(status))
16215 {
16216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16217 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
16218 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080016219 vos_mem_free(pWdaParams->wdaMsgParam);
16220 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016221 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016222 return CONVERT_WDI2VOS_STATUS(status) ;
16223}
16224#endif // WLAN_FEATURE_PACKET_FILTERING
16225
Jeff Johnson295189b2012-06-20 16:38:30 -070016226/*
16227 * FUNCTION: WDA_ProcessSetPowerParamsReq
16228 * Request to WDI to set power params
16229 */
16230VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
16231 tSirSetPowerParamsReq *pPowerParams)
16232{
Jeff Johnson43971f52012-07-17 12:26:56 -070016233 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016234 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
16235 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016236 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016238 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016239 if(NULL == pwdiSetPowerParamsReqInfo)
16240 {
16241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016242 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016243 VOS_ASSERT(0);
16244 return VOS_STATUS_E_NOMEM;
16245 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016246 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16247 if(NULL == pWdaParams)
16248 {
16249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016250 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016251 VOS_ASSERT(0);
16252 vos_mem_free(pwdiSetPowerParamsReqInfo);
16253 return VOS_STATUS_E_NOMEM;
16254 }
Jeff Johnsone7245742012-09-05 17:12:55 -070016255
Jeff Johnson295189b2012-06-20 16:38:30 -070016256
16257 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
16258 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070016259 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
16260 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070016261 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
16262 pPowerParams->uListenInterval;
16263 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
16264 pPowerParams->uBcastMcastFilter;
16265 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
16266 pPowerParams->uEnableBET;
16267 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
16268 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070016269 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
16270 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070016271 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
16272 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016273
Jeff Johnson295189b2012-06-20 16:38:30 -070016274 /* Store Params pass it to WDI */
16275 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
16276 pWdaParams->pWdaContext = pWDA;
16277 /* Store param pointer as passed in by caller */
16278 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016279 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016280 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016281 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016282 if(IS_WDI_STATUS_FAILURE(status))
16283 {
16284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16285 "Failure in Set power params REQ WDI API, free all the memory " );
16286 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16287 vos_mem_free(pWdaParams->wdaMsgParam);
16288 pWdaParams->wdaWdiApiMsgParam = NULL;
16289 pWdaParams->wdaMsgParam = NULL;
16290 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016291 return CONVERT_WDI2VOS_STATUS(status) ;
16292}
16293
16294/*
16295 * FUNCTION: WDA_SetTmLevelRspCallback
16296 * Set TM Level response
16297 */
16298void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
16299{
16300 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16301
16302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016303 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016304
16305 if(NULL == pWdaParams)
16306 {
16307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016308 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016309 VOS_ASSERT(0) ;
16310 return ;
16311 }
16312
16313 /* Dose not need to send notification to upper layer
16314 * Just free allocated resources */
16315 if( pWdaParams != NULL )
16316 {
16317 if( pWdaParams->wdaWdiApiMsgParam != NULL )
16318 {
16319 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16320 }
16321 vos_mem_free(pWdaParams->wdaMsgParam) ;
16322 vos_mem_free(pWdaParams) ;
16323 }
16324}
16325
16326/*
16327 * FUNCTION: WDA_ProcessSetTmLevelReq
16328 * Set TM Level request
16329 */
16330VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
16331 tAniSetTmLevelReq *setTmLevelReq)
16332{
16333 WDI_Status status = WDI_STATUS_SUCCESS ;
16334 tWDA_ReqParams *pWdaParams ;
16335 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
16336 (WDI_SetTmLevelReqType *)vos_mem_malloc(
16337 sizeof(WDI_SetTmLevelReqType)) ;
16338 if(NULL == wdiSetTmLevelReq)
16339 {
16340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016341 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016342 VOS_ASSERT(0);
16343 return VOS_STATUS_E_NOMEM;
16344 }
16345
16346 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16347 if(NULL == pWdaParams)
16348 {
16349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016350 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016351 VOS_ASSERT(0);
16352 vos_mem_free(wdiSetTmLevelReq);
16353 return VOS_STATUS_E_NOMEM;
16354 }
16355
16356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016357 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016358
16359 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
16360 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
16361
16362 pWdaParams->pWdaContext = pWDA;
16363 pWdaParams->wdaMsgParam = setTmLevelReq;
16364 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
16365
16366 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
16367 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
16368
16369 if(IS_WDI_STATUS_FAILURE(status))
16370 {
16371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080016372 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070016373 vos_mem_free(pWdaParams->wdaMsgParam) ;
16374 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16375 vos_mem_free(pWdaParams) ;
16376 }
16377
16378 return CONVERT_WDI2VOS_STATUS(status) ;
16379}
16380
16381VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
16382 tpTxControlParams pTxCtrlParam)
16383{
16384 VOS_STATUS wdaStatus;
16385
16386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016387 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016388 if( pTxCtrlParam == NULL )
16389 {
16390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016391 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016392 return VOS_STATUS_E_FAILURE;
16393 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016394 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
16395 {
16396 wdaStatus = WDA_SuspendDataTx(pWDA);
16397 }
16398 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
16399 {
16400 wdaStatus = WDA_ResumeDataTx(pWDA);
16401 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016402 return wdaStatus;
16403}
16404
16405 /* FUNCTION WDA_featureCapsExchange
16406 * WDA API to invoke capability exchange between host and FW.
16407 */
16408void WDA_featureCapsExchange(v_PVOID_t pVosContext)
16409{
16410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016411 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070016412 WDI_featureCapsExchangeReq( NULL, pVosContext);
16413}
16414
Yathish9f22e662012-12-10 14:21:35 -080016415/* FUNCTION WDA_disableCapablityFeature
16416 * WDA API to diable Active mode offload in host.
16417 */
16418void WDA_disableCapablityFeature(tANI_U8 feature_index)
16419{
16420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16421 "%s:enter", __func__ );
16422 WDI_disableCapablityFeature(feature_index);
16423}
16424
Jeff Johnson295189b2012-06-20 16:38:30 -070016425 /* FUNCTION WDA_getHostWlanFeatCaps
16426 * Wrapper for WDI API, that will return if the feature (enum value).passed
16427 * to this API is supported or not in Host
16428 * return value
16429 * 0 - implies feature is NOT Supported
16430 * any non zero value - implies feature is SUPPORTED
16431 */
16432tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
16433{
16434 return WDI_getHostWlanFeatCaps(featEnumValue);
16435}
16436
16437 /* FUNCTION WDA_getFwWlanFeatCaps
16438 * Wrapper for WDI API, that will return if the feature (enum value).passed
16439 * to this API is supported or not in FW
16440 * return value
16441 * 0 - implies feature is NOT Supported
16442 * any non zero value - implies feature is SUPPORTED
16443 */
16444tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
16445{
16446 return WDI_getFwWlanFeatCaps(featEnumValue);
16447}
16448
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053016449
Jeff Johnson295189b2012-06-20 16:38:30 -070016450/*
16451 * FUNCTION: WDA_shutdown
16452 * Shutdown WDA/WDI without handshaking with Riva.
16453 * Synchronous function.
16454 */
16455VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
16456{
16457 WDI_Status wdiStatus;
16458 //tANI_U8 eventIdx = 0;
16459 VOS_STATUS status = VOS_STATUS_SUCCESS;
16460 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070016461 if (NULL == pWDA)
16462 {
16463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016464 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070016465 VOS_ASSERT(0);
16466 return VOS_STATUS_E_FAILURE;
16467 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016468 /* FTM mode stay START_STATE */
16469 if( (WDA_READY_STATE != pWDA->wdaState) &&
16470 (WDA_INIT_STATE != pWDA->wdaState) &&
16471 (WDA_START_STATE != pWDA->wdaState) )
16472 {
16473 VOS_ASSERT(0);
16474 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016475
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080016476 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
16477 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070016478 {
16479 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080016480 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070016481 }
Leo Chang9d76f622013-08-23 16:34:52 -070016482 else
16483 {
16484 vos_event_destroy(&pWDA->ftmStopDoneEvent);
16485 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016486
Jeff Johnson295189b2012-06-20 16:38:30 -070016487 /* call WDI shutdown */
16488 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070016489 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
16490 {
16491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16492 "error in WDA Stop" );
16493 status = VOS_STATUS_E_FAILURE;
16494 }
16495 /* WDI stop is synchrnous, shutdown is complete when it returns */
16496 pWDA->wdaState = WDA_STOP_STATE;
16497
Jeff Johnson295189b2012-06-20 16:38:30 -070016498 /* shutdown should perform the stop & close actions. */
16499 /* Destroy the event */
16500 status = vos_event_destroy(&pWDA->txFrameEvent);
16501 if(!VOS_IS_STATUS_SUCCESS(status))
16502 {
16503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016504 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070016505 status = VOS_STATUS_E_FAILURE;
16506 }
16507 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
16508 if(!VOS_IS_STATUS_SUCCESS(status))
16509 {
16510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016511 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070016512 status = VOS_STATUS_E_FAILURE;
16513 }
16514 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
16515 if(!VOS_IS_STATUS_SUCCESS(status))
16516 {
16517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016518 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070016519 status = VOS_STATUS_E_FAILURE;
16520 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016521 /* free WDA context */
16522 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
16523 if ( !VOS_IS_STATUS_SUCCESS(status) )
16524 {
16525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16526 "error in WDA close " );
16527 status = VOS_STATUS_E_FAILURE;
16528 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016529 return status;
16530}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080016531
Jeff Johnsone7245742012-09-05 17:12:55 -070016532/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080016533 * FUNCTION: WDA_setNeedShutdown
16534 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070016535 */
16536
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080016537void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070016538{
16539 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070016540 if(pWDA == NULL)
16541 {
16542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16543 "Could not get the WDA Context pointer" );
16544 return;
16545 }
Jeff Johnsone7245742012-09-05 17:12:55 -070016546 pWDA->needShutdown = TRUE;
16547}
16548/*
16549 * FUNCTION: WDA_needShutdown
16550 * WDA needs a shutdown
16551 */
16552
16553v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
16554{
16555 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070016556 if(pWDA == NULL)
16557 {
16558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16559 "Could not get the WDA Context pointer" );
16560 return 0;
16561 }
16562 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070016563}
16564
Mohit Khanna4a70d262012-09-11 16:30:12 -070016565#ifdef WLAN_FEATURE_11AC
16566/*
16567 * FUNCTION: WDA_SetBeaconFilterReqCallback
16568 *
16569 */
16570void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
16571{
16572 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016574 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016575 if(NULL == pWdaParams)
16576 {
16577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016578 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016579 VOS_ASSERT(0) ;
16580 return ;
16581 }
Jeff Johnsone7245742012-09-05 17:12:55 -070016582
Mohit Khanna4a70d262012-09-11 16:30:12 -070016583 vos_mem_free(pWdaParams->wdaMsgParam) ;
16584 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16585 vos_mem_free(pWdaParams) ;
16586 /*
16587 * No respone required for SetBeaconFilter req so just free the request
16588 * param here
16589 */
16590
16591 return ;
16592}
16593
16594VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
16595 tUpdateVHTOpMode *pData)
16596{
16597 WDI_Status status = WDI_STATUS_SUCCESS ;
16598 tWDA_ReqParams *pWdaParams ;
16599 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
16600 sizeof(WDI_UpdateVHTOpMode)) ;
16601 if(NULL == wdiTemp)
16602 {
16603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016604 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016605 VOS_ASSERT(0);
16606 return VOS_STATUS_E_NOMEM;
16607 }
16608 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16609 if(NULL == pWdaParams)
16610 {
16611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016612 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016613 VOS_ASSERT(0);
16614 vos_mem_free(wdiTemp);
16615 return VOS_STATUS_E_NOMEM;
16616 }
Abhishek Singhdf8eb312014-11-15 00:49:28 +053016617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16618 "------> %s Opmode = %d and staid = %d" ,
16619 __func__, pData->opMode, pData->staId);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016620 wdiTemp->opMode = pData->opMode;
16621 wdiTemp->staId = pData->staId;
16622
16623 pWdaParams->pWdaContext = pWDA;
16624 /* Store Req pointer, as this will be used for response */
16625 pWdaParams->wdaMsgParam = (void *)pData;
16626 /* store Params pass it to WDI */
16627 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
16628
16629 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
16630
16631 if(IS_WDI_STATUS_FAILURE(status))
16632 {
16633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16634 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
16635 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16636 vos_mem_free(pWdaParams->wdaMsgParam);
16637 vos_mem_free(pWdaParams);
16638 }
16639 return CONVERT_WDI2VOS_STATUS(status) ;
16640}
16641#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016642
16643/*==========================================================================
16644 FUNCTION WDA_TransportChannelDebug
16645
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070016646 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016647 Display Transport Channel debugging information
16648 User may request to display DXE channel snapshot
16649 Or if host driver detects any abnormal stcuk may display
16650
16651 PARAMETERS
schang6295e542013-03-12 15:31:23 -070016652 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080016653 displaySnapshot : Display DXE snapshot option
Mihir Shete40a55652014-03-02 14:14:47 +053016654 debugFlags : Enable stall detect features
16655 defined by WPAL_DeviceDebugFlags
16656 These features may effect
16657 data performance.
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016658
16659 RETURN VALUE
16660 NONE
16661
16662===========================================================================*/
16663void WDA_TransportChannelDebug
16664(
schang6295e542013-03-12 15:31:23 -070016665 tpAniSirGlobal pMac,
16666 v_BOOL_t displaySnapshot,
Mihir Shete40a55652014-03-02 14:14:47 +053016667 v_U8_t debugFlags
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016668)
16669{
Mihir Shete40a55652014-03-02 14:14:47 +053016670 WDI_TransportChannelDebug(displaySnapshot, debugFlags);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016671 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070016672}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070016673
16674/*==========================================================================
16675 FUNCTION WDA_SetEnableSSR
16676
16677 DESCRIPTION
16678 API to enable/disable SSR on WDI timeout
16679
16680 PARAMETERS
16681 enableSSR : enable/disable SSR
16682
16683 RETURN VALUE
16684 NONE
16685
16686===========================================================================*/
16687void WDA_SetEnableSSR(v_BOOL_t enableSSR)
16688{
16689 WDI_SetEnableSSR(enableSSR);
16690}
Leo Chang9056f462013-08-01 19:21:11 -070016691
16692#ifdef FEATURE_WLAN_LPHB
16693/*
16694 * FUNCTION: WDA_LPHBconfRspCallback
16695 *
16696 */
16697void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
16698{
16699 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16700
16701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16702 "<------ %s " ,__func__);
16703 if (NULL == pWdaParams)
16704 {
16705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16706 "%s: pWdaParams received NULL", __func__);
16707 VOS_ASSERT(0) ;
16708 return ;
16709 }
16710
16711 /* Do not need to send notification to upper layer
16712 * Just free allocated resources */
16713 if (pWdaParams != NULL)
16714 {
16715 if (pWdaParams->wdaWdiApiMsgParam != NULL)
16716 {
16717 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16718 }
16719 vos_mem_free(pWdaParams->wdaMsgParam) ;
16720 vos_mem_free(pWdaParams) ;
16721 }
16722
16723 return;
16724}
16725
16726/*
16727 * FUNCTION: WDA_ProcessLPHBConfReq
16728 *
16729 */
16730VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
16731 tSirLPHBReq *pData)
16732{
16733 WDI_Status wdiStatus;
16734 tWDA_ReqParams *pWdaParams ;
16735
16736 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16737 "------> %s " , __func__);
16738
16739 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16740 if (NULL == pWdaParams)
16741 {
16742 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16743 "%s: VOS MEM Alloc Failure", __func__);
16744 VOS_ASSERT(0);
16745 vos_mem_free(pData);
16746 return VOS_STATUS_E_NOMEM;
16747 }
16748
16749 pWdaParams->pWdaContext = pWDA;
16750 pWdaParams->wdaMsgParam = (void *)pData;
16751 pWdaParams->wdaWdiApiMsgParam = NULL;
16752
16753 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
16754 if (WDI_STATUS_PENDING == wdiStatus)
16755 {
16756 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16757 "Pending received for %s:%d ", __func__, __LINE__);
16758 }
16759 else if (WDI_STATUS_SUCCESS != wdiStatus)
16760 {
16761 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16762 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
16763 vos_mem_free(pWdaParams->wdaMsgParam);
16764 vos_mem_free(pWdaParams);
16765 }
16766
16767 return CONVERT_WDI2VOS_STATUS(wdiStatus);
16768}
16769#endif /* FEATURE_WLAN_LPHB */
16770
c_hpothu92367912014-05-01 15:18:17 +053016771void WDA_GetBcnMissRateCallback(tANI_U8 status, tANI_U32 bcnMissRate,
16772 void* pUserData)
16773{
16774 tSirBcnMissRateInfo *pBcnMissRateInfo = (tSirBcnMissRateInfo *)pUserData;
16775
16776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16777 "<------ %s " ,__func__);
16778 if (NULL == pBcnMissRateInfo)
16779 {
16780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16781 "%s: pWdaParams received NULL", __func__);
16782 VOS_ASSERT(0) ;
16783 return ;
16784 }
16785 if (pBcnMissRateInfo->callback)
16786 {
16787 pBcnMissRateInfo->callback(status, bcnMissRate,
16788 pBcnMissRateInfo->data);
16789 }
16790 vos_mem_free(pUserData);
16791
16792 return;
16793}
16794
16795v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
16796 tSirBcnMissRateReq *pData)
16797{
16798 WDI_Status wdiStatus;
16799 tSirBcnMissRateInfo *pBcnMissRateInfo;
16800
16801 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16802 "------> %s " , __func__);
16803
16804 pBcnMissRateInfo =
16805 (tSirBcnMissRateInfo *)vos_mem_malloc(sizeof(tSirBcnMissRateInfo));
16806 if (NULL == pBcnMissRateInfo)
16807 {
16808 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16809 "%s: VOS MEM Alloc Failure", __func__);
16810 VOS_ASSERT(0);
16811 vos_mem_free(pData);
16812 return;
16813 }
16814
16815 pBcnMissRateInfo->callback = (pGetBcnMissRateCB)(pData->callback);
16816 pBcnMissRateInfo->data = pData->data;
16817
16818 wdiStatus = WDI_GetBcnMissRate(pBcnMissRateInfo,
16819 WDA_GetBcnMissRateCallback,
16820 pData->bssid);
16821 if (WDI_STATUS_PENDING == wdiStatus)
16822 {
16823 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16824 "Pending received for %s:%d ", __func__, __LINE__);
16825 }
16826 else if (WDI_STATUS_SUCCESS != wdiStatus)
16827 {
16828 if (pBcnMissRateInfo->callback)
16829 {
16830 pBcnMissRateInfo->callback(VOS_STATUS_E_FAILURE,
16831 -1, pBcnMissRateInfo->data);
16832 }
16833 }
16834 vos_mem_free(pData);
16835}
Dino Mycle41bdc942014-06-10 11:30:24 +053016836
16837#ifdef WLAN_FEATURE_EXTSCAN
16838
16839/*==========================================================================
16840 FUNCTION WDA_EXTScanStartRspCallback
16841
16842 DESCRIPTION
16843 API to send EXTScan Start Response to HDD
16844
16845 PARAMETERS
16846 pEventData: Response from FW
16847 pUserData:
16848===========================================================================*/
16849void WDA_EXTScanStartRspCallback(void *pEventData, void* pUserData)
16850{
16851 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16852 tWDA_CbContext *pWDA = NULL;
16853 void *pCallbackContext;
16854 tpAniSirGlobal pMac;
16855
16856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16857 "%s:", __func__);
16858 if (NULL == pWdaParams)
16859 {
16860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16861 "%s: pWdaParams received NULL", __func__);
16862 VOS_ASSERT(0);
16863 return;
16864 }
16865
16866 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
16867
16868 if (NULL == pWDA)
16869 {
16870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16871 "%s: pWDA received NULL", __func__);
16872 VOS_ASSERT(0);
16873 goto error;
16874 }
16875
16876 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16877 if (NULL == pMac)
16878 {
16879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16880 "%s:pMac is NULL", __func__);
16881 VOS_ASSERT(0);
16882 goto error;
16883 }
16884
16885 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
16886
16887 if (pMac->sme.pEXTScanIndCb)
16888 {
16889 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_START_RSP,
16890 pEventData);
16891 }
16892 else
16893 {
16894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16895 "%s:HDD callback is null", __func__);
16896 VOS_ASSERT(0);
16897 }
16898
16899error:
16900
16901 if (pWdaParams->wdaWdiApiMsgParam != NULL)
16902 {
16903 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16904 }
16905 if (pWdaParams->wdaMsgParam != NULL)
16906 {
16907 vos_mem_free(pWdaParams->wdaMsgParam);
16908 }
16909 vos_mem_free(pWdaParams) ;
16910
16911 return;
16912}
16913
16914/*==========================================================================
16915 FUNCTION WDA_EXTScanStopRspCallback
16916
16917 DESCRIPTION
16918 API to send EXTScan Stop Response to HDD
16919
16920 PARAMETERS
16921 pEventData: Response from FW
16922 pUserData:
16923===========================================================================*/
16924void WDA_EXTScanStopRspCallback(void *pEventData, void* pUserData)
16925{
16926 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16927 tWDA_CbContext *pWDA = NULL;
16928 void *pCallbackContext;
16929 tpAniSirGlobal pMac;
16930
16931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16932 "%s:", __func__);
16933 if (NULL == pWdaParams)
16934 {
16935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16936 "%s: pWdaParams received NULL", __func__);
16937 VOS_ASSERT(0);
16938 return;
16939 }
16940
16941 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
16942
16943 if (NULL == pWDA)
16944 {
16945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16946 "%s: pWDA received NULL", __func__);
16947 VOS_ASSERT(0);
16948 goto error;
16949 }
16950
16951 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16952 if (NULL == pMac)
16953 {
16954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16955 "%s:pMac is NULL", __func__);
16956 VOS_ASSERT(0);
16957 goto error;
16958 }
16959 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
16960
16961 if (pMac->sme.pEXTScanIndCb)
16962 {
16963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16964 "%s:HDD call back function called", __func__);
16965 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_STOP_RSP,
16966 pEventData);
16967 }
16968 else
16969 {
16970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16971 "%s:HDD callback is null", __func__);
16972 VOS_ASSERT(0);
16973 }
16974
16975error:
16976
16977 if (pWdaParams->wdaWdiApiMsgParam != NULL)
16978 {
16979 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16980 }
16981 if (pWdaParams->wdaMsgParam != NULL)
16982 {
16983 vos_mem_free(pWdaParams->wdaMsgParam);
16984 }
16985 vos_mem_free(pWdaParams) ;
16986
16987
16988 return;
16989}
16990
16991/*==========================================================================
16992 FUNCTION WDA_EXTScanGetCachedResultsRspCallback
16993
16994 DESCRIPTION
16995 API to send EXTScan Get Cached Results Response to HDD
16996
16997 PARAMETERS
16998 pEventData: Response from FW
16999 pUserData:
17000===========================================================================*/
17001void WDA_EXTScanGetCachedResultsRspCallback(void *pEventData, void* pUserData)
17002{
17003 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17004 tWDA_CbContext *pWDA = NULL;
17005 void *pCallbackContext;
17006 tpAniSirGlobal pMac;
17007
17008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17009 "%s: ", __func__);
17010 if (NULL == pWdaParams)
17011 {
17012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17013 "%s: pWdaParams received NULL", __func__);
17014 VOS_ASSERT(0);
17015 return;
17016 }
17017
17018 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17019
17020 if (NULL == pWDA)
17021 {
17022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17023 "%s: pWDA received NULL", __func__);
17024 VOS_ASSERT(0);
17025 goto error;
17026 }
17027
17028 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17029 if (NULL == pMac)
17030 {
17031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17032 "%s:pMac is NULL", __func__);
17033 VOS_ASSERT(0);
17034 goto error;
17035 }
17036
17037 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17038
17039 if (pMac->sme.pEXTScanIndCb)
17040 {
17041 pMac->sme.pEXTScanIndCb(pCallbackContext,
17042 WDA_EXTSCAN_GET_CACHED_RESULTS_RSP,
17043 pEventData);
17044 }
17045 else
17046 {
17047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17048 "%s:HDD callback is null", __func__);
17049 VOS_ASSERT(0);
17050 }
17051
17052
17053error:
17054
17055 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17056 {
17057 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17058 }
17059 if (pWdaParams->wdaMsgParam != NULL)
17060 {
17061 vos_mem_free(pWdaParams->wdaMsgParam);
17062 }
17063 vos_mem_free(pWdaParams) ;
17064
17065 return;
17066}
17067
17068/*==========================================================================
17069 FUNCTION WDA_EXTScanGetCapabilitiesRspCallback
17070
17071 DESCRIPTION
17072 API to send EXTScan Get Capabilities Response to HDD
17073
17074 PARAMETERS
17075 pEventData: Response from FW
17076 pUserData:
17077===========================================================================*/
17078void WDA_EXTScanGetCapabilitiesRspCallback(void *pEventData, void* pUserData)
17079{
17080 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17081 tWDA_CbContext *pWDA = NULL;
17082 void *pCallbackContext;
17083 tpAniSirGlobal pMac;
17084
17085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17086 "%s:", __func__);
17087 if (NULL == pWdaParams)
17088 {
17089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17090 "%s: pWdaParams received NULL", __func__);
17091 VOS_ASSERT(0);
17092 return;
17093 }
17094
17095 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17096
17097 if (NULL == pWDA)
17098 {
17099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17100 "%s: pWDA received NULL", __func__);
17101 VOS_ASSERT(0);
17102 goto error;
17103 }
17104
17105 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17106 if (NULL == pMac)
17107 {
17108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17109 "%s:pMac is NULL", __func__);
17110 VOS_ASSERT(0);
17111 goto error;
17112 }
17113
17114 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17115
17116 if (pMac->sme.pEXTScanIndCb)
17117 {
17118 pMac->sme.pEXTScanIndCb(pCallbackContext,
17119 WDA_EXTSCAN_GET_CAPABILITIES_RSP,
17120 pEventData);
17121 }
17122 else
17123 {
17124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17125 "%s:HDD callback is null", __func__);
17126 VOS_ASSERT(0);
17127 }
17128
17129
17130error:
17131
17132 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17133 {
17134 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17135 }
17136 if (pWdaParams->wdaMsgParam != NULL)
17137 {
17138 vos_mem_free(pWdaParams->wdaMsgParam);
17139 }
17140 vos_mem_free(pWdaParams) ;
17141
17142 return;
17143}
17144
17145/*==========================================================================
17146 FUNCTION WDA_EXTScanSetBSSIDHotlistRspCallback
17147
17148 DESCRIPTION
17149 API to send EXTScan Set BSSID Hotlist Response to HDD
17150
17151 PARAMETERS
17152 pEventData: Response from FW
17153 pUserData:
17154===========================================================================*/
17155void WDA_EXTScanSetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
17156{
17157 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17158 tWDA_CbContext *pWDA = NULL;
17159 void *pCallbackContext;
17160 tpAniSirGlobal pMac;
17161
17162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17163 "%s: ", __func__);
17164 if (NULL == pWdaParams)
17165 {
17166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17167 "%s: pWdaParams received NULL", __func__);
17168 VOS_ASSERT(0) ;
17169 return;
17170 }
17171
17172 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17173
17174 if (NULL == pWDA)
17175 {
17176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17177 "%s: pWDA received NULL", __func__);
17178 VOS_ASSERT(0);
17179 goto error;
17180 }
17181
17182 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17183 if (NULL == pMac)
17184 {
17185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17186 "%s:pMac is NULL", __func__);
17187 VOS_ASSERT(0);
17188 goto error;
17189 }
17190
17191 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17192
17193 if (pMac->sme.pEXTScanIndCb)
17194 {
17195 pMac->sme.pEXTScanIndCb(pCallbackContext,
17196 WDA_EXTSCAN_SET_BSSID_HOTLIST_RSP,
17197 pEventData);
17198 }
17199 else
17200 {
17201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17202 "%s:HDD callback is null", __func__);
17203 VOS_ASSERT(0);
17204 }
17205
17206
17207error:
17208
17209 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17210 {
17211 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17212 }
17213 if (pWdaParams->wdaMsgParam != NULL)
17214 {
17215 vos_mem_free(pWdaParams->wdaMsgParam);
17216 }
17217 vos_mem_free(pWdaParams) ;
17218
17219 return;
17220}
17221
17222/*==========================================================================
17223 FUNCTION WDA_EXTScanResetBSSIDHotlistRspCallback
17224
17225 DESCRIPTION
17226 API to send EXTScan ReSet BSSID Hotlist Response to HDD
17227
17228 PARAMETERS
17229 pEventData: Response from FW
17230 pUserData:
17231===========================================================================*/
17232void WDA_EXTScanResetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
17233{
17234 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17235 tWDA_CbContext *pWDA = NULL;
17236 void *pCallbackContext;
17237 tpAniSirGlobal pMac;
17238
17239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17240 "%s:", __func__);
17241 if (NULL == pWdaParams)
17242 {
17243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17244 "%s: pWdaParams received NULL", __func__);
17245 VOS_ASSERT(0) ;
17246 return;
17247 }
17248
17249 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17250
17251 if (NULL == pWDA)
17252 {
17253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17254 "%s: pWDA received NULL", __func__);
17255 VOS_ASSERT(0);
17256 goto error;
17257 }
17258
17259 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17260 if (NULL == pMac)
17261 {
17262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17263 "%s:pMac is NULL", __func__);
17264 VOS_ASSERT(0);
17265 goto error;
17266 }
17267
17268 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17269
17270 if (pMac->sme.pEXTScanIndCb)
17271 {
17272 pMac->sme.pEXTScanIndCb(pCallbackContext,
17273 WDA_EXTSCAN_RESET_BSSID_HOTLIST_RSP,
17274 pEventData);
17275 }
17276 else
17277 {
17278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17279 "%s:HDD callback is null", __func__);
17280 VOS_ASSERT(0);
17281 }
17282
17283
17284error:
17285
17286 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17287 {
17288 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17289 }
17290 if (pWdaParams->wdaMsgParam != NULL)
17291 {
17292 vos_mem_free(pWdaParams->wdaMsgParam);
17293 }
17294 vos_mem_free(pWdaParams) ;
17295
17296 return;
17297}
17298
17299/*==========================================================================
17300 FUNCTION WDA_EXTScanSetSignfRSSIChangeRspCallback
17301
17302 DESCRIPTION
17303 API to send EXTScan Set Significant RSSI Change RSP to HDD
17304
17305 PARAMETERS
17306 pEventData: Response from FW
17307 pUserData:
17308===========================================================================*/
17309void WDA_EXTScanSetSignfRSSIChangeRspCallback(void *pEventData, void* pUserData)
17310{
17311 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17312 tWDA_CbContext *pWDA = NULL;
17313 void *pCallbackContext;
17314 tpAniSirGlobal pMac;
17315
17316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17317 "%s:", __func__);
17318 if (NULL == pWdaParams)
17319 {
17320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17321 "%s: pWdaParams received NULL", __func__);
17322 VOS_ASSERT(0) ;
17323 return;
17324 }
17325
17326 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17327
17328 if (NULL == pWDA)
17329 {
17330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17331 "%s: pWDA received NULL", __func__);
17332 VOS_ASSERT(0);
17333 goto error;
17334 }
17335
17336 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17337 if (NULL == pMac)
17338 {
17339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17340 "%s:pMac is NULL", __func__);
17341 VOS_ASSERT(0);
17342 goto error;
17343 }
17344
17345 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17346
17347 if (pMac->sme.pEXTScanIndCb)
17348 {
17349 pMac->sme.pEXTScanIndCb(pCallbackContext,
17350 WDA_EXTSCAN_SET_SIGNF_RSSI_CHANGE_RSP,
17351 pEventData);
17352 }
17353 else
17354 {
17355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17356 "%s:HDD callback is null", __func__);
17357 VOS_ASSERT(0);
17358 }
17359
17360
17361error:
17362
17363 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17364 {
17365 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17366 }
17367 if (pWdaParams->wdaMsgParam != NULL)
17368 {
17369 vos_mem_free(pWdaParams->wdaMsgParam);
17370 }
17371 vos_mem_free(pWdaParams) ;
17372
17373 return;
17374}
17375
17376/*==========================================================================
17377 FUNCTION WDA_EXTScanResetSignfRSSIChangeRspCallback
17378
17379 DESCRIPTION
17380 API to send EXTScan Set Significant RSSI Change RSP to HDD
17381
17382 PARAMETERS
17383 pEventData: Response from FW
17384 pUserData:
17385===========================================================================*/
17386void WDA_EXTScanResetSignfRSSIChangeRspCallback(void *pEventData,
17387 void* pUserData)
17388{
17389 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17390 tWDA_CbContext *pWDA = NULL;
17391 void *pCallbackContext;
17392 tpAniSirGlobal pMac;
17393
17394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17395 "%s:", __func__);
17396 if (NULL == pWdaParams)
17397 {
17398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17399 "%s: pWdaParams received NULL", __func__);
17400 VOS_ASSERT(0) ;
17401 return;
17402 }
17403
17404 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17405
17406 if (NULL == pWDA)
17407 {
17408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17409 "%s: pWDA received NULL", __func__);
17410 VOS_ASSERT(0);
17411 goto error;
17412 }
17413
17414 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17415 if (NULL == pMac)
17416 {
17417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17418 "%s:pMac is NULL", __func__);
17419 VOS_ASSERT(0);
17420 goto error;
17421 }
17422
17423 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17424
17425 if (pMac->sme.pEXTScanIndCb)
17426 {
17427 pMac->sme.pEXTScanIndCb(pCallbackContext,
17428 WDA_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_RSP,
17429 pEventData);
17430 }
17431 else
17432 {
17433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17434 "%s:HDD callback is null", __func__);
17435 VOS_ASSERT(0);
17436 }
17437
17438
17439error:
17440
17441 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17442 {
17443 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17444 }
17445 if (pWdaParams->wdaMsgParam != NULL)
17446 {
17447 vos_mem_free(pWdaParams->wdaMsgParam);
17448 }
17449 vos_mem_free(pWdaParams) ;
17450
17451 return;
17452}
17453
17454/*==========================================================================
17455 FUNCTION WDA_ProcessEXTScanStartReq
17456
17457 DESCRIPTION
17458 API to send EXTScan Start Request to WDI
17459
17460 PARAMETERS
17461 pWDA: Pointer to WDA context
17462 wdaRequest: Pointer to EXTScan req parameters
17463===========================================================================*/
17464VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
17465 tSirEXTScanStartReqParams *wdaRequest)
17466{
17467 WDI_Status status = WDI_STATUS_SUCCESS;
17468 tWDA_ReqParams *pWdaParams;
17469
17470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17471 "%s: ", __func__);
17472 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17473 if (NULL == pWdaParams)
17474 {
17475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17476 "%s: VOS MEM Alloc Failure", __func__);
17477 VOS_ASSERT(0);
17478 return VOS_STATUS_E_NOMEM;
17479 }
17480 pWdaParams->pWdaContext = pWDA;
17481 pWdaParams->wdaMsgParam = wdaRequest;
17482 pWdaParams->wdaWdiApiMsgParam = NULL;
17483
17484 status = WDI_EXTScanStartReq((void *)wdaRequest,
17485 (WDI_EXTScanStartRspCb)WDA_EXTScanStartRspCallback,
17486 (void *)pWdaParams);
17487 if (IS_WDI_STATUS_FAILURE(status))
17488 {
17489 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17490 "Failure to request. Free all the memory " );
17491 vos_mem_free(pWdaParams->wdaMsgParam);
17492 vos_mem_free(pWdaParams);
17493 }
17494 return CONVERT_WDI2VOS_STATUS(status);
17495}
17496
17497/*==========================================================================
17498 FUNCTION WDA_ProcessEXTScanStopReq
17499
17500 DESCRIPTION
17501 API to send EXTScan Start Request to WDI
17502
17503 PARAMETERS
17504 pWDA: Pointer to WDA context
17505 wdaRequest: Pointer to EXTScan req parameters
17506===========================================================================*/
17507VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
17508 tSirEXTScanStopReqParams *wdaRequest)
17509{
17510 WDI_Status status = WDI_STATUS_SUCCESS;
17511 tWDA_ReqParams *pWdaParams;
17512
17513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17514 "%s:", __func__);
17515 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17516 if (NULL == pWdaParams)
17517 {
17518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17519 "%s: VOS MEM Alloc Failure", __func__);
17520 VOS_ASSERT(0);
17521 return VOS_STATUS_E_NOMEM;
17522 }
17523 pWdaParams->pWdaContext = pWDA;
17524 pWdaParams->wdaMsgParam = wdaRequest;
17525 pWdaParams->wdaWdiApiMsgParam = NULL;
17526
17527 status = WDI_EXTScanStopReq((void *)wdaRequest,
17528 (WDI_EXTScanStopRspCb)WDA_EXTScanStopRspCallback,
17529 (void *)pWdaParams);
17530 if (IS_WDI_STATUS_FAILURE(status))
17531 {
17532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17533 "Failure to request. Free all the memory " );
17534 vos_mem_free(pWdaParams->wdaMsgParam);
17535 vos_mem_free(pWdaParams);
17536 }
17537 return CONVERT_WDI2VOS_STATUS(status);
17538}
17539
17540/*==========================================================================
17541 FUNCTION WDA_ProcessEXTScanGetCachedResultsReq
17542
17543 DESCRIPTION
17544 API to send EXTScan Get Cached Results Request to WDI
17545
17546 PARAMETERS
17547 pWDA: Pointer to WDA context
17548 wdaRequest: Pointer to EXTScan req parameters
17549===========================================================================*/
17550VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
17551 tSirEXTScanGetCachedResultsReqParams *wdaRequest)
17552{
17553 WDI_Status status = WDI_STATUS_SUCCESS;
17554 tWDA_ReqParams *pWdaParams;
17555
17556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17557 "%s: ", __func__);
17558 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17559 if (NULL == pWdaParams)
17560 {
17561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17562 "%s: VOS MEM Alloc Failure", __func__);
17563 VOS_ASSERT(0);
17564 return VOS_STATUS_E_NOMEM;
17565 }
17566 pWdaParams->pWdaContext = pWDA;
17567 pWdaParams->wdaMsgParam = wdaRequest;
17568 pWdaParams->wdaWdiApiMsgParam = NULL;
17569
17570 status = WDI_EXTScanGetCachedResultsReq((void *)wdaRequest,
17571 (WDI_EXTScanGetCachedResultsRspCb)WDA_EXTScanGetCachedResultsRspCallback,
17572 (void *)pWdaParams);
17573 if (IS_WDI_STATUS_FAILURE(status))
17574 {
17575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17576 "Failure to request. Free all the memory " );
17577 vos_mem_free(pWdaParams->wdaMsgParam);
17578 vos_mem_free(pWdaParams);
17579 }
17580 return CONVERT_WDI2VOS_STATUS(status);
17581}
17582
17583/*==========================================================================
17584 FUNCTION WDA_ProcessEXTScanGetCapabilitiesReq
17585
17586 DESCRIPTION
17587 API to send EXTScan Get Capabilities Request to WDI
17588
17589 PARAMETERS
17590 pWDA: Pointer to WDA context
17591 wdaRequest: Pointer to EXTScan req parameters
17592===========================================================================*/
17593VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
17594 tSirGetEXTScanCapabilitiesReqParams *wdaRequest)
17595{
17596 WDI_Status status = WDI_STATUS_SUCCESS;
17597 tWDA_ReqParams *pWdaParams;
17598
17599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17600 "%s:", __func__);
17601 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17602 if (NULL == pWdaParams)
17603 {
17604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17605 "%s: VOS MEM Alloc Failure", __func__);
17606 VOS_ASSERT(0);
17607 return VOS_STATUS_E_NOMEM;
17608 }
17609 pWdaParams->pWdaContext = pWDA;
17610 pWdaParams->wdaMsgParam = wdaRequest;
17611 pWdaParams->wdaWdiApiMsgParam = NULL;
17612
17613 status = WDI_EXTScanGetCapabilitiesReq((void *)wdaRequest,
17614 (WDI_EXTScanGetCapabilitiesRspCb)WDA_EXTScanGetCapabilitiesRspCallback,
17615 (void *)pWdaParams);
17616 if (IS_WDI_STATUS_FAILURE(status))
17617 {
17618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17619 "Failure to request. Free all the memory " );
17620 vos_mem_free(pWdaParams->wdaMsgParam);
17621 vos_mem_free(pWdaParams);
17622 }
17623 return CONVERT_WDI2VOS_STATUS(status);
17624}
17625
17626/*==========================================================================
17627 FUNCTION WDA_ProcessEXTScanSetBSSIDHotlistReq
17628
17629 DESCRIPTION
17630 API to send Set BSSID Hotlist Request to WDI
17631
17632 PARAMETERS
17633 pWDA: Pointer to WDA context
17634 wdaRequest: Pointer to EXTScan req parameters
17635===========================================================================*/
17636VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
17637 tSirEXTScanSetBssidHotListReqParams *wdaRequest)
17638{
17639 WDI_Status status = WDI_STATUS_SUCCESS;
17640 tWDA_ReqParams *pWdaParams;
17641
17642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17643 "%s: ", __func__);
17644 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17645 if (NULL == pWdaParams)
17646 {
17647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17648 "%s: VOS MEM Alloc Failure", __func__);
17649 VOS_ASSERT(0);
17650 return VOS_STATUS_E_NOMEM;
17651 }
17652 pWdaParams->pWdaContext = pWDA;
17653 pWdaParams->wdaMsgParam = wdaRequest;
17654 pWdaParams->wdaWdiApiMsgParam = NULL;
17655
17656 status = WDI_EXTScanSetBSSIDHotlistReq((void *)wdaRequest,
17657 (WDI_EXTScanSetBSSIDHotlistRspCb)WDA_EXTScanSetBSSIDHotlistRspCallback,
17658 (void *)pWdaParams);
17659 if (IS_WDI_STATUS_FAILURE(status))
17660 {
17661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17662 "Failure to request. Free all the memory " );
17663 vos_mem_free(pWdaParams->wdaMsgParam);
17664 vos_mem_free(pWdaParams);
17665 }
17666 return CONVERT_WDI2VOS_STATUS(status);
17667}
17668
17669/*==========================================================================
17670 FUNCTION WDA_ProcessEXTScanReSetBSSIDHotlistReq
17671
17672 DESCRIPTION
17673 API to send Reset BSSID Hotlist Request to WDI
17674
17675 PARAMETERS
17676 pWDA: Pointer to WDA context
17677 wdaRequest: Pointer to EXTScan req parameters
17678===========================================================================*/
17679VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
17680 tSirEXTScanResetBssidHotlistReqParams *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_EXTScanResetBSSIDHotlistReq((void *)wdaRequest,
17700 (WDI_EXTScanResetBSSIDHotlistRspCb)WDA_EXTScanResetBSSIDHotlistRspCallback,
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_ProcessEXTScanSetSignfRSSIChangeReq
17714
17715 DESCRIPTION
17716 API to send Set Significant RSSI Change Request to WDI
17717
17718 PARAMETERS
17719 pWDA: Pointer to WDA context
17720 wdaRequest: Pointer to EXTScan req parameters
17721===========================================================================*/
17722VOS_STATUS WDA_ProcessEXTScanSetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
17723 tSirEXTScanSetSignificantChangeReqParams *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_EXTScanSetSignfRSSIChangeReq((void *)wdaRequest,
17743 (WDI_EXTScanSetSignfRSSIChangeRspCb)WDA_EXTScanSetSignfRSSIChangeRspCallback,
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_ProcessEXTScanResetSignfRSSIChangeReq
17757
17758 DESCRIPTION
17759 API to send Reset Significant RSSI Change Request to WDI
17760
17761 PARAMETERS
17762 pWDA: Pointer to WDA context
17763 wdaRequest: Pointer to EXTScan req parameters
17764===========================================================================*/
17765VOS_STATUS WDA_ProcessEXTScanResetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
17766 tSirEXTScanResetSignificantChangeReqParams *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_EXTScanResetSignfRSSIChangeReq((void *)wdaRequest,
17786 (WDI_EXTScanResetSignfRSSIChangeRspCb)
17787 WDA_EXTScanResetSignfRSSIChangeRspCallback,
17788 (void *)pWdaParams);
17789 if (IS_WDI_STATUS_FAILURE(status))
17790 {
17791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17792 "Failure to request. Free all the memory " );
17793 vos_mem_free(pWdaParams->wdaMsgParam);
17794 vos_mem_free(pWdaParams);
17795 }
17796 return CONVERT_WDI2VOS_STATUS(status);
17797}
17798#endif /* WLAN_FEATURE_EXTSCAN */
17799
Sunil Duttbd736ed2014-05-26 21:19:41 +053017800#ifdef WLAN_FEATURE_LINK_LAYER_STATS
17801
17802/*==========================================================================
17803 FUNCTION WDA_LLStatsSetRspCallback
17804
17805 DESCRIPTION
17806 API to process set link layer statistics response from FW
17807
17808 PARAMETERS
17809 pRsp: Pointer to set link layer statistics response
17810 pUserData: Pointer to user data
17811
17812 RETURN VALUE
17813 NONE
17814
17815===========================================================================*/
17816void WDA_LLStatsSetRspCallback(void *pEventData, void* pUserData)
17817{
17818 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17819
17820
17821 if (NULL == pWdaParams)
17822 {
17823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17824 "%s: pWdaParams received NULL", __func__);
17825 VOS_ASSERT(0) ;
17826 return ;
17827 }
17828
17829 /* Do not need to send notification to upper layer
17830 * Just free allocated resources */
17831 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17832 {
17833 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17834 }
17835 if (pWdaParams->wdaMsgParam != NULL)
17836 {
17837 vos_mem_free(pWdaParams->wdaMsgParam);
17838 }
17839 vos_mem_free(pWdaParams) ;
17840
17841 return;
17842}
17843
17844/*==========================================================================
17845 FUNCTION WDA_ProcessLLStatsSetReq
17846
17847 DESCRIPTION
17848 API to send Set Link Layer Stats request to WDI
17849
17850 PARAMETERS
17851 pWDA: Pointer to WDA context
17852 wdaRequest: Pointer to set Link Layer Stats req parameters
17853===========================================================================*/
17854VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
17855 tSirLLStatsSetReq *wdaRequest)
17856{
17857 WDI_Status status = WDI_STATUS_SUCCESS;
17858 tWDA_ReqParams *pWdaParams;
17859
17860 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17861 if (NULL == pWdaParams)
17862 {
17863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17864 "%s: VOS MEM Alloc Failure", __func__);
17865 VOS_ASSERT(0);
17866 return VOS_STATUS_E_NOMEM;
17867 }
17868 pWdaParams->pWdaContext = pWDA;
17869 pWdaParams->wdaMsgParam = wdaRequest;
17870 pWdaParams->wdaWdiApiMsgParam = NULL;
17871
17872 status = WDI_LLStatsSetReq((void *)wdaRequest,
17873 (WDI_LLStatsSetRspCb)WDA_LLStatsSetRspCallback,
17874 (void *)pWdaParams);
17875 if (IS_WDI_STATUS_FAILURE(status))
17876 {
17877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17878 "Failure to request. Free all the memory " );
17879 vos_mem_free(pWdaParams->wdaMsgParam);
17880 vos_mem_free(pWdaParams);
17881 }
17882 return CONVERT_WDI2VOS_STATUS(status);
17883}
17884
17885/*==========================================================================
17886 FUNCTION WDA_LLStatsGetRspCallback
17887
17888 DESCRIPTION
17889 API to process get link layer statistics response from FW
17890
17891 PARAMETERS
17892 pRsp: Pointer to get link layer statistics response
17893 pUserData: Pointer to user data
17894
17895 RETURN VALUE
17896 NONE
17897
17898===========================================================================*/
17899void WDA_LLStatsGetRspCallback(void *pEventData, void* pUserData)
17900{
17901 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17902
17903 if (NULL == pWdaParams)
17904 {
17905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17906 "%s: pWdaParams received NULL", __func__);
17907 VOS_ASSERT(0) ;
17908 return ;
17909 }
17910
17911 /* Do not need to send notification to upper layer
17912 * Just free allocated resources */
17913 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17914 {
17915 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17916 }
17917 if (pWdaParams->wdaMsgParam != NULL)
17918 {
17919 vos_mem_free(pWdaParams->wdaMsgParam);
17920 }
17921 vos_mem_free(pWdaParams) ;
17922
17923 return;
17924}
17925
17926/*==========================================================================
17927 FUNCTION WDA_ProcessLLStatsGetReq
17928
17929 DESCRIPTION
17930 API to send Get Link Layer Stats request to WDI
17931
17932 PARAMETERS
17933 pWDA: Pointer to WDA context
17934 wdaRequest: Pointer to get Link Layer Stats req parameters
17935===========================================================================*/
17936VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
17937 tSirLLStatsGetReq *wdaRequest)
17938{
17939 WDI_Status status = WDI_STATUS_SUCCESS;
17940 tWDA_ReqParams *pWdaParams;
17941
17942 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17943 if (NULL == pWdaParams)
17944 {
17945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17946 "%s: VOS MEM Alloc Failure", __func__);
17947 VOS_ASSERT(0);
17948 return VOS_STATUS_E_NOMEM;
17949 }
17950 pWdaParams->pWdaContext = pWDA;
17951 pWdaParams->wdaMsgParam = wdaRequest;
17952 pWdaParams->wdaWdiApiMsgParam = NULL;
17953
17954 status = WDI_LLStatsGetReq((void *) wdaRequest,
17955 (WDI_LLStatsGetRspCb)WDA_LLStatsGetRspCallback,
17956 (void *)pWdaParams);
17957 if (IS_WDI_STATUS_FAILURE(status))
17958 {
17959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17960 "Failure to request. Free all the memory " );
17961 vos_mem_free(pWdaParams->wdaMsgParam);
17962 vos_mem_free(pWdaParams);
17963 }
17964 return CONVERT_WDI2VOS_STATUS(status);
17965}
17966
17967/*==========================================================================
17968 FUNCTION WDA_LLStatsClearRspCallback
17969
17970 DESCRIPTION
17971 API to process clear link layer statistics response from FW
17972
17973 PARAMETERS
17974 pRsp: Pointer to clear link layer statistics response
17975 pUserData: Pointer to user data
17976
17977 RETURN VALUE
17978 NONE
17979
17980===========================================================================*/
17981void WDA_LLStatsClearRspCallback(void *pEventData, void* pUserData)
17982{
17983 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17984
17985
17986 if (NULL == pWdaParams)
17987 {
17988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17989 "%s: pWdaParams received NULL", __func__);
17990 VOS_ASSERT(0) ;
17991 return ;
17992 }
17993 /* Do not need to send notification to upper layer
17994 * Just free allocated resources */
17995 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17996 {
17997 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17998 }
17999 if (pWdaParams->wdaMsgParam != NULL)
18000 {
18001 vos_mem_free(pWdaParams->wdaMsgParam);
18002 }
18003 vos_mem_free(pWdaParams) ;
18004 return;
18005}
18006
18007/*==========================================================================
18008 FUNCTION WDA_ProcessLLStatsClearReq
18009
18010 DESCRIPTION
18011 API to send Clear Link Layer Stats request to WDI
18012
18013 PARAMETERS
18014 pWDA: Pointer to WDA context
18015 wdaRequest: Pointer to earLink Layer Stats req
18016===========================================================================*/
18017VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
18018 tSirLLStatsClearReq *wdaRequest)
18019{
18020 WDI_Status status = WDI_STATUS_SUCCESS;
18021 tWDA_ReqParams *pWdaParams;
18022
18023 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18024 if (NULL == pWdaParams)
18025 {
18026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18027 "%s: VOS MEM Alloc Failure", __func__);
18028 VOS_ASSERT(0);
18029 return VOS_STATUS_E_NOMEM;
18030 }
18031 pWdaParams->pWdaContext = pWDA;
18032 pWdaParams->wdaMsgParam = wdaRequest;
18033 pWdaParams->wdaWdiApiMsgParam = NULL;
18034
18035 status = WDI_LLStatsClearReq((void *) wdaRequest,
18036 (WDI_LLStatsClearRspCb)WDA_LLStatsClearRspCallback,
18037 (void *)pWdaParams);
18038 if (IS_WDI_STATUS_FAILURE(status))
18039 {
18040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18041 "Failure to request. Free all the memory " );
18042 vos_mem_free(pWdaParams->wdaMsgParam);
18043 vos_mem_free(pWdaParams);
18044 }
18045 return CONVERT_WDI2VOS_STATUS(status);
18046}
18047
18048#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Abhishek Singh85b74712014-10-08 11:38:19 +053018049
Abhishek Singh85b74712014-10-08 11:38:19 +053018050void WDA_FWStatsGetRspCallback(WDI_Status status,void *fwStatsResp,void *pUserData)
18051{
18052 tSirFWStatsInfo *fwStatsinfo = (tSirFWStatsInfo *)pUserData;
18053
18054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18055 "<------ %s " ,__func__);
18056 if (NULL == fwStatsinfo)
18057 {
18058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18059 "%s: pWdaParams received NULL", __func__);
18060 VOS_ASSERT(0);
18061 return;
18062 }
18063
18064 if(fwStatsinfo->callback)
18065 fwStatsinfo->callback(status, fwStatsResp, fwStatsinfo->data);
18066
18067 vos_mem_free(pUserData);
18068 return;
18069}
18070
18071
18072v_VOID_t WDA_ProcessFWStatsGetReq(tWDA_CbContext *pWDA,
18073 tSirFWStatsGetReq *pData)
18074{
18075
18076 WDI_Status wdiStatus;
18077 tSirFWStatsInfo *fwStatsinfo;
18078
18079 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18080 "------> %s" , __func__);
18081
18082 fwStatsinfo =
18083 (tSirFWStatsInfo *)vos_mem_malloc(sizeof(tSirFWStatsInfo));
18084 if (NULL == fwStatsinfo)
18085 {
18086 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18087 "%s: VOS MEM Alloc Failure", __func__);
18088 VOS_ASSERT(0);
18089 vos_mem_free(pData);
18090 return;
18091 }
18092
18093 fwStatsinfo->callback = (tSirFWStatsCallback)(pData->callback);
18094 fwStatsinfo->data = pData->data;
18095
18096 wdiStatus = WDI_FWStatsGetReq(fwStatsinfo,
18097 WDA_FWStatsGetRspCallback,
18098 pData->stats);
18099 if (WDI_STATUS_PENDING == wdiStatus)
18100 {
18101 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18102 "Pending received for %s:%d ", __func__, __LINE__);
18103 }
18104 else if (WDI_STATUS_SUCCESS != wdiStatus)
18105 {
18106 if (fwStatsinfo->callback)
18107 {
18108 fwStatsinfo->callback(WDI_STATUS_E_FAILURE, NULL ,fwStatsinfo->data);
18109 }
18110 vos_mem_free(fwStatsinfo);
18111 }
18112 vos_mem_free(pData);
18113}
18114
Srinivas Dasari4dae48f2014-11-26 21:14:16 +053018115/*==========================================================================
18116 FUNCTION WDA_EncryptMsgRspCallback
18117
18118 DESCRIPTION
18119 API to send Encrypt message response to HDD
18120
18121 PARAMETERS
18122 pEventData: Response from FW
18123 pUserData: Data sent to firmware as part of request
18124===========================================================================*/
18125void WDA_EncryptMsgRspCallback(WDI_Status status, void *pEventData,
18126 void* pUserData)
18127{
18128 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
18129 tWDA_CbContext *pWDA = NULL;
18130 tpAniSirGlobal pMac;
18131 vos_msg_t vosMsg;
18132 tpSirEncryptedDataRspParams pEncRspParams;
18133 tpSetEncryptedDataRspParams pEncryptedDataRsp;
18134
18135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18136 FL("%s:"), __func__);
18137 if (NULL == pWdaParams)
18138 {
18139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18140 FL("%s: pWdaParams received NULL"), __func__);
18141 VOS_ASSERT(0);
18142 return;
18143 }
18144
18145 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
18146
18147 if (NULL == pWDA)
18148 {
18149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18150 FL("%s: pWDA received NULL"), __func__);
18151 VOS_ASSERT(0);
18152 goto error;
18153 }
18154
18155 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
18156 if (NULL == pMac)
18157 {
18158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18159 FL("%s:pMac is NULL"), __func__);
18160 VOS_ASSERT(0);
18161 goto error;
18162 }
18163
18164 pEncryptedDataRsp = (tpSetEncryptedDataRspParams) pEventData;
18165
18166 pEncRspParams = vos_mem_malloc(sizeof(tSirEncryptedDataRspParams));
18167 if (NULL == pEncRspParams)
18168 {
18169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18170 FL("%s: VOS MEM Alloc Failure"), __func__);
18171 VOS_ASSERT(0);
18172 goto error;
18173 }
18174
18175 /* Message Header */
18176 pEncRspParams->mesgType = eWNI_SME_ENCRYPT_MSG_RSP;
18177 pEncRspParams->mesgLen = sizeof(tSirEncryptedDataRspParams);
18178 pEncRspParams->encryptedDataRsp.encryptedPayload.length =
18179 pEncryptedDataRsp->encryptedPayload.length;
18180 vos_mem_copy(pEncRspParams->encryptedDataRsp.encryptedPayload.data,
18181 pEncryptedDataRsp->encryptedPayload.data,
18182 pEncryptedDataRsp->encryptedPayload.length);
18183
18184 /* VOS message wrapper */
18185 vosMsg.type = eWNI_SME_ENCRYPT_MSG_RSP;
18186 vosMsg.bodyptr = (void *)pEncRspParams;
18187 vosMsg.bodyval = 0;
18188
18189 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
18190 {
18191 /* free the mem */
18192 vos_mem_free((v_VOID_t *) pEncRspParams);
18193 }
18194
18195error:
18196
18197 if (pWdaParams->wdaWdiApiMsgParam != NULL)
18198 {
18199 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
18200 }
18201 if (pWdaParams->wdaMsgParam != NULL)
18202 {
18203 vos_mem_free(pWdaParams->wdaMsgParam);
18204 }
18205 vos_mem_free(pWdaParams) ;
18206
18207 return;
18208}
18209/*==========================================================================
18210 FUNCTION WDA_ProcessEncryptMsgReq
18211
18212 DESCRIPTION
18213 API to send Encrypt message Request to WDI
18214
18215 PARAMETERS
18216 pWDA: Pointer to WDA context
18217 wdaRequest: Pointer to Encrypt_msg req parameters
18218===========================================================================*/
18219VOS_STATUS WDA_ProcessEncryptMsgReq(tWDA_CbContext *pWDA,
18220 u8 *wdaRequest)
18221{
18222 WDI_Status status = WDI_STATUS_SUCCESS;
18223 tWDA_ReqParams *pWdaParams;
18224
18225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
18226 FL("%s: "), __func__);
18227 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
18228 if (NULL == pWdaParams)
18229 {
18230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18231 FL("%s: VOS MEM Alloc Failure"), __func__);
18232 VOS_ASSERT(0);
18233 return VOS_STATUS_E_NOMEM;
18234 }
18235 pWdaParams->pWdaContext = pWDA;
18236 pWdaParams->wdaMsgParam = wdaRequest;
18237 pWdaParams->wdaWdiApiMsgParam = NULL;
18238
18239 status = WDI_EncryptMsgReq((void *)wdaRequest,
18240 (WDI_EncryptMsgRspCb)WDA_EncryptMsgRspCallback,
18241 (void *)pWdaParams);
18242 if (IS_WDI_STATUS_FAILURE(status))
18243 {
18244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
18245 FL("Failure to request. Free all the memory " ));
18246 vos_mem_free(pWdaParams->wdaMsgParam);
18247 vos_mem_free(pWdaParams);
18248 }
18249 return CONVERT_WDI2VOS_STATUS(status);
18250}