blob: 4eeb04a3c332ab7972dbbcbaf477a0445e32c248 [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 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700255/*
256 * FUNCTION: WDA_open
257 * Allocate the WDA context
258 */
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530259VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t devHandle,
Jeff Johnson295189b2012-06-20 16:38:30 -0700260 tMacOpenParameters *pMacParams )
261{
262 tWDA_CbContext *wdaContext;
263 VOS_STATUS status;
264 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700265 /* Allocate WDA context */
266 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
267 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
268 if(!VOS_IS_STATUS_SUCCESS(status))
269 {
270 return VOS_STATUS_E_NOMEM;
271 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700272 /*__asm int 3;*/
273 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
274
275 /* Initialize data structures */
276 wdaContext->pVosContext = pVosContext;
277 wdaContext->wdaState = WDA_INIT_STATE;
278 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
279
280 /* Initialize WDA-WDI synchronization event */
281 status = vos_event_init(&wdaContext->wdaWdiEvent);
282 if(!VOS_IS_STATUS_SUCCESS(status))
283 {
284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800285 "WDI Sync Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800286 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700287 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700288 /* Init Frame transfer event */
289 status = vos_event_init(&wdaContext->txFrameEvent);
290 if(!VOS_IS_STATUS_SUCCESS(status))
291 {
292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800293 "VOS Mgmt Frame Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800294 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700295 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700296 status = vos_event_init(&wdaContext->suspendDataTxEvent);
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 suspend data tx 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->waitOnWdiIndicationCallBack);
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 wait On Wdi Ind 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 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700311 wdaContext->driverMode = pMacParams->driverType;
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530312 if(WDI_STATUS_SUCCESS != WDI_Init(devHandle, &wdaContext->pWdiContext,
Jeff Johnson295189b2012-06-20 16:38:30 -0700313 &wdiDevCapability, pMacParams->driverType))
314 {
315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
316 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800317 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700318 }
319 else
320 {
321 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
322 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
323 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700324 /* update max STA in WDA used for BA */
325 wdaContext->wdaMaxSta = pMacParams->maxStation;
326 /* store the frameTransRequired flag in wdaContext, to send this to HAL
327 * in WDA_Start
328 */
329 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
330 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700331 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800332
333error:
334 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
335 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700336}
337
Jeff Johnson295189b2012-06-20 16:38:30 -0700338/*
339 * FUNCTION: WDA_preStart
340 * Trigger DAL-AL to start CFG download
341 */
342VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
343{
344 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
345 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700346 /*
347 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
348 */
349 wdaMsg.type = WNI_CFG_DNLD_REQ ;
350 wdaMsg.bodyptr = NULL;
351 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700352 /* post the message.. */
353 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
354 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
355 {
356 vosStatus = VOS_STATUS_E_BADMSG;
357 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700358 return( vosStatus );
359}
Jeff Johnson295189b2012-06-20 16:38:30 -0700360/*
361 * FUNCTION: WDA_wdiStartCallback
362 * Once WDI_Start is finished, WDI start callback will be called by WDI
363 * to indicate completion of WDI_Start.
364 */
365void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
366 void *pVosContext)
367{
368 tWDA_CbContext *wdaContext;
369 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700370 if (NULL == pVosContext)
371 {
372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700373 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700374 return;
375 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700376 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
377 if (NULL == wdaContext)
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 wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700381 return;
382 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700383 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
384 {
385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700386 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700387 }
388 else
389 {
390 wdaContext->wdaState = WDA_START_STATE;
391 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700392 /* extract and save version information from the Start Response */
393 wdaContext->wcnssWlanCompiledVersion.major =
394 wdiRspParams->wlanCompiledVersion.major;
395 wdaContext->wcnssWlanCompiledVersion.minor =
396 wdiRspParams->wlanCompiledVersion.minor;
397 wdaContext->wcnssWlanCompiledVersion.version =
398 wdiRspParams->wlanCompiledVersion.version;
399 wdaContext->wcnssWlanCompiledVersion.revision =
400 wdiRspParams->wlanCompiledVersion.revision;
401 wdaContext->wcnssWlanReportedVersion.major =
402 wdiRspParams->wlanReportedVersion.major;
403 wdaContext->wcnssWlanReportedVersion.minor =
404 wdiRspParams->wlanReportedVersion.minor;
405 wdaContext->wcnssWlanReportedVersion.version =
406 wdiRspParams->wlanReportedVersion.version;
407 wdaContext->wcnssWlanReportedVersion.revision =
408 wdiRspParams->wlanReportedVersion.revision;
409 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
410 wdiRspParams->wcnssSoftwareVersion,
411 sizeof(wdaContext->wcnssSoftwareVersionString));
412 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
413 wdiRspParams->wcnssHardwareVersion,
414 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700415 /* Notify WDA_start that WDI_Start has completed */
416 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700417 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700418 {
419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700420 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700421 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700422 return;
423}
424
Jeff Johnson295189b2012-06-20 16:38:30 -0700425/*
426 * FUNCTION: WDA_start
427 * Prepare TLV configuration and call WDI_Start.
428 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700429VOS_STATUS WDA_start(v_PVOID_t pVosContext)
430{
431 tWDA_CbContext *wdaContext;
432 VOS_STATUS status;
433 WDI_Status wdiStatus;
434 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700435 if (NULL == pVosContext)
436 {
437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700438 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700439 return VOS_STATUS_E_FAILURE;
440 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700441 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
442 if (NULL == wdaContext)
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 wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700446 return VOS_STATUS_E_FAILURE;
447 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700448 /* Non-FTM mode, WDA status for START must be INIT
449 * FTM mode, WDA Status for START can be INIT or STOP */
450 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
451 (WDA_STOP_STATE != wdaContext->wdaState) )
452 {
453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
454 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700455 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700456 return VOS_STATUS_E_FAILURE;
457 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700458 /* initialize the wdiStartParam. Note that we can create this on
459 the stack since we won't exit until WDI_Start() completes or
460 times out */
461 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700462 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700463 /* prepare the config TLV for the WDI */
464 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
465 if ( !VOS_IS_STATUS_SUCCESS(status) )
466 {
467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700468 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700469 return VOS_STATUS_E_FAILURE;
470 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700471 /* note from here onwards if an error occurs we must
472 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700473 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
474 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
475 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700476 /* initialize the WDA-WDI synchronization event */
477 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700478 /* call WDI start */
479 wdiStatus = WDI_Start(&wdiStartParam,
480 (WDI_StartRspCb)WDA_wdiStartCallback,
481 (v_VOID_t *)pVosContext);
482 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
483 {
484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700485 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700486 vos_mem_free(wdiStartParam.pConfigBuffer);
487 return VOS_STATUS_E_FAILURE;
488 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700489 /* wait for WDI start to invoke our callback */
490 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
491 WDA_WDI_START_TIMEOUT );
492 if ( !VOS_IS_STATUS_SUCCESS(status) )
493 {
494 if ( VOS_STATUS_E_TIMEOUT == status )
495 {
496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700497 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700498 }
499 else
500 {
501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
502 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700503 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700504 }
505 vos_mem_free(wdiStartParam.pConfigBuffer);
Siddharth Bhalbea38ad2014-10-12 14:10:52 +0530506 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700507 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700508 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700509 /* we no longer need the config TLV */
510 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700511 /* if we are not in the START state then WDI_Start() failed */
512 if (WDA_START_STATE != wdaContext->wdaState)
513 {
514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700515 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700516 return VOS_STATUS_E_FAILURE;
517 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700518 /* FTM mode does not need to monitor BA activity */
519 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
520 {
521 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800522 if(VOS_STATUS_SUCCESS == status)
523 {
524 wdaContext->wdaTimersCreated = VOS_TRUE;
525 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700526 }
Leo Chang9d76f622013-08-23 16:34:52 -0700527 else
528 {
529 vos_event_init(&wdaContext->ftmStopDoneEvent);
530 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700531 return status;
532}
533
Jeff Johnson295189b2012-06-20 16:38:30 -0700534/*
535 * FUNCTION: WDA_prepareConfigTLV
536 * Function to prepare CFG for DAL(WDA)
537 */
538VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
539 WDI_StartReqParamsType *wdiStartParams )
540{
541 /* get pMac to acess CFG data base */
542 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
543 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
544 tHalCfg *tlvStruct = NULL ;
545 tANI_U8 *tlvStructStart = NULL ;
546 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
547 v_PVOID_t *configParam;
548 tANI_U32 configParamSize;
549 tANI_U32 *configDataValue;
550 WDI_WlanVersionType wcnssCompiledApiVersion;
Wilson Tsaof8b37942013-09-06 10:49:00 -0700551 tANI_U8 i;
552
Jeff Johnson295189b2012-06-20 16:38:30 -0700553 if ((NULL == pMac)||(NULL == wdaContext))
554 {
555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700556 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700557 VOS_ASSERT(0);
558 return VOS_STATUS_E_FAILURE;
559 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700560 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
561 WNI_CFG_STA_ID_LEN +
562 WNI_CFG_EDCA_WME_ACBK_LEN +
563 WNI_CFG_EDCA_WME_ACBE_LEN +
564 WNI_CFG_EDCA_WME_ACVI_LEN +
565 WNI_CFG_EDCA_WME_ACVO_LEN +
566 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700567 /* malloc memory for all configs in one shot */
568 configParam = vos_mem_malloc(configParamSize);
569
570 if(NULL == configParam )
571 {
572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700573 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700574 VOS_ASSERT(0) ;
575 return VOS_STATUS_E_NOMEM;
576 }
577 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700578 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700579 tlvStruct = (tHalCfg *)configParam;
580 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700581 /* TODO: Remove Later */
582 /* QWLAN_HAL_CFG_STA_ID */
583 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
584 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
585 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
586 eSIR_SUCCESS)
587 {
588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
589 "Failed to get value for WNI_CFG_STA_ID");
590 goto handle_failure;
591 }
592 tlvStruct->length = strLength ;
593 /* calculate the pad bytes to have the CFG in aligned format */
594 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
595 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700596 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
597 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700598 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
599 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
600 tlvStruct->length = sizeof(tANI_U32);
601 configDataValue = (tANI_U32 *)(tlvStruct + 1);
602 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
603 != eSIR_SUCCESS)
604 {
605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
606 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
607 goto handle_failure;
608 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700609 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
610 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700611 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
612 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
613 tlvStruct->length = sizeof(tANI_U32);
614 configDataValue = (tANI_U32 *)(tlvStruct + 1);
615 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
616 eSIR_SUCCESS)
617 {
618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
619 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
620 goto handle_failure;
621 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700622 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
623 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700624 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
625 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
626 tlvStruct->length = sizeof(tANI_U32);
627 configDataValue = (tANI_U32 *)(tlvStruct + 1);
628 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
629 != eSIR_SUCCESS)
630 {
631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
632 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
633 goto handle_failure;
634 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700635 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
636 + sizeof(tHalCfg) + tlvStruct->length)) ;
637
638 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
639 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
640 tlvStruct->length = sizeof(tANI_U32);
641 configDataValue = (tANI_U32 *)(tlvStruct + 1);
642 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
643 configDataValue ) != eSIR_SUCCESS)
644 {
645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
646 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
647 goto handle_failure;
648 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700649 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
650 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700651 /* QWLAN_HAL_CFG_CAL_PERIOD */
652 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
653 tlvStruct->length = sizeof(tANI_U32);
654 configDataValue = (tANI_U32 *)(tlvStruct + 1);
655 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
656 != eSIR_SUCCESS)
657 {
658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
659 "Failed to get value for WNI_CFG_CAL_PERIOD");
660 goto handle_failure;
661 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700662 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
663 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700664 /* QWLAN_HAL_CFG_CAL_CONTROL */
665 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
666 tlvStruct->length = sizeof(tANI_U32);
667 configDataValue = (tANI_U32 *)(tlvStruct + 1);
668 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
669 != eSIR_SUCCESS)
670 {
671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
672 "Failed to get value for WNI_CFG_CAL_CONTROL");
673 goto handle_failure;
674 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700675 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
676 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700677 /* QWLAN_HAL_CFG_PROXIMITY */
678 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
679 tlvStruct->length = sizeof(tANI_U32);
680 configDataValue = (tANI_U32 *)(tlvStruct + 1);
681 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
682 != eSIR_SUCCESS)
683 {
684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
685 "Failed to get value for WNI_CFG_PROXIMITY");
686 goto handle_failure;
687 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700688 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
689 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700690 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
691 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
692 tlvStruct->length = sizeof(tANI_U32);
693 configDataValue = (tANI_U32 *)(tlvStruct + 1);
694 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
695 != eSIR_SUCCESS)
696 {
697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
698 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
699 goto handle_failure;
700 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700701 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
702 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700703 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
704 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
705 tlvStruct->length = sizeof(tANI_U32);
706 configDataValue = (tANI_U32 *)(tlvStruct + 1);
707 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
708 eSIR_SUCCESS)
709 {
710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
711 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
712 goto handle_failure;
713 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700714 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
715 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700716 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
717 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
718 tlvStruct->length = sizeof(tANI_U32);
719 configDataValue = (tANI_U32 *)(tlvStruct + 1);
720 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
721 configDataValue ) != eSIR_SUCCESS)
722 {
723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
724 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
725 goto handle_failure;
726 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700727 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
728 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700729 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
730 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
731 tlvStruct->length = sizeof(tANI_U32);
732 configDataValue = (tANI_U32 *)(tlvStruct + 1);
733 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
734 eSIR_SUCCESS)
735 {
736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
737 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
738 goto handle_failure;
739 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700740 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
741 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700742 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
743 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
744 tlvStruct->length = sizeof(tANI_U32);
745 configDataValue = (tANI_U32 *)(tlvStruct + 1);
746 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
747 eSIR_SUCCESS)
748 {
749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
750 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
751 goto handle_failure;
752 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700753 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
754 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700755 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
756 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
757 tlvStruct->length = sizeof(tANI_U32);
758 configDataValue = (tANI_U32 *)(tlvStruct + 1);
759 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
760 eSIR_SUCCESS)
761 {
762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
763 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
764 goto handle_failure;
765 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700766 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
767 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700768 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
769 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
770 tlvStruct->length = sizeof(tANI_U32);
771 configDataValue = (tANI_U32 *)(tlvStruct + 1);
772 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
773 configDataValue ) != eSIR_SUCCESS)
774 {
775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
776 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
777 goto handle_failure;
778 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700779 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
780 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700781 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
782 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
783 tlvStruct->length = sizeof(tANI_U32);
784 configDataValue = (tANI_U32 *)(tlvStruct + 1);
785 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
786 configDataValue ) != eSIR_SUCCESS)
787 {
788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
789 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
790 goto handle_failure;
791 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700792 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
793 + sizeof(tHalCfg) + tlvStruct->length));
794
795 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
796 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
797 tlvStruct->length = sizeof(tANI_U32);
798 configDataValue = (tANI_U32 *)(tlvStruct + 1);
799 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
800 configDataValue ) != eSIR_SUCCESS)
801 {
802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
803 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
804 goto handle_failure;
805 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700806 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
807 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700808 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
809 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
810 tlvStruct->length = sizeof(tANI_U32);
811 configDataValue = (tANI_U32 *)(tlvStruct + 1);
812 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
813 configDataValue ) != eSIR_SUCCESS)
814 {
815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
816 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
817 goto handle_failure;
818 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700819 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
820 + sizeof(tHalCfg) + tlvStruct->length));
821
822 /* QWLAN_HAL_CFG_FIXED_RATE */
823 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
824 tlvStruct->length = sizeof(tANI_U32);
825 configDataValue = (tANI_U32 *)(tlvStruct + 1);
826 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
827 != eSIR_SUCCESS)
828 {
829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
830 "Failed to get value for WNI_CFG_FIXED_RATE");
831 goto handle_failure;
832 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700833 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
834 + sizeof(tHalCfg) + tlvStruct->length));
835
836 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
837 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
838 tlvStruct->length = sizeof(tANI_U32);
839 configDataValue = (tANI_U32 *)(tlvStruct + 1);
840 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
841 != eSIR_SUCCESS)
842 {
843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
844 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
845 goto handle_failure;
846 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700847 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
848 + sizeof(tHalCfg) + tlvStruct->length));
849
850 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
851 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
852 tlvStruct->length = sizeof(tANI_U32);
853 configDataValue = (tANI_U32 *)(tlvStruct + 1);
854 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
855 configDataValue ) != eSIR_SUCCESS)
856 {
857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
858 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
859 goto handle_failure;
860 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700861 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
862 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700863 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
864 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
865 tlvStruct->length = sizeof(tANI_U32);
866 configDataValue = (tANI_U32 *)(tlvStruct + 1);
867 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
868 configDataValue ) != eSIR_SUCCESS)
869 {
870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
871 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
872 goto handle_failure;
873 }
874 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
875 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700876 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
877 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
878 tlvStruct->length = sizeof(tANI_U32);
879 configDataValue = (tANI_U32 *)(tlvStruct + 1);
880 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
881 configDataValue ) != eSIR_SUCCESS)
882 {
883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
884 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
885 goto handle_failure;
886 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700887 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
888 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700889 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
890 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
891 tlvStruct->length = sizeof(tANI_U32);
892 configDataValue = (tANI_U32 *)(tlvStruct + 1);
893 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
894 configDataValue ) != eSIR_SUCCESS)
895 {
896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
897 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
898 goto handle_failure;
899 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700900 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
901 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700902 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
903 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
904 tlvStruct->length = sizeof(tANI_U32);
905 configDataValue = (tANI_U32 *)(tlvStruct + 1);
906 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
907 configDataValue ) != eSIR_SUCCESS)
908 {
909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
910 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
911 goto handle_failure;
912 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700913 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
914 + sizeof(tHalCfg) + tlvStruct->length);
915
Jeff Johnson295189b2012-06-20 16:38:30 -0700916 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
917 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
918 tlvStruct->length = sizeof(tANI_U32);
919 configDataValue = (tANI_U32 *)(tlvStruct + 1);
920 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
921 configDataValue ) != eSIR_SUCCESS)
922 {
923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
924 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
925 goto handle_failure;
926 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700927 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
928 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700929 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
930 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
931 tlvStruct->length = sizeof(tANI_U32);
932 configDataValue = (tANI_U32 *)(tlvStruct + 1);
933 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
934 configDataValue ) != eSIR_SUCCESS)
935 {
936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
937 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
938 goto handle_failure;
939 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700940 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
941 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700942 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
943 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
944 tlvStruct->length = sizeof(tANI_U32);
945 configDataValue = (tANI_U32 *)(tlvStruct + 1);
946 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
947 eSIR_SUCCESS)
948 {
949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
950 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
951 goto handle_failure;
952 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700953 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
954 + sizeof(tHalCfg) + tlvStruct->length);
955
956 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
957 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
958 tlvStruct->length = sizeof(tANI_U32);
959 configDataValue = (tANI_U32 *)(tlvStruct + 1);
960 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
961 configDataValue ) != eSIR_SUCCESS)
962 {
963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
964 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
965 goto handle_failure;
966 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700967 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
968 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700969 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
970 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
971 tlvStruct->length = sizeof(tANI_U32);
972 configDataValue = (tANI_U32 *)(tlvStruct + 1);
973 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
974 configDataValue ) != eSIR_SUCCESS)
975 {
976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
977 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
978 goto handle_failure;
979 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700980 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
981 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700982 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
983 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
984 tlvStruct->length = sizeof(tANI_U32);
985 configDataValue = (tANI_U32 *)(tlvStruct + 1);
986 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
987 configDataValue ) != eSIR_SUCCESS)
988 {
989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
990 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
991 goto handle_failure;
992 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700993 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
994 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700995 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
996 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
997 tlvStruct->length = sizeof(tANI_U32);
998 configDataValue = (tANI_U32 *)(tlvStruct + 1);
999 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
1000 configDataValue ) != eSIR_SUCCESS)
1001 {
1002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1003 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
1004 goto handle_failure;
1005 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001006 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1007 + sizeof(tHalCfg) + tlvStruct->length);
1008
1009 /* QWLAN_HAL_CFG_STATS_PERIOD */
1010 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
1011 tlvStruct->length = sizeof(tANI_U32);
1012 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1013 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
1014 eSIR_SUCCESS)
1015 {
1016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1017 "Failed to get value for WNI_CFG_STATS_PERIOD");
1018 goto handle_failure;
1019 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001020 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1021 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001022 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
1023 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
1024 tlvStruct->length = sizeof(tANI_U32);
1025 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1026 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
1027 eSIR_SUCCESS)
1028 {
1029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1030 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
1031 goto handle_failure;
1032 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001033 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1034 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001035 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1036 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1037 tlvStruct->length = sizeof(tANI_U32);
1038 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1039 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1040 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001041 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1042 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001043 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1044 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1045 tlvStruct->length = sizeof(tANI_U32);
1046 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1047 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1048 != eSIR_SUCCESS)
1049 {
1050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1051 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1052 goto handle_failure;
1053 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001054 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1055 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001056 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1057 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1058 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1059 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1060 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1061 &strLength) != eSIR_SUCCESS)
1062 {
1063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1064 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1065 goto handle_failure;
1066 }
1067 tlvStruct->length = strLength;
1068 /* calculate the pad bytes to have the CFG in aligned format */
1069 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1070 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001071 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1072 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001073 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1074 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1075 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1076 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1077 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1078 &strLength) != eSIR_SUCCESS)
1079 {
1080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1081 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1082 goto handle_failure;
1083 }
1084 tlvStruct->length = strLength;
1085 /* calculate the pad bytes to have the CFG in aligned format */
1086 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1087 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001088 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1089 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001090 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1091 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1092 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1093 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1094 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1095 &strLength) != eSIR_SUCCESS)
1096 {
1097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1098 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1099 goto handle_failure;
1100 }
1101 tlvStruct->length = strLength;
1102 /* calculate the pad bytes to have the CFG in aligned format */
1103 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1104 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001105 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1106 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001107 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1108 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1109 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1110 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1111 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1112 &strLength) != eSIR_SUCCESS)
1113 {
1114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1115 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1116 goto handle_failure;
1117 }
1118 tlvStruct->length = strLength;
1119 /* calculate the pad bytes to have the CFG in aligned format */
1120 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1121 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001122 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1123 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001124 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1125 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1126 tlvStruct->length = sizeof(tANI_U32);
1127 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1128 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1129 != eSIR_SUCCESS)
1130 {
1131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1132 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1133 goto handle_failure;
1134 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001135 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1136 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001137 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1138 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1139 tlvStruct->length = sizeof(tANI_U32);
1140 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1141 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1142 != eSIR_SUCCESS)
1143 {
1144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1145 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1146 goto handle_failure;
1147 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001148 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1149 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001150 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1151 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1152 tlvStruct->length = sizeof(tANI_U32);
1153 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1154 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1155 != eSIR_SUCCESS)
1156 {
1157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1158 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1159 goto handle_failure;
1160 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001161 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1162 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001163 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1164 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1165 tlvStruct->length = sizeof(tANI_U32);
1166 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1167 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1168 != eSIR_SUCCESS)
1169 {
1170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1171 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1172 goto handle_failure;
1173 }
1174 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1175 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001176 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1177 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1178 tlvStruct->length = sizeof(tANI_U32);
1179 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1180 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1181 != eSIR_SUCCESS)
1182 {
1183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1184 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1185 goto handle_failure;
1186 }
1187 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1188 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001189 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1190 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1191 tlvStruct->length = sizeof(tANI_U32);
1192 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1193 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1194 != eSIR_SUCCESS)
1195 {
1196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1197 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1198 goto handle_failure;
1199 }
1200 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1201 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001202 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1203 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1204 tlvStruct->length = sizeof(tANI_U32);
1205 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1206 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1207 != eSIR_SUCCESS)
1208 {
1209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1210 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1211 goto handle_failure;
1212 }
1213 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1214 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001215 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1216 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1217 tlvStruct->length = sizeof(tANI_U32);
1218 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1219 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1220 != eSIR_SUCCESS)
1221 {
1222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1223 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1224 goto handle_failure;
1225 }
1226 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1227 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001228 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1229 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1230 tlvStruct->length = sizeof(tANI_U32);
1231 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1232 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1233 != eSIR_SUCCESS)
1234 {
1235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1236 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1237 goto handle_failure;
1238 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001239 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1240 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001241 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1242 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1243 tlvStruct->length = sizeof(tANI_U32);
1244 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1245 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1246 != eSIR_SUCCESS)
1247 {
1248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1249 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1250 goto handle_failure;
1251 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001252 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1253 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001254 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1255 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1256 tlvStruct->length = sizeof(tANI_U32);
1257 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1258 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1259 != eSIR_SUCCESS)
1260 {
1261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1262 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1263 goto handle_failure;
1264 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001265 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1266 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001267 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1268 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1269 * into FW, so the parameters are added here.
1270 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001271 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1272 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1273 tlvStruct->length = sizeof(tANI_U32);
1274 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1275 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1276 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1277 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001278 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1279 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1280 tlvStruct->length = sizeof(tANI_U32);
1281 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1282 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1283 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1284 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001285 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1286 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1287 tlvStruct->length = sizeof(tANI_U32);
1288 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1289 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1290 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1291 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001292 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1293 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1294 tlvStruct->length = sizeof(tANI_U32);
1295 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1296 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1297 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1298 + sizeof(tHalCfg) + tlvStruct->length) ;
1299
1300 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1301 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1302 tlvStruct->length = sizeof(tANI_U32);
1303 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1304 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1305 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1306 + sizeof(tHalCfg) + tlvStruct->length) ;
1307
1308 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1309 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1310 tlvStruct->length = sizeof(tANI_U32);
1311 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1312 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1313 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1314 + sizeof(tHalCfg) + tlvStruct->length) ;
1315
1316 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1317 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1318 tlvStruct->length = sizeof(tANI_U32);
1319 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1320 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1321 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1322 + sizeof(tHalCfg) + tlvStruct->length) ;
1323
1324 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1325 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1326 tlvStruct->length = sizeof(tANI_U32);
1327 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1328 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1329 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1330 + sizeof(tHalCfg) + tlvStruct->length) ;
1331
1332 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1333 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1334 tlvStruct->length = sizeof(tANI_U32);
1335 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1336 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1337 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1338 + sizeof(tHalCfg) + tlvStruct->length) ;
1339
1340 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1341 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1342 tlvStruct->length = sizeof(tANI_U32);
1343 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1344 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1345 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1346 + sizeof(tHalCfg) + tlvStruct->length) ;
1347
1348 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1349 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1350 tlvStruct->length = sizeof(tANI_U32);
1351 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1352 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1353 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1354 + sizeof(tHalCfg) + tlvStruct->length) ;
1355
1356 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1357 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1358 tlvStruct->length = sizeof(tANI_U32);
1359 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1360 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1361 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1362 + sizeof(tHalCfg) + tlvStruct->length) ;
1363
1364 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1365 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1366 tlvStruct->length = sizeof(tANI_U32);
1367 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1368 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1369 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1370 + sizeof(tHalCfg) + tlvStruct->length) ;
1371
1372 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1373 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1374 tlvStruct->length = sizeof(tANI_U32);
1375 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1376 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1377 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1378 + sizeof(tHalCfg) + tlvStruct->length) ;
1379
1380 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1381 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1382 tlvStruct->length = sizeof(tANI_U32);
1383 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1384 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1385 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1386 + sizeof(tHalCfg) + tlvStruct->length) ;
1387
1388 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1389 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1390 tlvStruct->length = sizeof(tANI_U32);
1391 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1392 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1393 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1394 + sizeof(tHalCfg) + tlvStruct->length) ;
1395
Wilson Tsaof8b37942013-09-06 10:49:00 -07001396 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM; i++)
1397 {
1398 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WAN_FREQ */
1399 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ + i*4;
1400 tlvStruct->length = sizeof(tANI_U32);
1401 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1402 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWANFreq[i];
1403 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1404 + sizeof(tHalCfg) + tlvStruct->length) ;
1405
1406 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WLAN_FREQ */
1407 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ + i*4;
1408 tlvStruct->length = sizeof(tANI_U32);
1409 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1410 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWLANFreq[i];
1411 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1412 + sizeof(tHalCfg) + tlvStruct->length) ;
1413
1414 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG */
1415 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG + i*4;
1416 tlvStruct->length = sizeof(tANI_U32);
1417 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1418 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig[i];
1419 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1420 + sizeof(tHalCfg) + tlvStruct->length) ;
1421
1422 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG2 */
1423 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 + i*4;
1424 tlvStruct->length = sizeof(tANI_U32);
1425 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1426 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig2[i];
1427 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1428 + sizeof(tHalCfg) + tlvStruct->length) ;
1429 }
1430
1431 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF */
1432 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF ;
1433 tlvStruct->length = sizeof(tANI_U32);
1434 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1435 *configDataValue = pMac->btc.btcConfig.mwsCoexModemBackoff;
1436 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1437 + sizeof(tHalCfg) + tlvStruct->length) ;
1438
1439 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG; i++)
1440 {
1441 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_CONFIGX */
1442 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_CONFIG1 + i;
1443 tlvStruct->length = sizeof(tANI_U32);
1444 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1445 *configDataValue = pMac->btc.btcConfig.mwsCoexConfig[i];
1446 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1447 + sizeof(tHalCfg) + tlvStruct->length) ;
1448 }
1449
1450 /* [COEX] QWLAN_HAL_CFG_SAR_POWER_BACKOFF */
1451 tlvStruct->type = QWLAN_HAL_CFG_SAR_POWER_BACKOFF ;
1452 tlvStruct->length = sizeof(tANI_U32);
1453 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1454 *configDataValue = pMac->btc.btcConfig.SARPowerBackoff;
1455 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1456 + sizeof(tHalCfg) + tlvStruct->length) ;
1457
Jeff Johnson32d95a32012-09-10 13:15:23 -07001458 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001459 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1460 tlvStruct->length = sizeof(tANI_U32);
1461 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1462 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1463 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1464 wcnssCompiledApiVersion.minor,
1465 wcnssCompiledApiVersion.version,
1466 wcnssCompiledApiVersion.revision);
1467 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1468 + sizeof(tHalCfg) + tlvStruct->length) ;
1469
Jeff Johnsond13512a2012-07-17 11:42:19 -07001470 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1471 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1472 tlvStruct->length = sizeof(tANI_U32);
1473 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1474 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1475 configDataValue ) != eSIR_SUCCESS)
1476 {
1477 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1478 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1479 goto handle_failure;
1480 }
1481
1482 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1483 + sizeof(tHalCfg) + tlvStruct->length) ;
1484 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1485 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1486 tlvStruct->length = sizeof(tANI_U32);
1487 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1488 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1489 configDataValue ) != eSIR_SUCCESS)
1490 {
1491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1492 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1493 goto handle_failure;
1494 }
1495
1496 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1497 + sizeof(tHalCfg) + tlvStruct->length) ;
1498
1499 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1500 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1501 tlvStruct->length = sizeof(tANI_U32);
1502 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1503 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1504 != eSIR_SUCCESS)
1505 {
1506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1507 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1508 goto handle_failure;
1509 }
1510
1511 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1512 + sizeof(tHalCfg) + tlvStruct->length) ;
1513
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001514 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1515 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1516 tlvStruct->length = sizeof(tANI_U32);
1517 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1518 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1519 != eSIR_SUCCESS)
1520 {
1521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1522 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1523 goto handle_failure;
1524 }
1525
1526 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1527 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001528#ifdef WLAN_SOFTAP_VSTA_FEATURE
1529 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1530 tlvStruct->length = sizeof(tANI_U32);
1531 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1532 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1533 != eSIR_SUCCESS)
1534 {
1535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1536 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1537 goto handle_failure;
1538 }
1539
1540 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1541 + sizeof(tHalCfg) + tlvStruct->length) ;
1542#endif
1543
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001544 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1545 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1546 tlvStruct->length = sizeof(tANI_U32);
1547 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1548
1549 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1550 != eSIR_SUCCESS)
1551 {
1552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1553 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1554 goto handle_failure;
1555 }
1556
1557 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1558 + sizeof(tHalCfg) + tlvStruct->length) ;
1559
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301560/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1561 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1562 tlvStruct->length = sizeof(tANI_U32);
1563 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1564 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1565 configDataValue ) != eSIR_SUCCESS)
1566 {
1567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1568 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1569 goto handle_failure;
1570 }
1571
1572 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1573 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301574#ifdef FEATURE_WLAN_TDLS
1575 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1576 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1577 tlvStruct->length = sizeof(tANI_U32);
1578 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1579 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1580 configDataValue ) != eSIR_SUCCESS)
1581 {
1582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1583 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1584 goto handle_failure;
1585 }
1586 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1587 + sizeof(tHalCfg) + tlvStruct->length) ;
1588
1589 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1590 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1591 tlvStruct->length = sizeof(tANI_U32);
1592 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1593 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1594 configDataValue ) != eSIR_SUCCESS)
1595 {
1596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1597 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1598 goto handle_failure;
1599 }
1600 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1601 + sizeof(tHalCfg) + tlvStruct->length) ;
1602 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1603 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1604 tlvStruct->length = sizeof(tANI_U32);
1605 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1606 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1607 configDataValue ) != eSIR_SUCCESS)
1608 {
1609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1610 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1611 goto handle_failure;
1612 }
1613 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1614 + sizeof(tHalCfg) + tlvStruct->length) ;
1615 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1616 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1617 tlvStruct->length = sizeof(tANI_U32);
1618 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1619 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1620 configDataValue ) != eSIR_SUCCESS)
1621 {
1622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1623 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1624 goto handle_failure;
1625 }
1626 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1627 + sizeof(tHalCfg) + tlvStruct->length) ;
Naresh Jayaramf73f3762014-02-04 16:13:20 +05301628 /* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */
1629 tlvStruct->type = QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE;
1630 tlvStruct->length = sizeof(tANI_U32);
1631 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1632 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_OFF_CHANNEL_ENABLED,
1633 configDataValue ) != eSIR_SUCCESS)
1634 {
1635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1636 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1637 goto handle_failure;
1638 }
1639 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1640 + sizeof(tHalCfg) + tlvStruct->length) ;
1641
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301642#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301643
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001644 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1645 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1646 tlvStruct->length = sizeof(tANI_U32);
1647 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1648 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1649 configDataValue ) != eSIR_SUCCESS)
1650 {
1651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1652 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1653 goto handle_failure;
1654 }
1655
1656 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1657 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001658
1659 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1660 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1661 tlvStruct->length = sizeof(tANI_U32);
1662 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1663 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1664 != eSIR_SUCCESS)
1665 {
1666 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1667 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1668 goto handle_failure;
1669 }
1670 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1671 + sizeof(tHalCfg) + tlvStruct->length));
1672
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301673 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1674 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1675 tlvStruct->length = sizeof(tANI_U32);
1676 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1677 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1678 configDataValue ) != eSIR_SUCCESS)
1679 {
1680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1681 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1682 goto handle_failure;
1683 }
1684
1685 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1686 + sizeof(tHalCfg) + tlvStruct->length) ;
1687
Madan Mohan Koyyalamudi2558bc92013-08-24 16:54:31 +05301688 /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
1689 tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
1690 tlvStruct->length = sizeof(tANI_U32);
1691 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1692 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
1693 configDataValue ) != eSIR_SUCCESS)
1694 {
1695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1696 "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
1697 goto handle_failure;
1698 }
1699 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1700 + sizeof(tHalCfg) + tlvStruct->length) ;
1701
Kiet Lam4bbd3cb2013-11-07 20:03:49 +05301702 /* QWLAN_HAL_CFG_ATH_DISABLE */
1703 tlvStruct->type = QWLAN_HAL_CFG_ATH_DISABLE ;
1704 tlvStruct->length = sizeof(tANI_U32);
1705 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1706 if(wlan_cfgGetInt(pMac, WNI_CFG_ATH_DISABLE,
1707 configDataValue ) != eSIR_SUCCESS)
1708 {
1709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1710 "Failed to get value for WNI_CFG_ATH_DISABLE");
1711 goto handle_failure;
1712 }
1713 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1714 + sizeof(tHalCfg) + tlvStruct->length) ;
1715
c_hpothu6d7dc922013-12-02 12:36:41 +05301716 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_WLAN_LEN */
1717 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1718 tlvStruct->length = sizeof(tANI_U32);
1719 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1720 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_WLAN_LEN,
1721 configDataValue ) != eSIR_SUCCESS)
1722 {
1723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1724 "Failed to get value for WNI_CFG_BTC_ACTIVE_WLAN_LEN");
1725 goto handle_failure;
1726 }
1727 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1728 + sizeof(tHalCfg) + tlvStruct->length) ;
1729
1730 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1731 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1732 tlvStruct->length = sizeof(tANI_U32);
1733 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1734 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_BT_LEN,
1735 configDataValue ) != eSIR_SUCCESS)
1736 {
1737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1738 "Failed to get value for WNI_CFG_BTC_ACTIVE_BT_LEN");
1739 goto handle_failure;
1740 }
1741 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1742 + sizeof(tHalCfg) + tlvStruct->length) ;
1743
1744 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN */
1745 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1746 tlvStruct->length = sizeof(tANI_U32);
1747 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1748 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN,
1749 configDataValue ) != eSIR_SUCCESS)
1750 {
1751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1752 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN");
1753 goto handle_failure;
1754 }
1755 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1756 + sizeof(tHalCfg) + tlvStruct->length) ;
1757
1758 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1759 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1760 tlvStruct->length = sizeof(tANI_U32);
1761 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1762 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_BT_LEN,
1763 configDataValue ) != eSIR_SUCCESS)
1764 {
1765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1766 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_BT_LEN");
1767 goto handle_failure;
1768 }
1769 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1770 + sizeof(tHalCfg) + tlvStruct->length) ;
1771
AnjaneeDevi Kapparapu50239e32014-01-07 18:09:33 +05301772 /* QWLAN_HAL_CFG_ASD_PROBE_INTERVAL */
1773 tlvStruct->type = QWLAN_HAL_CFG_ASD_PROBE_INTERVAL ;
1774 tlvStruct->length = sizeof(tANI_U32);
1775 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1776 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_PROBE_INTERVAL,
1777 configDataValue ) != eSIR_SUCCESS)
1778 {
1779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1780 "Failed to get value for WNI_CFG_ASD_PROBE_INTERVAL");
1781 goto handle_failure;
1782 }
1783 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1784 + sizeof(tHalCfg) + tlvStruct->length) ;
1785
1786 /* QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD */
1787 tlvStruct->type = QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD ;
1788 tlvStruct->length = sizeof(tANI_U32);
1789 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1790 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_TRIGGER_THRESHOLD,
1791 configDataValue ) != eSIR_SUCCESS)
1792 {
1793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1794 "Failed to get value for WNI_CFG_ASD_TRIGGER_THRESHOLD");
1795 goto handle_failure;
1796 }
1797 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1798 + sizeof(tHalCfg) + tlvStruct->length) ;
1799
1800 /* QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD */
1801 tlvStruct->type = QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD ;
1802 tlvStruct->length = sizeof(tANI_U32);
1803 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1804 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD,
1805 configDataValue ) != eSIR_SUCCESS)
1806 {
1807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1808 "Failed to get value for WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD");
1809 goto handle_failure;
1810 }
1811 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1812 + sizeof(tHalCfg) + tlvStruct->length) ;
1813
Leela Venkata Kiran Kumar Reddy Chirala22c159b2013-12-23 18:19:13 -08001814 /* QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO */
1815 tlvStruct->type = QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO ;
1816 tlvStruct->length = sizeof(tANI_U32);
1817 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1818 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CTS2S_DURING_SCO,
1819 configDataValue ) != eSIR_SUCCESS)
1820 {
1821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1822 "Failed to get value for WNI_CFG_BTC_CTS2S_DURING_SCO");
1823 goto handle_failure;
1824 }
1825 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1826 + sizeof(tHalCfg) + tlvStruct->length) ;
1827
c_hpothu5bd1ae42014-03-07 20:28:22 +05301828 /* QWLAN_HAL_CFG_RA_FILTER_ENABLE */
1829 tlvStruct->type = QWLAN_HAL_CFG_RA_FILTER_ENABLE ;
1830 tlvStruct->length = sizeof(tANI_U32);
1831 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1832
1833 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_FILTER_ENABLE,
1834 configDataValue ) != eSIR_SUCCESS)
1835 {
1836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1837 "Failed to get value for WNI_CFG_RA_FILTER_ENABLE");
1838 goto handle_failure;
1839 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05301840 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1841 + sizeof(tHalCfg) + tlvStruct->length) ;
1842
1843 /* QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL */
1844 tlvStruct->type = QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL ;
1845 tlvStruct->length = sizeof(tANI_U32);
1846 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1847
1848 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_RATE_LIMIT_INTERVAL,
1849 configDataValue ) != eSIR_SUCCESS)
1850 {
1851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1852 "Failed to get value for WNI_CFG_RA_RATE_LIMIT_INTERVAL");
1853 goto handle_failure;
1854 }
c_hpothu2d0f1c42014-04-01 18:38:51 +05301855 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1856 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu5bd1ae42014-03-07 20:28:22 +05301857
c_hpothu2d0f1c42014-04-01 18:38:51 +05301858 /* QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE */
1859 tlvStruct->type = QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE ;
1860 tlvStruct->length = sizeof(tANI_U32);
1861 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1862
1863 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE,
1864 configDataValue ) != eSIR_SUCCESS)
1865 {
1866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1867 "Failed to get value for WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE");
1868 goto handle_failure;
1869 }
1870 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1871 + sizeof(tHalCfg) + tlvStruct->length) ;
1872
1873 /* QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE */
1874 tlvStruct->type = QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE ;
1875 tlvStruct->length = sizeof(tANI_U32);
1876 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1877
1878 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE,
1879 configDataValue ) != eSIR_SUCCESS)
1880 {
1881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1882 "Failed to get value for WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE");
1883 goto handle_failure;
1884 }
1885 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1886 + sizeof(tHalCfg) + tlvStruct->length) ;
1887
1888 /* QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD */
1889 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD ;
1890 tlvStruct->length = sizeof(tANI_U32);
1891 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1892
1893 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD,
1894 configDataValue ) != eSIR_SUCCESS)
1895 {
1896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1897 "Failed to get value for WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD");
1898 goto handle_failure;
1899 }
1900 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1901 + sizeof(tHalCfg) + tlvStruct->length) ;
1902
1903 /* QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD */
1904 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD ;
1905 tlvStruct->length = sizeof(tANI_U32);
1906 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1907
1908 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD,
1909 configDataValue ) != eSIR_SUCCESS)
1910 {
1911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1912 "Failed to get value for WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD");
1913 goto handle_failure;
1914 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05301915 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1916 + sizeof(tHalCfg) + tlvStruct->length) ;
1917
Mihir Shetec34258c2014-07-30 17:50:27 +05301918 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP */
1919 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_SP ;
1920 tlvStruct->length = sizeof(tANI_U32);
1921 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1922
1923 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_SP,
1924 configDataValue ) != eSIR_SUCCESS)
1925 {
1926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1927 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_SP");
1928 goto handle_failure;
1929 }
1930 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1931 + sizeof(tHalCfg) + tlvStruct->length) ;
1932
1933 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT */
1934 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT ;
1935 tlvStruct->length = sizeof(tANI_U32);
1936 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1937
1938 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT,
1939 configDataValue ) != eSIR_SUCCESS)
1940 {
1941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1942 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT");
1943 goto handle_failure;
1944 }
1945 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1946 + sizeof(tHalCfg) + tlvStruct->length) ;
1947
1948 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT */
1949 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT ;
1950 tlvStruct->length = sizeof(tANI_U32);
1951 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1952
1953 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT,
1954 configDataValue ) != eSIR_SUCCESS)
1955 {
1956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1957 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT");
1958 goto handle_failure;
1959 }
1960 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1961 + sizeof(tHalCfg) + tlvStruct->length) ;
1962
1963 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW */
1964 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW ;
1965 tlvStruct->length = sizeof(tANI_U32);
1966 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1967
1968 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW,
1969 configDataValue ) != eSIR_SUCCESS)
1970 {
1971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1972 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_TX_CNT_MEAS_WINDOW");
1973 goto handle_failure;
1974 }
1975 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1976 + sizeof(tHalCfg) + tlvStruct->length) ;
1977
1978 /* QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW */
1979 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW ;
1980 tlvStruct->length = sizeof(tANI_U32);
1981 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1982
1983 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW,
1984 configDataValue ) != eSIR_SUCCESS)
1985 {
1986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1987 "Failed to get value for WNI_CFG_MAX_UAPSD_CONSEC_RX_CNT_MEAS_WINDOW");
1988 goto handle_failure;
1989 }
1990 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1991 + sizeof(tHalCfg) + tlvStruct->length) ;
1992
1993 /* QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE */
1994 tlvStruct->type = QWLAN_HAL_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE ;
1995 tlvStruct->length = sizeof(tANI_U32);
1996 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1997
1998 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE,
1999 configDataValue ) != eSIR_SUCCESS)
2000 {
2001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2002 "Failed to get value for WNI_CFG_MAX_PSPOLL_IN_WMM_UAPSD_PS_MODE");
2003 goto handle_failure;
2004 }
2005 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2006 + sizeof(tHalCfg) + tlvStruct->length) ;
2007
2008 /* QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS */
2009 tlvStruct->type = QWLAN_HAL_CFG_MAX_UAPSD_INACTIVITY_INTERVALS ;
2010 tlvStruct->length = sizeof(tANI_U32);
2011 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2012
2013 if (wlan_cfgGetInt(pMac, WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS,
2014 configDataValue ) != eSIR_SUCCESS)
2015 {
2016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2017 "Failed to get value for WNI_CFG_MAX_UAPSD_INACTIVITY_INTERVALS");
2018 goto handle_failure;
2019 }
2020 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2021 + sizeof(tHalCfg) + tlvStruct->length) ;
2022
2023 /* QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS */
2024 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_DYNAMIC_WMMPS ;
2025 tlvStruct->length = sizeof(tANI_U32);
2026 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2027
2028 if (wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_DYNAMIC_WMMPS,
2029 configDataValue ) != eSIR_SUCCESS)
2030 {
2031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2032 "Failed to get value for WNI_CFG_ENABLE_DYNAMIC_WMMPS");
2033 goto handle_failure;
2034 }
2035 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2036 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu03d961b2014-09-19 16:45:00 +05302037
2038 /* QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE */
2039 tlvStruct->type = QWLAN_HAL_CFG_BURST_MODE_BE_TXOP_VALUE ;
2040 tlvStruct->length = sizeof(tANI_U32);
2041 configDataValue = (tANI_U32 *)(tlvStruct + 1);
2042
2043 if (wlan_cfgGetInt(pMac, WNI_CFG_BURST_MODE_BE_TXOP_VALUE,
2044 configDataValue ) != eSIR_SUCCESS)
2045 {
2046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2047 "Failed to get value for WNI_CFG_BURST_MODE_BE_TXOP_VALUE");
2048 goto handle_failure;
2049 }
2050 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
2051 + sizeof(tHalCfg) + tlvStruct->length) ;
2052
Jeff Johnson295189b2012-06-20 16:38:30 -07002053 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002054#ifdef WLAN_DEBUG
2055 {
2056 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07002057 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2058 "****** Dumping CFG TLV ***** ");
2059 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
2060 {
2061 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2062 "%02x %02x %02x %02x %02x %02x %02x %02x",
2063 tlvStructStart[i],
2064 tlvStructStart[i+1],
2065 tlvStructStart[i+2],
2066 tlvStructStart[i+3],
2067 tlvStructStart[i+4],
2068 tlvStructStart[i+5],
2069 tlvStructStart[i+6],
2070 tlvStructStart[i+7]);
2071 }
2072 /* Dump the bytes in the last line*/
2073 for (; i < wdiStartParams->usConfigBufferLen; i++)
2074 {
2075 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2076 "%02x ",tlvStructStart[i]);
2077 }
2078 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2079 "**************************** ");
2080 }
2081#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002082 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002083handle_failure:
2084 vos_mem_free(configParam);
2085 return VOS_STATUS_E_FAILURE;
2086}
Jeff Johnson295189b2012-06-20 16:38:30 -07002087/*
2088 * FUNCTION: WDA_wdiCompleteCB
2089 * call the voss call back function
2090 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002091void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07002092{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002093 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2094 tWDA_CbContext *wdaContext;
2095
2096 if(NULL == pWdaParams)
2097 {
2098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002099 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002100 VOS_ASSERT(0) ;
2101 return ;
2102 }
2103
2104 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
2105
Jeff Johnson295189b2012-06-20 16:38:30 -07002106 if (NULL == wdaContext)
2107 {
2108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002109 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002110 return ;
2111 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002112
Jeff Johnson295189b2012-06-20 16:38:30 -07002113 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002114 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07002115 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002116 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002117 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002118 vos_mem_free(pWdaParams);
2119
Jeff Johnson295189b2012-06-20 16:38:30 -07002120 if(WDI_STATUS_SUCCESS != status)
2121 {
2122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2123 "WDI stop callback returned failure" );
2124 VOS_ASSERT(0) ;
2125 }
2126 else
2127 {
2128 wdaContext->wdaState = WDA_STOP_STATE;
2129 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002130
Leo Chang9d76f622013-08-23 16:34:52 -07002131 /* FTM Driver stop procedure should be synced.
2132 * Stop and Close will happen on same context */
2133 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
2134 {
2135 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
2136 {
2137 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2138 "%s: FTM Stop Event Set Fail", __func__);
2139 VOS_ASSERT(0);
2140 }
2141 }
2142
Jeff Johnson295189b2012-06-20 16:38:30 -07002143 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002144 vos_WDAComplete_cback(wdaContext->pVosContext);
2145
Jeff Johnson295189b2012-06-20 16:38:30 -07002146 return ;
2147}
Jeff Johnson295189b2012-06-20 16:38:30 -07002148/*
2149 * FUNCTION: WDA_stop
2150 * call WDI_stop
2151 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002152VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
2153{
2154 WDI_Status wdiStatus;
2155 VOS_STATUS status = VOS_STATUS_SUCCESS;
2156 WDI_StopReqParamsType *wdiStopReq;
2157 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002158 tWDA_ReqParams *pWdaParams ;
2159
Jeff Johnson295189b2012-06-20 16:38:30 -07002160 if (NULL == pWDA)
2161 {
2162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002163 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002164 VOS_ASSERT(0);
2165 return VOS_STATUS_E_FAILURE;
2166 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002167 if (pWDA->wdiFailed == true)
2168 {
2169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002170 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002171 return VOS_STATUS_E_ALREADY;
2172 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002173
Jeff Johnson295189b2012-06-20 16:38:30 -07002174 /* FTM mode stay START_STATE */
2175 if( (WDA_READY_STATE != pWDA->wdaState) &&
2176 (WDA_INIT_STATE != pWDA->wdaState) &&
2177 (WDA_START_STATE != pWDA->wdaState) )
2178 {
2179 VOS_ASSERT(0);
2180 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002181 wdiStopReq = (WDI_StopReqParamsType *)
2182 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
2183 if(NULL == wdiStopReq)
2184 {
2185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002186 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002187 VOS_ASSERT(0);
2188 return VOS_STATUS_E_NOMEM;
2189 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002190
Jeff Johnson295189b2012-06-20 16:38:30 -07002191 wdiStopReq->wdiStopReason = reason;
2192 wdiStopReq->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002193
2194 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2195 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07002196 {
2197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002198 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002199 VOS_ASSERT(0);
2200 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002201 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07002202 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002203
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002204 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
2205 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07002206 {
2207 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002208 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002209 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002210
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002211 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
2212 pWdaParams->wdaMsgParam = NULL;
2213 pWdaParams->pWdaContext = pWDA;
2214
Jeff Johnson295189b2012-06-20 16:38:30 -07002215 /* call WDI stop */
2216 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002217 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
2218
Jeff Johnson295189b2012-06-20 16:38:30 -07002219 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
2220 {
2221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2222 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002223 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2224 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002225 status = VOS_STATUS_E_FAILURE;
2226 }
Leo Chang9d76f622013-08-23 16:34:52 -07002227
2228 /* FTM Driver stop procedure should be synced.
2229 * Stop and Close will happen on same context */
2230 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
2231 {
2232 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
2233 WDI_RESPONSE_TIMEOUT);
2234 if (status != VOS_STATUS_SUCCESS)
2235 {
2236 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2237 "%s: FTM Stop Timepoout", __func__);
2238 VOS_ASSERT(0);
Leo Chang9d76f622013-08-23 16:34:52 -07002239 }
c_hpothu0d36bc42014-07-03 17:43:45 +05302240 vos_event_destroy(&pWDA->ftmStopDoneEvent);
Leo Chang9d76f622013-08-23 16:34:52 -07002241 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002242 return status;
2243}
Jeff Johnson295189b2012-06-20 16:38:30 -07002244/*
2245 * FUNCTION: WDA_close
2246 * call WDI_close and free the WDA context
2247 */
2248VOS_STATUS WDA_close(v_PVOID_t pVosContext)
2249{
Jeff Johnson43971f52012-07-17 12:26:56 -07002250 VOS_STATUS status = VOS_STATUS_SUCCESS;
2251 WDI_Status wstatus;
2252 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002253 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002254 if (NULL == wdaContext)
2255 {
2256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002257 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002258 return VOS_STATUS_E_FAILURE;
2259 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002260 if((WDA_INIT_STATE != wdaContext->wdaState) &&
2261 (WDA_STOP_STATE != wdaContext->wdaState))
2262 {
2263 VOS_ASSERT(0);
2264 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002265 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07002266 wstatus = WDI_Close();
2267 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07002268 {
2269 status = VOS_STATUS_E_FAILURE;
2270 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002271 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002272 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07002273 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
2274 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002275 {
2276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002277 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002278 status = VOS_STATUS_E_FAILURE;
2279 }
2280
Jeff Johnson43971f52012-07-17 12:26:56 -07002281 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002282 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002283 {
2284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002285 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002286 status = VOS_STATUS_E_FAILURE;
2287 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002288 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002289 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002290 {
2291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002292 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002293 status = VOS_STATUS_E_FAILURE;
2294 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002295 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07002296 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002297 {
2298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002299 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002300 status = VOS_STATUS_E_FAILURE;
2301 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002302 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07002303 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07002304 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07002305 {
2306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2307 "error in WDA close " );
2308 status = VOS_STATUS_E_FAILURE;
2309 }
2310 return status;
2311}
Jeff Johnson295189b2012-06-20 16:38:30 -07002312/*
2313 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
2314 * returns 1 if the compiled version is greater than or equal to the input version
2315 */
2316
2317uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2318{
2319 VOS_STATUS status = VOS_STATUS_SUCCESS;
2320 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2321 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002322 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002323 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
2324 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
2325 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
2326 (compiledVersion.revision >= revision)))
2327 return 1;
2328 else
2329 return 0;
2330}
Jeff Johnson295189b2012-06-20 16:38:30 -07002331/*
2332 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
2333 * returns 1 if the compiled version is greater than or equal to the input version
2334 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002335uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2336{
2337 VOS_STATUS status = VOS_STATUS_SUCCESS;
2338 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2339 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002340 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002341 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
2342 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
2343 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
2344 (reportedVersion.revision >= revision)))
2345 return 1;
2346 else
2347 return 0;
2348}
Jeff Johnson295189b2012-06-20 16:38:30 -07002349/*
2350 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
2351 * Returns the version of the WCNSS WLAN API with which the HOST
2352 * device driver was compiled
2353 */
2354VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
2355 tSirVersionType *pVersion)
2356{
2357 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002358 if ((NULL == pvosGCtx) || (NULL == pVersion))
2359 {
2360 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002361 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002362 VOS_ASSERT(0);
2363 return VOS_STATUS_E_FAILURE;
2364 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002365 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2366 if (NULL == pWDA )
2367 {
2368 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002369 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002370 VOS_ASSERT(0);
2371 return VOS_STATUS_E_FAILURE;
2372 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002373 *pVersion = pWDA->wcnssWlanCompiledVersion;
2374 return VOS_STATUS_SUCCESS;
2375}
Jeff Johnson295189b2012-06-20 16:38:30 -07002376/*
2377 * FUNCTION: WDA_GetWcnssWlanReportedVersion
2378 * Returns the version of the WCNSS WLAN API with which the WCNSS
2379 * device driver was compiled
2380 */
2381VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
2382 tSirVersionType *pVersion)
2383{
2384 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002385 if ((NULL == pvosGCtx) || (NULL == pVersion))
2386 {
2387 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002388 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002389 VOS_ASSERT(0);
2390 return VOS_STATUS_E_FAILURE;
2391 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002392 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2393 if (NULL == pWDA )
2394 {
2395 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002396 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002397 VOS_ASSERT(0);
2398 return VOS_STATUS_E_FAILURE;
2399 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002400 *pVersion = pWDA->wcnssWlanReportedVersion;
2401 return VOS_STATUS_SUCCESS;
2402}
Jeff Johnson295189b2012-06-20 16:38:30 -07002403/*
2404 * FUNCTION: WDA_GetWcnssSoftwareVersion
2405 * Returns the WCNSS Software version string
2406 */
2407VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
2408 tANI_U8 *pVersion,
2409 tANI_U32 versionBufferSize)
2410{
2411 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002412 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002413 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002414 if ((NULL == pvosGCtx) || (NULL == pVersion))
2415 {
2416 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002417 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002418 VOS_ASSERT(0);
2419 return VOS_STATUS_E_FAILURE;
2420 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002421 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2422 if (NULL == pWDA )
2423 {
2424 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002425 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002426 VOS_ASSERT(0);
2427 return VOS_STATUS_E_FAILURE;
2428 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002429 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
2430 return VOS_STATUS_SUCCESS;
2431}
Jeff Johnson295189b2012-06-20 16:38:30 -07002432/*
2433 * FUNCTION: WDA_GetWcnssHardwareVersion
2434 * Returns the WCNSS Hardware version string
2435 */
2436VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
2437 tANI_U8 *pVersion,
2438 tANI_U32 versionBufferSize)
2439{
2440 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002441 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002442 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002443 if ((NULL == pvosGCtx) || (NULL == pVersion))
2444 {
2445 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002446 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002447 VOS_ASSERT(0);
2448 return VOS_STATUS_E_FAILURE;
2449 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002450 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2451 if (NULL == pWDA )
2452 {
2453 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002454 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002455 VOS_ASSERT(0);
2456 return VOS_STATUS_E_FAILURE;
2457 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002458 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
2459 return VOS_STATUS_SUCCESS;
2460}
Jeff Johnson295189b2012-06-20 16:38:30 -07002461/*
2462 * FUNCTION: WDA_WniCfgDnld
2463 * Trigger CFG Download
2464 */
2465VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
2466{
2467 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302468 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnsonab81a082013-04-03 16:00:31 -07002469
Jeff Johnson295189b2012-06-20 16:38:30 -07002470 if (NULL == pMac )
2471 {
2472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002473 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002474 VOS_ASSERT(0);
2475 return VOS_STATUS_E_FAILURE;
2476 }
Sachin Ahujaa4b33a32014-06-18 13:22:00 +05302477 processCfgDownloadReq(pMac);
Jeff Johnson295189b2012-06-20 16:38:30 -07002478 return vosStatus;
2479}
Jeff Johnson295189b2012-06-20 16:38:30 -07002480/* -----------------------------------------------------------------
2481 * WDI interface
2482 * -----------------------------------------------------------------
2483 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002484/*
2485 * FUNCTION: WDA_suspendDataTxCallback
2486 * call back function called from TL after suspend Transmission
2487 */
2488VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2489 v_U8_t* ucSTAId,
2490 VOS_STATUS vosStatus)
2491{
2492 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002494 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002495 if (NULL == pWDA )
2496 {
2497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002498 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002499 VOS_ASSERT(0);
2500 return VOS_STATUS_E_FAILURE;
2501 }
2502 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2503 {
2504 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2505 }
2506 else
2507 {
2508 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2509 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002510 /* Trigger the event to bring the WDA TL suspend function to come
2511 * out of wait*/
2512 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2513 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2514 {
2515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002516 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002517 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002518 /* If TL suspended had timedout before this callback was called, resume back
2519 * TL.*/
2520 if (pWDA->txSuspendTimedOut)
2521 {
2522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002523 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07002524 WDA_ResumeDataTx(pWDA);
2525 pWDA->txSuspendTimedOut = FALSE;
2526 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002527 return VOS_STATUS_SUCCESS;
2528}
Jeff Johnson295189b2012-06-20 16:38:30 -07002529/*
2530 * FUNCTION: WDA_suspendDataTx
2531 * Update TL to suspend the data Transmission
2532 */
2533VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2534{
2535 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2536 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002537
2538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002539 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002540 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002541 if (pWDA->txSuspendTimedOut)
2542 {
2543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002544 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07002545 return status;
2546 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002547 /* Reset the event to be not signalled */
2548 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2549 if(!VOS_IS_STATUS_SUCCESS(status))
2550 {
2551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002552 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002553 return VOS_STATUS_E_FAILURE;
2554 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002555 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002556 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002557 WDA_SuspendDataTxCallback);
2558 if(status != VOS_STATUS_SUCCESS)
2559 {
2560 return status;
2561 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002562 /* Wait for the event to be set by the TL, to get the response of
2563 * suspending the TX queues, this event should be set by the Callback
2564 * function called by TL*/
2565 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2566 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2567 if(!VOS_IS_STATUS_SUCCESS(status))
2568 {
2569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2570 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002571 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002572 /* Set this flag to true when TL suspend times out, so that when TL
2573 * suspend eventually happens and calls the callback, TL can be resumed
2574 * right away by looking at this flag when true.*/
2575 pWDA->txSuspendTimedOut = TRUE;
2576 }
2577 else
2578 {
2579 pWDA->txSuspendTimedOut = FALSE;
2580 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002581 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2582 {
2583 status = VOS_STATUS_SUCCESS;
2584 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002585 return status;
2586}
Jeff Johnson295189b2012-06-20 16:38:30 -07002587/*
2588 * FUNCTION: WDA_resumeDataTx
2589 * Update TL to resume the data Transmission
2590 */
2591VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2592{
2593 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002594
2595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002596 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002597
2598 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002599 return status;
2600}
Jeff Johnson295189b2012-06-20 16:38:30 -07002601/*
2602 * FUNCTION: WDA_InitScanReqCallback
2603 * Trigger Init SCAN callback
2604 */
2605void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2606{
2607 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2608 tWDA_CbContext *pWDA;
2609 tInitScanParams *pWDA_ScanParam ;
2610 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002612 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002613 if(NULL == pWdaParams)
2614 {
2615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002616 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002617 VOS_ASSERT(0) ;
2618 return ;
2619 }
2620 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2621 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002622 if(NULL == pWDA_ScanParam)
2623 {
2624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002625 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002626 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002627 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2628 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002629 return ;
2630 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002631 if(WDI_STATUS_SUCCESS != wdiStatus)
2632 {
2633 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002634 if(VOS_STATUS_SUCCESS != status)
2635 {
2636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002637 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002638 }
2639 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002640 /* free WDI command buffer */
2641 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002642 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002643
Jeff Johnson295189b2012-06-20 16:38:30 -07002644
2645 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002646 /* without converting the Status to Failure or Success Just
2647 pass the same status to lim */
2648 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002649 /* send SCAN RSP message back to PE */
2650 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002651 return ;
2652}
2653
2654/*
2655 * FUNCTION: WDA_ProcessInitScanReq
2656 * Trigger Init SCAN in DAL
2657 */
2658VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2659 tInitScanParams *initScanParams)
2660{
2661 WDI_Status status = WDI_STATUS_SUCCESS ;
2662 WDI_InitScanReqParamsType *wdiInitScanParam =
2663 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2664 sizeof(WDI_InitScanReqParamsType)) ;
2665 tWDA_ReqParams *pWdaParams;
2666 tANI_U8 i = 0;
2667
2668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002669 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002670 if(NULL == wdiInitScanParam)
2671 {
2672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002673 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002674 VOS_ASSERT(0);
2675 return VOS_STATUS_E_NOMEM;
2676 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002677 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2678 if(NULL == pWdaParams)
2679 {
2680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002681 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002682 VOS_ASSERT(0);
2683 vos_mem_free(wdiInitScanParam);
2684 return VOS_STATUS_E_NOMEM;
2685 }
2686
2687 /* Copy init Scan params to WDI structure */
2688 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2689 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2690 sizeof(tSirMacAddr)) ;
2691 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2692 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2693 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002694 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2695 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07002696 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2697 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002698 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2699 {
2700 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2701 initScanParams->scanEntry.bssIdx[i] ;
2702 }
2703
2704 /* if Frame length, copy macMgmtHdr or WDI structure */
2705 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2706 {
2707 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2708 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2709 }
2710 wdiInitScanParam->wdiReqStatusCB = NULL ;
2711
Jeff Johnson295189b2012-06-20 16:38:30 -07002712 /* Store Init Req pointer, as this will be used for response */
2713 pWdaParams->pWdaContext = pWDA;
2714 pWdaParams->wdaMsgParam = initScanParams;
2715 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002716 /* first try to suspend TX */
2717 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002718 if(WDI_STATUS_SUCCESS != status)
2719 {
2720 goto handleWdiFailure;
2721 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002722 /* call DAL API to pass init scan request to DAL */
2723 status = WDI_InitScanReq(wdiInitScanParam,
2724 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002725 if(IS_WDI_STATUS_FAILURE(status))
2726 {
2727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2728 "error in WDA Init Scan, Resume Tx " );
2729 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002730 VOS_ASSERT(0) ;
2731
2732 goto handleWdiFailure;
2733 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002734 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002735handleWdiFailure:
2736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2737 "Failure in WDI Api, free all the memory " );
2738 /* free WDI command buffer */
2739 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2740 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002741 /* send Failure to PE */
2742 initScanParams->status = eSIR_FAILURE ;
2743 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002744 return CONVERT_WDI2VOS_STATUS(status) ;
2745}
2746
Jeff Johnson295189b2012-06-20 16:38:30 -07002747/*
2748 * FUNCTION: WDA_StartScanReqCallback
2749 * send Start SCAN RSP back to PE
2750 */
2751void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2752 void* pUserData)
2753{
2754 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2755 tWDA_CbContext *pWDA;
2756 tStartScanParams *pWDA_ScanParam;
2757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002758 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002759 if(NULL == pWdaParams)
2760 {
2761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002762 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002763 VOS_ASSERT(0) ;
2764 return ;
2765 }
2766 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2767 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002768 if(NULL == pWDA_ScanParam)
2769 {
2770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002771 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002772 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002773 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002774 return ;
2775 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002776 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2777 {
2778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002779 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002780 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002781 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002782 return ;
2783 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002784 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2785 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002786
Jeff Johnson295189b2012-06-20 16:38:30 -07002787
2788 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002789 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002790 /* send SCAN RSP message back to PE */
2791 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002792 return ;
2793}
2794
Jeff Johnson295189b2012-06-20 16:38:30 -07002795/*
2796 * FUNCTION: WDA_ProcessStartScanReq
2797 * Trigger start SCAN in WDI
2798 */
2799VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2800 tStartScanParams *startScanParams)
2801{
2802 WDI_Status status = WDI_STATUS_SUCCESS;
2803 WDI_StartScanReqParamsType *wdiStartScanParams =
2804 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2805 sizeof(WDI_StartScanReqParamsType)) ;
2806 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002808 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002809 if(NULL == wdiStartScanParams)
2810 {
2811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002812 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002813 VOS_ASSERT(0);
2814 return VOS_STATUS_E_NOMEM;
2815 }
2816 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2817 if(NULL == pWdaParams)
2818 {
2819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002820 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002821 VOS_ASSERT(0);
2822 vos_mem_free(wdiStartScanParams);
2823 return VOS_STATUS_E_NOMEM;
2824 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002825 /* Copy init Scan params to WDI structure */
2826 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2827 wdiStartScanParams->wdiReqStatusCB = NULL ;
2828
Jeff Johnson295189b2012-06-20 16:38:30 -07002829 /* Store Init Req pointer, as this will be used for response */
2830 /* store Params pass it to WDI */
2831 pWdaParams->pWdaContext = pWDA;
2832 pWdaParams->wdaMsgParam = startScanParams;
2833 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002834 /* call DAL API to pass init scan request to DAL */
2835 status = WDI_StartScanReq(wdiStartScanParams,
2836 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002837 /* failure returned by WDI API */
2838 if(IS_WDI_STATUS_FAILURE(status))
2839 {
2840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2841 "Failure in Start Scan WDI API, free all the memory "
2842 "It should be due to previous abort scan." );
2843 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2844 vos_mem_free(pWdaParams) ;
2845 startScanParams->status = eSIR_FAILURE ;
2846 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2847 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002848 return CONVERT_WDI2VOS_STATUS(status) ;
2849}
Jeff Johnson295189b2012-06-20 16:38:30 -07002850/*
2851 * FUNCTION: WDA_EndScanReqCallback
2852 * END SCAN callback
2853 */
2854void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2855{
2856 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2857 tWDA_CbContext *pWDA;
2858 tEndScanParams *endScanParam;
2859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002860 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002861 if(NULL == pWdaParams)
2862 {
2863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002864 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002865 VOS_ASSERT(0) ;
2866 return ;
2867 }
2868 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2869 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002870 if(NULL == endScanParam)
2871 {
2872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002873 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002874 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002875 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2876 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002877 return ;
2878 }
2879
2880 /* Free WDI command buffer */
2881 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2882 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002883 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002884 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002885 /* send response back to PE */
2886 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2887 return ;
2888}
2889
Jeff Johnson295189b2012-06-20 16:38:30 -07002890/*
2891 * FUNCTION: WDA_ProcessEndScanReq
2892 * Trigger END SCAN in WDI
2893 */
2894VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2895 tEndScanParams *endScanParams)
2896{
2897 WDI_Status status = WDI_STATUS_SUCCESS;
2898 WDI_EndScanReqParamsType *wdiEndScanParams =
2899 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2900 sizeof(WDI_EndScanReqParamsType)) ;
2901 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002903 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002904 if(NULL == wdiEndScanParams)
2905 {
2906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002907 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002908 VOS_ASSERT(0);
2909 return VOS_STATUS_E_NOMEM;
2910 }
2911 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2912 if(NULL == pWdaParams)
2913 {
2914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002915 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002916 VOS_ASSERT(0);
2917 vos_mem_free(wdiEndScanParams);
2918 return VOS_STATUS_E_NOMEM;
2919 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002920 /* Copy init Scan params to WDI structure */
2921 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2922 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002923 /* Store Init Req pointer, as this will be used for response */
2924 /* store Params pass it to WDI */
2925 pWdaParams->pWdaContext = pWDA;
2926 pWdaParams->wdaMsgParam = endScanParams;
2927 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002928 /* call DAL API to pass init scan request to DAL */
2929 status = WDI_EndScanReq(wdiEndScanParams,
2930 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002931 if(IS_WDI_STATUS_FAILURE(status))
2932 {
2933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2934 "Failure in End Scan WDI API, free all the memory "
2935 "It should be due to previous abort scan." );
2936 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2937 vos_mem_free(pWdaParams) ;
2938 endScanParams->status = eSIR_FAILURE ;
2939 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2940 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002941 return CONVERT_WDI2VOS_STATUS(status) ;
2942}
Jeff Johnson295189b2012-06-20 16:38:30 -07002943/*
2944 * FUNCTION: WDA_FinishScanReqCallback
2945 * Trigger Finish SCAN callback
2946 */
2947void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2948{
2949 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2950 tWDA_CbContext *pWDA;
2951 tFinishScanParams *finishScanParam;
2952 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002954 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002955 if(NULL == pWdaParams)
2956 {
2957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002958 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002959 VOS_ASSERT(0) ;
2960 return ;
2961 }
2962
2963 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2964 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002965 if(NULL == finishScanParam)
2966 {
2967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002968 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002969 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002970 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2971 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002972 return ;
2973 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002974 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2975 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002976 /*
2977 * Now Resume TX, if we reached here means, TX is already suspended, we
2978 * have to resume it unconditionaly
2979 */
2980 status = WDA_ResumeDataTx(pWDA) ;
2981
2982 if(VOS_STATUS_SUCCESS != status)
2983 {
2984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002985 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002986 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002987 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002988 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
2989 return ;
2990}
Jeff Johnson295189b2012-06-20 16:38:30 -07002991/*
2992 * FUNCTION: WDA_ProcessFinshScanReq
2993 * Trigger Finish SCAN in WDI
2994 */
2995VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
2996 tFinishScanParams *finishScanParams)
2997{
2998 WDI_Status status = WDI_STATUS_SUCCESS;
2999 WDI_FinishScanReqParamsType *wdiFinishScanParams =
3000 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
3001 sizeof(WDI_FinishScanReqParamsType)) ;
3002 tWDA_ReqParams *pWdaParams ;
3003 tANI_U8 i = 0;
3004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003005 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003006 if(NULL == wdiFinishScanParams)
3007 {
3008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003009 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003010 VOS_ASSERT(0);
3011 return VOS_STATUS_E_NOMEM;
3012 }
3013 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3014 if(NULL == pWdaParams)
3015 {
3016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003017 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003018 VOS_ASSERT(0);
3019 vos_mem_free(wdiFinishScanParams);
3020 return VOS_STATUS_E_NOMEM;
3021 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003022 /* Copy init Scan params to WDI structure */
3023 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
3024 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
3025 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003026 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
3027 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
3028 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
3029 finishScanParams->frameLength ;
3030 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
3031 finishScanParams->currentOperChannel ;
3032 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
3033 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
3034 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003035 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
3036 {
3037 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
3038 finishScanParams->scanEntry.bssIdx[i] ;
3039 }
3040
3041
Jeff Johnson295189b2012-06-20 16:38:30 -07003042 /* if Frame length, copy macMgmtHdr ro WDI structure */
3043 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
3044 {
3045 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
3046 &finishScanParams->macMgmtHdr,
3047 sizeof(WDI_MacMgmtHdr)) ;
3048 }
3049 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003050 /* Store Init Req pointer, as this will be used for response */
3051 /* store Params pass it to WDI */
3052 pWdaParams->pWdaContext = pWDA;
3053 pWdaParams->wdaMsgParam = finishScanParams;
3054 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003055 /* call DAL API to pass init scan request to DAL */
3056 status = WDI_FinishScanReq(wdiFinishScanParams,
3057 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07003058
Jeff Johnson295189b2012-06-20 16:38:30 -07003059
3060 /*
3061 * WDI API returns failure..
3062 */
3063 if(IS_WDI_STATUS_FAILURE( status))
3064 {
3065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3066 "Failure in Finish Scan WDI API, free all the memory " );
3067 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3068 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003069 finishScanParams->status = eSIR_FAILURE ;
3070 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
3071 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003072 return CONVERT_WDI2VOS_STATUS(status) ;
3073}
Jeff Johnson295189b2012-06-20 16:38:30 -07003074/*---------------------------------------------------------------------
3075 * ASSOC API's
3076 *---------------------------------------------------------------------
3077 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003078/*
Sachin Ahuja935eda782014-07-30 14:57:41 +05303079 * FUNCTION: WDA_JoinRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07003080 * Trigger Init SCAN callback
3081 */
Sachin Ahuja935eda782014-07-30 14:57:41 +05303082void WDA_JoinRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07003083{
3084 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3085 tWDA_CbContext *pWDA;
3086 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003088 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003089 if(NULL == pWdaParams)
3090 {
3091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003092 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003093 VOS_ASSERT(0) ;
3094 return ;
3095 }
3096 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3097 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003098 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3099 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003100 /* reset macBSSID */
3101 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07003102 /* reset macSTASelf */
3103 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003104 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003105 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003106 return ;
3107}
Sachin Ahuja935eda782014-07-30 14:57:41 +05303108
3109/*
3110 * FUNCTION: WDA_JoinReqCallback
3111 * Free memory and send SWITCH CHANNEL RSP back to PE.
3112 * Invoked when Enter JOIN REQ failed in WDI and no RSP callback is generated.
3113 */
3114void WDA_JoinReqCallback(WDI_Status wdiStatus, void* pUserData)
3115{
3116 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3117 tWDA_CbContext *pWDA;
3118 tSwitchChannelParams *joinReqParam;
3119
3120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3121 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
3122
3123 if(NULL == pWdaParams)
3124 {
3125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3126 "%s: pWdaParams received NULL", __func__);
3127 VOS_ASSERT(0);
3128 return;
3129 }
3130
3131 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3132 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3133 joinReqParam->status = wdiStatus;
3134
3135 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3136 {
3137 /* reset macBSSID */
3138 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
3139 /* reset macSTASelf */
3140 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
3141
3142 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3143 vos_mem_free(pWdaParams);
3144 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
3145 }
3146
3147 return;
3148}
3149
Jeff Johnson295189b2012-06-20 16:38:30 -07003150/*
3151 * FUNCTION: WDA_ProcessJoinReq
3152 * Trigger Join REQ in WDI
3153 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003154VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
3155 tSwitchChannelParams* joinReqParam)
3156{
3157 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003158 WDI_JoinReqParamsType *wdiJoinReqParam =
3159 (WDI_JoinReqParamsType *)vos_mem_malloc(
3160 sizeof(WDI_JoinReqParamsType)) ;
3161 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003163 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003164 if(NULL == wdiJoinReqParam)
3165 {
3166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003167 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003168 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003169 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003170 return VOS_STATUS_E_NOMEM;
3171 }
3172 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3173 if(NULL == pWdaParams)
3174 {
3175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003176 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003177 VOS_ASSERT(0);
3178 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003179 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003180 return VOS_STATUS_E_NOMEM;
3181 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003182
3183 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
3184 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
3185 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
3186 {
3187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3188 "%s: received join request when BSSID or self-STA is NULL "
3189 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003190 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003191 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
3192 VOS_ASSERT(0);
3193 vos_mem_free(wdiJoinReqParam);
3194 vos_mem_free(pWdaParams);
3195 joinReqParam->status = eSIR_FAILURE ;
3196 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3197 return VOS_STATUS_E_INVAL;
3198 }
3199
Jeff Johnson295189b2012-06-20 16:38:30 -07003200 /* copy the BSSID for pWDA */
3201 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
3202 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003203 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
3204 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003205 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
3206 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07003207#ifdef WLAN_FEATURE_VOWIFI
3208 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
3209 joinReqParam->maxTxPower ;
3210#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003211 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
3212 joinReqParam->localPowerConstraint ;
3213#endif
3214 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
3215 joinReqParam->secondaryChannelOffset ;
3216 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
3217
Sachin Ahuja935eda782014-07-30 14:57:41 +05303218 wdiJoinReqParam->wdiReqStatusCB = WDA_JoinReqCallback;
3219 wdiJoinReqParam->pUserData = pWdaParams;
3220
Jeff Johnson295189b2012-06-20 16:38:30 -07003221 /* Store Init Req pointer, as this will be used for response */
3222 /* store Params pass it to WDI */
3223 pWdaParams->pWdaContext = pWDA;
3224 pWdaParams->wdaMsgParam = joinReqParam;
3225 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003226 status = WDI_JoinReq(wdiJoinReqParam,
Sachin Ahuja935eda782014-07-30 14:57:41 +05303227 (WDI_JoinRspCb )WDA_JoinRspCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003228 if(IS_WDI_STATUS_FAILURE(status))
3229 {
3230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3231 "Failure in Join WDI API, free all the memory " );
3232 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3233 vos_mem_free(pWdaParams) ;
3234 joinReqParam->status = eSIR_FAILURE ;
3235 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3236 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003237 return CONVERT_WDI2VOS_STATUS(status) ;
3238}
Jeff Johnson295189b2012-06-20 16:38:30 -07003239/*
3240 * FUNCTION: WDA_SwitchChannelReqCallback
3241 * send Switch channel RSP back to PE
3242 */
3243void WDA_SwitchChannelReqCallback(
3244 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
3245{
3246 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3247 tWDA_CbContext *pWDA;
3248 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003250 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003251 if(NULL == pWdaParams)
3252 {
3253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003254 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003255 VOS_ASSERT(0) ;
3256 return ;
3257 }
3258 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3259 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3260
3261#ifdef WLAN_FEATURE_VOWIFI
3262 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
3263#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003264 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3265 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003266 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003267 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003268 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003269 return ;
3270}
Jeff Johnson295189b2012-06-20 16:38:30 -07003271/*
3272 * FUNCTION: WDA_ProcessChannelSwitchReq
3273 * Request to WDI to switch channel REQ params.
3274 */
3275VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
3276 tSwitchChannelParams *pSwitchChanParams)
3277{
3278 WDI_Status status = WDI_STATUS_SUCCESS ;
3279 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
3280 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
3281 sizeof(WDI_SwitchChReqParamsType)) ;
3282 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003284 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003285 if(NULL == wdiSwitchChanParam)
3286 {
3287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003288 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003289 VOS_ASSERT(0);
3290 return VOS_STATUS_E_NOMEM;
3291 }
3292 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3293 if(NULL == pWdaParams)
3294 {
3295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003296 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003297 VOS_ASSERT(0);
3298 vos_mem_free(wdiSwitchChanParam);
3299 return VOS_STATUS_E_NOMEM;
3300 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003301 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
3302#ifndef WLAN_FEATURE_VOWIFI
3303 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3304 pSwitchChanParams->localPowerConstraint;
3305#endif
3306 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3307 pSwitchChanParams->secondaryChannelOffset;
3308 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003309 /* Store req pointer, as this will be used for response */
3310 /* store Params pass it to WDI */
3311 pWdaParams->pWdaContext = pWDA;
3312 pWdaParams->wdaMsgParam = pSwitchChanParams;
3313 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003314#ifdef WLAN_FEATURE_VOWIFI
3315 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
3316 = pSwitchChanParams->maxTxPower;
3317 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3318 pSwitchChanParams ->selfStaMacAddr,
3319 sizeof(tSirMacAddr));
3320#endif
3321 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3322 pSwitchChanParams->bssId,
3323 sizeof(tSirMacAddr));
3324
3325 status = WDI_SwitchChReq(wdiSwitchChanParam,
3326 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003327 if(IS_WDI_STATUS_FAILURE(status))
3328 {
3329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3330 "Failure in process channel switch Req WDI API, free all the memory " );
3331 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3332 vos_mem_free(pWdaParams) ;
3333 pSwitchChanParams->status = eSIR_FAILURE ;
3334 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
3335 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003336 return CONVERT_WDI2VOS_STATUS(status) ;
3337}
Kalikinkar dhara1e83b772014-02-06 12:59:22 -08003338
3339/*
3340 * FUNCTION: WDA_SwitchChannelReqCallback_V1
3341 * send Switch channel RSP back to PE
3342 */
3343void WDA_SwitchChannelReqCallback_V1(
3344 WDI_SwitchChRspParamsType_V1 *wdiSwitchChanRsp,
3345 void* pUserData)
3346{
3347 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3348 tWDA_CbContext *pWDA;
3349 tSwitchChannelParams *pSwitchChanParams;
3350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3351 "<------ %s " ,__func__);
3352
3353 if (NULL == pWdaParams)
3354 {
3355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3356 "%s: pWdaParams received NULL", __func__);
3357 VOS_ASSERT(0);
3358 return ;
3359 }
3360 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3361 pSwitchChanParams =
3362 (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3363 pSwitchChanParams->channelSwitchSrc =
3364 wdiSwitchChanRsp->channelSwitchSrc;
3365#ifdef WLAN_FEATURE_VOWIFI
3366 pSwitchChanParams->txMgmtPower =
3367 wdiSwitchChanRsp->ucTxMgmtPower;
3368#endif
3369 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3370 vos_mem_free(pWdaParams);
3371 pSwitchChanParams->status =
3372 wdiSwitchChanRsp->wdiStatus ;
3373 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3374 (void *)pSwitchChanParams , 0);
3375 return;
3376}
3377
3378/*
3379 * FUNCTION: WDA_ProcessChannelSwitchReq_V1
3380 * Request to WDI to switch channel REQ params.
3381 */
3382VOS_STATUS WDA_ProcessChannelSwitchReq_V1(tWDA_CbContext *pWDA,
3383 tSwitchChannelParams *pSwitchChanParams)
3384{
3385 WDI_Status status = WDI_STATUS_SUCCESS ;
3386 WDI_SwitchChReqParamsType_V1 *wdiSwitchChanParam =
3387 (WDI_SwitchChReqParamsType_V1 *)vos_mem_malloc(
3388 sizeof(WDI_SwitchChReqParamsType_V1)) ;
3389 tWDA_ReqParams *pWdaParams ;
3390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3391 "------> %s " ,__func__);
3392 if (NULL == wdiSwitchChanParam)
3393 {
3394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3395 "%s: VOS MEM Alloc Failure", __func__);
3396 VOS_ASSERT(0);
3397 return VOS_STATUS_E_NOMEM;
3398 }
3399 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3400 if (NULL == pWdaParams)
3401 {
3402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3403 "%s: VOS MEM Alloc Failure", __func__);
3404 VOS_ASSERT(0);
3405 vos_mem_free(wdiSwitchChanParam);
3406 return VOS_STATUS_E_NOMEM;
3407 }
3408 wdiSwitchChanParam->wdiChInfo.channelSwitchSrc =
3409 pSwitchChanParams->channelSwitchSrc;
3410
3411 wdiSwitchChanParam->wdiChInfo.ucChannel =
3412 pSwitchChanParams->channelNumber;
3413#ifndef WLAN_FEATURE_VOWIFI
3414 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3415 pSwitchChanParams->localPowerConstraint;
3416#endif
3417 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3418 pSwitchChanParams->secondaryChannelOffset;
3419 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
3420 /* Store req pointer, as this will be used for response */
3421 /* store Params pass it to WDI */
3422 pWdaParams->pWdaContext = pWDA;
3423 pWdaParams->wdaMsgParam = pSwitchChanParams;
3424 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
3425#ifdef WLAN_FEATURE_VOWIFI
3426 wdiSwitchChanParam->wdiChInfo.cMaxTxPower =
3427 pSwitchChanParams->maxTxPower;
3428 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3429 pSwitchChanParams ->selfStaMacAddr,
3430 sizeof(tSirMacAddr));
3431#endif
3432 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3433 pSwitchChanParams->bssId,
3434 sizeof(tSirMacAddr));
3435
3436 status = WDI_SwitchChReq_V1(wdiSwitchChanParam,
3437 (WDI_SwitchChRspCb_V1)WDA_SwitchChannelReqCallback_V1,
3438 pWdaParams);
3439 if (IS_WDI_STATUS_FAILURE(status))
3440 {
3441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3442 "Failure in process channel switch Req WDI "
3443 "API, free all the memory " );
3444 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3445 vos_mem_free(pWdaParams) ;
3446 pSwitchChanParams->status = eSIR_FAILURE ;
3447 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3448 (void *)pSwitchChanParams, 0) ;
3449 }
3450 return CONVERT_WDI2VOS_STATUS(status) ;
3451}
3452
Jeff Johnson295189b2012-06-20 16:38:30 -07003453/*
3454 * FUNCTION: WDA_ConfigBssReqCallback
3455 * config BSS Req Callback, called by WDI
3456 */
3457void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
3458 ,void* pUserData)
3459{
3460 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3461 tWDA_CbContext *pWDA;
3462 tAddBssParams *configBssReqParam;
3463 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003465 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003466 if(NULL == pWdaParams)
3467 {
3468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003469 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003470 VOS_ASSERT(0) ;
3471 return ;
3472 }
3473 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3474 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
3475 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003476 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003477 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003478 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
3479 {
3480 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
3481 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003482 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
3483 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
3484 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
3485
3486 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
3487 {
3488 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
3489 {
3490 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
3491 staConfigBssParam->staType = STA_ENTRY_BSSID;
3492 }
3493 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
3494 (staConfigBssParam->staType == STA_ENTRY_SELF))
3495 {
3496 /* This is the 1st add BSS Req for the BTAMP STA */
3497 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3498 staConfigBssParam->staType = STA_ENTRY_BSSID;
3499 }
3500 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3501 (staConfigBssParam->staType == STA_ENTRY_PEER))
3502 {
3503 /* This is the 2nd ADD BSS Request that is sent
3504 * on the BTAMP STA side. The Sta type is
3505 * set to STA_ENTRY_PEER here.*/
3506 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3507 }
3508 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3509 (staConfigBssParam->staType == STA_ENTRY_SELF))
3510 {
3511 /* statype is already set by PE.
3512 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
3513 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
3514 staConfigBssParam->staType = STA_ENTRY_BSSID;
3515 }
3516 else
3517 {
3518 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
3519 staConfigBssParam->staType = STA_ENTRY_PEER;
3520 }
3521 }
3522 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
3523 {
3524 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
3525 staConfigBssParam->staType = STA_ENTRY_SELF;
3526 }
3527 else
3528 {
3529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3530 "Invalid operation mode specified");
3531 VOS_ASSERT(0);
3532 }
3533
3534 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003535 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003536 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003537 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003538 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
3539 sizeof(tSirMacAddr));
3540 staConfigBssParam->txChannelWidthSet =
3541 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07003542 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
3543 staConfigBssParam->htCapable)
3544 {
3545 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
3546 wdiConfigBssRsp->ucBSSIdx;
3547 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
3548 WDA_VALID_STA_INDEX ;
Abhishek Singh0644e482014-10-06 18:38:23 +05303549 pWDA->wdaStaInfo[staConfigBssParam->staIdx].currentOperChan =
3550 configBssReqParam->currentOperChannel;
Jeff Johnson295189b2012-06-20 16:38:30 -07003551 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003552 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
3553 wdiConfigBssRsp->ucBSSIdx,
3554 wdiConfigBssRsp->ucSTAIdx))
3555 {
3556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003557 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003558 VOS_ASSERT(0) ;
3559 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003560 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
3561 {
3562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003563 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003564 VOS_ASSERT(0) ;
3565 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003566#ifdef WLAN_FEATURE_VOWIFI
3567 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
3568#endif
3569 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05303570 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
3571 sizeof(WDI_ConfigBSSReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07003572 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3573 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003574 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003575 return ;
3576}
Jeff Johnson295189b2012-06-20 16:38:30 -07003577/*
3578 * FUNCTION: WDA_UpdateEdcaParamsForAC
3579 * Update WDI EDCA params with PE edca params
3580 */
3581void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
3582 WDI_EdcaParamRecord *wdiEdcaParam,
3583 tSirMacEdcaParamRecord *macEdcaParam)
3584{
3585 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
3586 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
3587 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
3588 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
3589 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
3590 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
3591}
Jeff Johnson295189b2012-06-20 16:38:30 -07003592/*
3593 * FUNCTION: WDA_ProcessConfigBssReq
3594 * Configure BSS before starting Assoc with AP
3595 */
3596VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
3597 tAddBssParams* configBssReqParam)
3598{
3599 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303600 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003601 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003603 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303604 if (NULL == configBssReqParam)
3605 {
3606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3607 "%s: configBssReqParam is NULL", __func__);
3608 return VOS_STATUS_E_INVAL;
3609 }
3610
3611 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
3612 sizeof(WDI_ConfigBSSReqParamsType)) ;
3613
Jeff Johnson295189b2012-06-20 16:38:30 -07003614 if(NULL == wdiConfigBssReqParam)
3615 {
3616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003617 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003618 VOS_ASSERT(0);
3619 return VOS_STATUS_E_NOMEM;
3620 }
3621 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3622 if(NULL == pWdaParams)
3623 {
3624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003625 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003626 VOS_ASSERT(0);
3627 vos_mem_free(wdiConfigBssReqParam);
3628 return VOS_STATUS_E_NOMEM;
3629 }
Kiran4a17ebe2013-01-31 10:43:43 -08003630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3631 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07003632 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003633 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
3634 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003635 /* Store Init Req pointer, as this will be used for response */
3636 /* store Params pass it to WDI */
3637 pWdaParams->pWdaContext = pWDA;
3638 pWdaParams->wdaMsgParam = configBssReqParam;
3639 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003640 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
3641 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003642 if(IS_WDI_STATUS_FAILURE(status))
3643 {
3644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3645 "Failure in Config BSS WDI API, free all the memory " );
3646 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3647 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003648 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003649 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
3650 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003651 return CONVERT_WDI2VOS_STATUS(status) ;
3652}
Jeff Johnson295189b2012-06-20 16:38:30 -07003653#ifdef ENABLE_HAL_COMBINED_MESSAGES
3654/*
3655 * FUNCTION: WDA_PostAssocReqCallback
3656 * Post ASSOC req callback, send RSP back to PE
3657 */
3658void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
3659 void* pUserData)
3660{
3661 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3662 tPostAssocParams *postAssocReqParam =
3663 (tPostAssocParams *)pWDA->wdaMsgParam ;
3664 /*STA context within the BSS Params*/
3665 tAddStaParams *staPostAssocParam =
3666 &postAssocReqParam->addBssParams.staContext ;
3667 /*STA Params for self STA*/
3668 tAddStaParams *selfStaPostAssocParam =
3669 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003671 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003672 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003673 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003674 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
3675 {
3676 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
3677 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
3678 sizeof(tSirMacAddr)) ;
3679 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
3680 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
3681 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003682 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
3683 }
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05303684 vos_mem_zero(pWDA->wdaWdiApiMsgParam, sizeof(WDI_PostAssocReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07003685 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3686 pWDA->wdaWdiApiMsgParam = NULL;
3687 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003688 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003689 return ;
3690}
Jeff Johnson295189b2012-06-20 16:38:30 -07003691/*
3692 * FUNCTION: WDA_ProcessPostAssocReq
3693 * Trigger POST ASSOC processing in WDI
3694 */
3695VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
3696 tPostAssocParams *postAssocReqParam)
3697{
Jeff Johnson295189b2012-06-20 16:38:30 -07003698 WDI_Status status = WDI_STATUS_SUCCESS ;
3699
3700 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
3701 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
3702 sizeof(WDI_PostAssocReqParamsType)) ;
3703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003704 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003705
Jeff Johnson295189b2012-06-20 16:38:30 -07003706 if(NULL == wdiPostAssocReqParam)
3707 {
3708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003709 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003710 VOS_ASSERT(0);
3711 return VOS_STATUS_E_NOMEM;
3712 }
3713
3714 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
3715 {
3716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003717 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003718 VOS_ASSERT(0);
3719 return VOS_STATUS_E_FAILURE;
3720 }
3721
Jeff Johnson295189b2012-06-20 16:38:30 -07003722 /* update BSS params into WDI structure */
3723 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3724 &postAssocReqParam->addBssParams) ;
3725 /* update STA params into WDI structure */
3726 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3727 &postAssocReqParam->addStaParams) ;
3728
3729 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3730 postAssocReqParam->addBssParams.highPerformance;
3731 WDA_UpdateEdcaParamsForAC(pWDA,
3732 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3733 &postAssocReqParam->addBssParams.acbe);
3734 WDA_UpdateEdcaParamsForAC(pWDA,
3735 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3736 &postAssocReqParam->addBssParams.acbk);
3737 WDA_UpdateEdcaParamsForAC(pWDA,
3738 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3739 &postAssocReqParam->addBssParams.acvi);
3740 WDA_UpdateEdcaParamsForAC(pWDA,
3741 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3742 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003743 /* Store Init Req pointer, as this will be used for response */
3744 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003745 /* store Params pass it to WDI */
3746 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003747 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3748 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003749 if(IS_WDI_STATUS_FAILURE(status))
3750 {
3751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3752 "Failure in Post Assoc WDI API, free all the memory " );
3753 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3754 pWDA->wdaWdiApiMsgParam = NULL;
3755 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003756 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003757 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3758 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003759 return CONVERT_WDI2VOS_STATUS(status) ;
3760}
3761#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003762/*
3763 * FUNCTION: WDA_AddStaReqCallback
3764 * ADD STA req callback, send RSP back to PE
3765 */
3766void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3767 void* pUserData)
3768{
3769 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3770 tWDA_CbContext *pWDA;
3771 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003773 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003774 if(NULL == pWdaParams)
3775 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003777 VOS_ASSERT(0) ;
3778 return ;
3779 }
3780 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3781 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003782 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003783 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003784 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3785 {
3786 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3787 /*TODO: UMAC structure doesn't have these fields*/
3788 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3789 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3790 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3791 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3792 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3793 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003794#ifdef FEATURE_WLAN_TDLS
3795 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3796 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3797#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003798 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003799#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003800 {
3801 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3802 wdiConfigStaRsp->ucBssIdx;
3803 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3804 WDA_VALID_STA_INDEX ;
Abhishek Singhf08a82b2014-10-07 11:00:42 +05303805 pWDA->wdaStaInfo[addStaReqParam->staIdx].currentOperChan =
3806 addStaReqParam->currentOperChan;
Jeff Johnson295189b2012-06-20 16:38:30 -07003807 }
3808 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3809 {
3810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003811 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003812 VOS_ASSERT(0) ;
3813 return ;
3814 }
3815 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003816 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3817 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003818 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003819 return ;
3820}
Jeff Johnson295189b2012-06-20 16:38:30 -07003821/*
3822 * FUNCTION: WDA_ConfigStaReq
3823 * Trigger Config STA processing in WDI
3824 */
3825VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3826 tAddStaParams *addStaReqParam)
3827{
Jeff Johnson295189b2012-06-20 16:38:30 -07003828 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003829 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3830 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3831 sizeof(WDI_ConfigSTAReqParamsType)) ;
3832 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003834 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003835 if(NULL == wdiConfigStaReqParam)
3836 {
3837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003838 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003839 VOS_ASSERT(0);
3840 return VOS_STATUS_E_NOMEM;
3841 }
3842 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3843 if(NULL == pWdaParams)
3844 {
3845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003846 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003847 VOS_ASSERT(0);
3848 vos_mem_free(wdiConfigStaReqParam);
3849 return VOS_STATUS_E_NOMEM;
3850 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003851 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003852 /* update STA params into WDI structure */
3853 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3854 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003855 /* Store Init Req pointer, as this will be used for response */
3856 /* store Params pass it to WDI */
3857 pWdaParams->pWdaContext = pWDA;
3858 pWdaParams->wdaMsgParam = addStaReqParam;
3859 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003860 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3861 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003862 if(IS_WDI_STATUS_FAILURE(status))
3863 {
3864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3865 "Failure in Config STA WDI API, free all the memory " );
3866 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3867 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003868 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003869 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3870 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003871 return CONVERT_WDI2VOS_STATUS(status) ;
3872}
Jeff Johnson295189b2012-06-20 16:38:30 -07003873/*
3874 * FUNCTION: WDA_DelBSSReqCallback
3875 * Dens DEL BSS RSP back to PE
3876 */
3877void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3878 void* pUserData)
3879{
3880 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3881 tWDA_CbContext *pWDA;
3882 tDeleteBssParams *delBssReqParam;
3883 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003885 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003886 if(NULL == pWdaParams)
3887 {
3888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003889 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003890 VOS_ASSERT(0) ;
3891 return ;
3892 }
3893 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3894 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003895 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003896 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3897 {
3898 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3899 sizeof(tSirMacAddr)) ;
3900 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003901 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3902 {
3903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003904 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003905 VOS_ASSERT(0) ;
3906 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003907 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3908 {
3909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003910 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003911 VOS_ASSERT(0) ;
3912 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003913 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3914 {
3915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003916 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003917 VOS_ASSERT(0) ;
3918 }
Mihir Shete2ab1d492014-06-04 14:21:05 +05303919
3920 WLANTL_StartForwarding(staIdx,0,0);
3921
Jeff Johnson295189b2012-06-20 16:38:30 -07003922 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3923 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003924 /* reset the the system role*/
3925 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3926
3927 /* Reset the BA related information */
3928 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3929 {
3930 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3931 {
3932 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3933 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05303934 pWDA->wdaStaInfo[staIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003935 /* Reset framesTxed counters here */
3936 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3937 {
3938 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3939 }
3940 }
3941 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003942 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003943 return ;
3944}
3945
Jeff Johnson295189b2012-06-20 16:38:30 -07003946/*
3947 * FUNCTION: WDA_ProcessDelBssReq
3948 * Init DEL BSS req with WDI
3949 */
3950VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3951 tDeleteBssParams *delBssParam)
3952{
3953 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003954 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3955 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3956 sizeof(WDI_DelBSSReqParamsType)) ;
3957 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003959 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003960 if(NULL == wdiDelBssReqParam)
3961 {
3962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003963 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003964 VOS_ASSERT(0);
3965 return VOS_STATUS_E_NOMEM;
3966 }
3967 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3968 if(NULL == pWdaParams)
3969 {
3970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003971 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003972 VOS_ASSERT(0);
3973 vos_mem_free(wdiDelBssReqParam);
3974 return VOS_STATUS_E_NOMEM;
3975 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003976 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
3977 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
3978
3979 /* Store Init Req pointer, as this will be used for response */
3980 /* store Params pass it to WDI */
3981 pWdaParams->pWdaContext = pWDA;
3982 pWdaParams->wdaMsgParam = delBssParam;
3983 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003984 status = WDI_DelBSSReq(wdiDelBssReqParam,
3985 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003986 if(IS_WDI_STATUS_FAILURE(status))
3987 {
3988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3989 "Failure in Del BSS WDI API, free all the memory " );
3990 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3991 vos_mem_free(pWdaParams) ;
3992 delBssParam->status = eSIR_FAILURE ;
3993 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
3994 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003995 return CONVERT_WDI2VOS_STATUS(status) ;
3996}
Jeff Johnson295189b2012-06-20 16:38:30 -07003997/*
3998 * FUNCTION: WDA_DelSTAReqCallback
3999 * Dens DEL STA RSP back to PE
4000 */
4001void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
4002 void* pUserData)
4003{
4004 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4005 tWDA_CbContext *pWDA;
4006 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004008 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004009 if(NULL == pWdaParams)
4010 {
4011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004012 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004013 VOS_ASSERT(0) ;
4014 return ;
4015 }
4016 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4017 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004018 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004019 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
4020 {
4021 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
4022 {
4023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004024 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004025 VOS_ASSERT(0) ;
4026 }
4027 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
Mihir Shete2ab1d492014-06-04 14:21:05 +05304028 WLANTL_StartForwarding(delStaReqParam->staIdx,0,0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004029 }
4030 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4031 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004032 /*Reset the BA information corresponding to this STAIdx */
4033 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
4034 WDA_INVALID_STA_INDEX;
4035 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
Abhishek Singh0644e482014-10-06 18:38:23 +05304036 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].currentOperChan = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004037 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004038 return ;
4039}
Jeff Johnson295189b2012-06-20 16:38:30 -07004040/*
4041 * FUNCTION: WDA_ProcessDelStaReq
4042 * Init DEL STA req with WDI
4043 */
4044VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
4045 tDeleteStaParams *delStaParam)
4046{
4047 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004048 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
4049 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
4050 sizeof(WDI_DelSTAReqParamsType)) ;
4051 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004053 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004054 if(NULL == wdiDelStaReqParam)
4055 {
4056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004057 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004058 VOS_ASSERT(0);
4059 return VOS_STATUS_E_NOMEM;
4060 }
4061 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4062 if(NULL == pWdaParams)
4063 {
4064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004065 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004066 VOS_ASSERT(0);
4067 vos_mem_free(wdiDelStaReqParam);
4068 return VOS_STATUS_E_NOMEM;
4069 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004070 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
4071 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004072 /* Store Init Req pointer, as this will be used for response */
4073 /* store Params pass it to WDI */
4074 pWdaParams->pWdaContext = pWDA;
4075 pWdaParams->wdaMsgParam = delStaParam;
4076 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004077 status = WDI_DelSTAReq(wdiDelStaReqParam,
4078 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004079 if(IS_WDI_STATUS_FAILURE(status))
4080 {
4081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4082 "Failure in Del STA WDI API, free all the memory status = %d",
4083 status );
4084 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4085 vos_mem_free(pWdaParams) ;
4086 delStaParam->status = eSIR_FAILURE ;
4087 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
4088 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004089 return CONVERT_WDI2VOS_STATUS(status) ;
4090}
Jeff Johnson295189b2012-06-20 16:38:30 -07004091void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
4092{
4093 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4094 tWDA_CbContext *pWDA;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304095 tAddStaSelfParams *pAddStaSelfRsp = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004097 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004098 if(NULL == pWdaParams)
4099 {
4100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004101 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004102 VOS_ASSERT(0) ;
4103 return ;
4104 }
4105 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4106 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004107 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4108 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004109 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
4110 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
4111 pwdiAddSTASelfRsp->macSelfSta,
4112 sizeof(pAddStaSelfRsp->selfMacAddr));
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304113 pWDA->wdaAddSelfStaParams.ucSTASelfIdx = pwdiAddSTASelfRsp->ucSTASelfIdx;
4114 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaRspCounter++;
4115 if (pAddStaSelfRsp->status == eSIR_FAILURE)
4116 {
4117 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_RSP_WDI_FAIL;
4118 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
4119 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004120 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004121 return ;
4122}
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304123
Jeff Johnson295189b2012-06-20 16:38:30 -07004124/*
4125 * FUNCTION: WDA_ProcessAddStaSelfReq
4126 *
4127 */
4128VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
4129{
4130 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004131 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004132 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
4133 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
4134 sizeof(WDI_AddSTASelfReqParamsType)) ;
4135 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004137 "------> %s " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304138 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaReqCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004139 if( NULL == wdiAddStaSelfReq )
4140 {
4141 VOS_ASSERT( 0 );
4142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004143 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304144 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4145 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004146 return( VOS_STATUS_E_NOMEM );
4147 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004148 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004149 if( NULL == pWdaParams )
4150 {
4151 VOS_ASSERT( 0 );
4152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004153 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304154 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
4155 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004156 vos_mem_free(wdiAddStaSelfReq) ;
4157 return( VOS_STATUS_E_NOMEM );
4158 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004159 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004160 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07004161 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004162 /* Store Init Req pointer, as this will be used for response */
4163 /* store Params pass it to WDI */
4164 pWdaParams->pWdaContext = pWDA;
4165 pWdaParams->wdaMsgParam = pAddStaSelfReq;
4166 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07004167 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004168
Jeff Johnson43971f52012-07-17 12:26:56 -07004169 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004170 {
4171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4172 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07004173 wstatus );
4174 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004175 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4176 vos_mem_free(pWdaParams) ;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304177 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_WDI_FAIL;
4178 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004179 pAddStaSelfReq->status = eSIR_FAILURE ;
4180 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
4181 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004182 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004183}
Jeff Johnson295189b2012-06-20 16:38:30 -07004184/*
4185 * FUNCTION: WDA_DelSTASelfRespCallback
4186 *
4187 */
4188void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
4189 wdiDelStaSelfRspParams , void* pUserData)
4190{
4191 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4192 tWDA_CbContext *pWDA;
4193 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004195 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004196 if (NULL == pWdaParams)
4197 {
4198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004199 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004200 VOS_ASSERT(0);
4201 return;
4202 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004203 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4204 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004205 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004206 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004207
4208 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4209 vos_mem_free(pWdaParams) ;
4210
4211 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004212 return ;
4213}
Jeff Johnson295189b2012-06-20 16:38:30 -07004214/*
4215 * FUNCTION: WDA_DelSTASelfReqCallback
4216 *
4217 */
4218void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
4219 void* pUserData)
4220{
4221 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4222 tWDA_CbContext *pWDA;
4223 tDelStaSelfParams *delStaSelfParams;
4224
4225 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05304226 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004227 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004228
4229 if (NULL == pWdaParams)
4230 {
4231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004232 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004233 VOS_ASSERT(0);
4234 return;
4235 }
4236
4237 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4238 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
4239
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004240 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004241
4242 if(IS_WDI_STATUS_FAILURE(wdiStatus))
4243 {
4244 VOS_ASSERT(0);
4245 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4246 vos_mem_free(pWdaParams) ;
4247 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
4248 }
4249
4250 return ;
4251}
4252
4253/*
4254 * FUNCTION: WDA_DelSTASelfReq
4255 * Trigger Config STA processing in WDI
4256 */
4257VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
4258 tDelStaSelfParams* pDelStaSelfReqParam)
4259{
4260 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004261 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004262 tWDA_ReqParams *pWdaParams = NULL;
4263 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
4264 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
4265 sizeof(WDI_DelSTASelfReqParamsType)) ;
4266
Jeff Johnson295189b2012-06-20 16:38:30 -07004267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004268 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004269 if( NULL == wdiDelStaSelfReq )
4270 {
4271 VOS_ASSERT( 0 );
4272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004273 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004274 return( VOS_STATUS_E_NOMEM );
4275 }
4276
4277 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4278 if( NULL == pWdaParams )
4279 {
4280 VOS_ASSERT( 0 );
4281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004282 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004283 vos_mem_free(wdiDelStaSelfReq) ;
4284 return( VOS_STATUS_E_NOMEM );
4285 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004286 pWdaParams->pWdaContext = pWDA;
4287 /* Store param pointer as passed in by caller */
4288 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
4289 /* store Params pass it to WDI */
4290 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07004291 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
4292 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
4293
4294 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
4295 wdiDelStaSelfReq->pUserData = pWdaParams;
4296
Jeff Johnson43971f52012-07-17 12:26:56 -07004297 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07004298 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
4299
Jeff Johnson43971f52012-07-17 12:26:56 -07004300 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004301 {
4302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
4303 "Failure in Del Sta Self REQ WDI API, free all the memory " );
4304 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07004305 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004306 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4307 vos_mem_free(pWdaParams) ;
4308 pDelStaSelfReqParam->status = eSIR_FAILURE ;
4309 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
4310 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004311 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004312}
4313
Jeff Johnson295189b2012-06-20 16:38:30 -07004314/*
4315 * FUNCTION: WDA_SendMsg
4316 * Send Message back to PE
4317 */
4318void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
4319 void *pBodyptr, tANI_U32 bodyVal)
4320{
4321 tSirMsgQ msg = {0} ;
4322 tANI_U32 status = VOS_STATUS_SUCCESS ;
4323 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07004324 msg.type = msgType;
4325 msg.bodyval = bodyVal;
4326 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07004327 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07004328 if (VOS_STATUS_SUCCESS != status)
4329 {
4330 if(NULL != pBodyptr)
4331 {
4332 vos_mem_free(pBodyptr);
4333 }
4334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004335 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004336 VOS_ASSERT(0) ;
4337 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004338 return ;
4339}
Jeff Johnson295189b2012-06-20 16:38:30 -07004340/*
4341 * FUNCTION: WDA_UpdateBSSParams
4342 * Translated WDA/PE BSS info into WDI BSS info..
4343 */
4344void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
4345 WDI_ConfigBSSReqInfoType *wdiBssParams,
4346 tAddBssParams *wdaBssParams)
4347{
4348 v_U8_t keyIndex = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004349 /* copy bssReq Params to WDI structure */
4350 vos_mem_copy(wdiBssParams->macBSSID,
4351 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
4352 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
4353 sizeof(tSirMacAddr)) ;
4354 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
4355 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
4356 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004357 wdiBssParams->ucShortSlotTimeSupported =
4358 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004359 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
4360 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
4361 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
4362 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
4363 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
4364
4365 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
4366 wdiBssParams->ucTXOPProtectionFullSupport =
4367 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004368 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
4369 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004370 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004371 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
4372 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
4373 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
4374 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
4375
Chet Lanctot186b5732013-03-18 10:26:30 -07004376 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
4377
Jeff Johnson295189b2012-06-20 16:38:30 -07004378 /* copy SSID into WDI structure */
4379 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
4380 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
4381 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004382 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
4383 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004384 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07004385#ifdef WLAN_FEATURE_VOWIFI
4386 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
4387#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004388 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07004389 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07004390#ifdef WLAN_FEATURE_VOWIFI_11R
4391 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004392 if(wdiBssParams->bExtSetStaKeyParamValid)
4393 {
4394 /* copy set STA key params to WDI structure */
4395 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
4396 wdaBssParams->extSetStaKeyParam.staIdx;
4397 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
4398 wdaBssParams->extSetStaKeyParam.encType;
4399 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
4400 wdaBssParams->extSetStaKeyParam.wepType;
4401 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
4402 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004403 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
4404 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004405 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004406 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
4407 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4408 {
4409 WDA_GetWepKeysFromCfg( pWDA,
4410 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
4411 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
4412 wdiBssParams->wdiExtSetKeyParam.wdiKey );
4413 }
4414 else
4415 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004416 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4417 keyIndex++)
4418 {
4419 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
4420 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
4421 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
4422 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
4423 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
4424 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004425 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
4426 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4427 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
4428 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
4429 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
4430 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
4431 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
4432 wdaBssParams->extSetStaKeyParam.key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4433 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004434 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
4435 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004436 }
4437 }
4438 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
4439 }
4440 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
4441 {
4442 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
4443 sizeof(wdaBssParams->extSetStaKeyParam) );
4444 }
4445#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07004446#ifdef WLAN_FEATURE_11AC
4447 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
4448 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
4449#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004450
4451 return ;
4452}
Jeff Johnson295189b2012-06-20 16:38:30 -07004453/*
4454 * FUNCTION: WDA_UpdateSTAParams
4455 * Translated WDA/PE BSS info into WDI BSS info..
4456 */
4457void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
4458 WDI_ConfigStaReqInfoType *wdiStaParams,
4459 tAddStaParams *wdaStaParams)
4460{
4461 tANI_U8 i = 0;
4462 /* Update STA params */
4463 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
4464 sizeof(tSirMacAddr)) ;
4465 wdiStaParams->usAssocId = wdaStaParams->assocId;
4466 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07004467 wdiStaParams->staIdx = wdaStaParams->staIdx;
4468
Jeff Johnson295189b2012-06-20 16:38:30 -07004469 wdiStaParams->ucShortPreambleSupported =
4470 wdaStaParams->shortPreambleSupported;
4471 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
4472 sizeof(tSirMacAddr)) ;
4473 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
4474
4475 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
4476
4477 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
4478 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
4479 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
4480 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
4481 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
4482 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
4483 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
4484
4485 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
4486 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07004487 wdiStaParams->wdiSupportedRates.opRateMode =
4488 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004489 for(i = 0;i < WDI_NUM_11B_RATES;i++)
4490 {
4491 wdiStaParams->wdiSupportedRates.llbRates[i] =
4492 wdaStaParams->supportedRates.llbRates[i];
4493 }
4494 for(i = 0;i < WDI_NUM_11A_RATES;i++)
4495 {
4496 wdiStaParams->wdiSupportedRates.llaRates[i] =
4497 wdaStaParams->supportedRates.llaRates[i];
4498 }
4499 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
4500 {
4501 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
4502 wdaStaParams->supportedRates.aniLegacyRates[i];
4503 }
4504 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
4505 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07004506#ifdef WLAN_FEATURE_11AC
4507 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
4508 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
4509 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
4510 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
4511#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004512 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
4513 {
4514 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
4515 wdaStaParams->supportedRates.supportedMCSSet[i];
4516 }
4517 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
4518 wdaStaParams->supportedRates.rxHighestDataRate;
4519
4520 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
4521
4522 wdiStaParams->wdiAction = wdaStaParams->updateSta;
4523
4524 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
4525 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
4526 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
4527
4528 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
4529 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
4530 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
4531 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07004532 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07004533#ifdef WLAN_FEATURE_11AC
4534 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
4535 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08004536 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Abhishek Singh6927fa02014-06-27 17:19:55 +05304537 wdiStaParams->vhtTxMUBformeeCapable = wdaStaParams->vhtTxMUBformeeCapable;
4538 /* When MU vhtTxMUBformeeCapable is set, SU ucVhtTxBFEnabled
4539 * must be set by default */
4540 if ( wdiStaParams->vhtTxMUBformeeCapable )
4541 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxMUBformeeCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07004542#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08004543 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
4544 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07004545 return ;
4546}
Jeff Johnson295189b2012-06-20 16:38:30 -07004547/*
4548 * -------------------------------------------------------------------------
4549 * CFG update to WDI
4550 * -------------------------------------------------------------------------
4551 */
4552
4553 /*
4554 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
4555 * Convert the WNI CFG ID to HAL CFG ID
4556 */
Jeff Johnsone7245742012-09-05 17:12:55 -07004557static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07004558{
4559 switch(wniCfgId)
4560 {
4561 case WNI_CFG_STA_ID:
4562 return QWLAN_HAL_CFG_STA_ID;
4563 case WNI_CFG_CURRENT_TX_ANTENNA:
4564 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
4565 case WNI_CFG_CURRENT_RX_ANTENNA:
4566 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
4567 case WNI_CFG_LOW_GAIN_OVERRIDE:
4568 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
4569 case WNI_CFG_POWER_STATE_PER_CHAIN:
4570 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
4571 case WNI_CFG_CAL_PERIOD:
4572 return QWLAN_HAL_CFG_CAL_PERIOD;
4573 case WNI_CFG_CAL_CONTROL:
4574 return QWLAN_HAL_CFG_CAL_CONTROL;
4575 case WNI_CFG_PROXIMITY:
4576 return QWLAN_HAL_CFG_PROXIMITY;
4577 case WNI_CFG_NETWORK_DENSITY:
4578 return QWLAN_HAL_CFG_NETWORK_DENSITY;
4579 case WNI_CFG_MAX_MEDIUM_TIME:
4580 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
4581 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
4582 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
4583 case WNI_CFG_RTS_THRESHOLD:
4584 return QWLAN_HAL_CFG_RTS_THRESHOLD;
4585 case WNI_CFG_SHORT_RETRY_LIMIT:
4586 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
4587 case WNI_CFG_LONG_RETRY_LIMIT:
4588 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
4589 case WNI_CFG_FRAGMENTATION_THRESHOLD:
4590 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
4591 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
4592 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
4593 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
4594 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
4595 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
4596 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
4597 case WNI_CFG_FIXED_RATE:
4598 return QWLAN_HAL_CFG_FIXED_RATE;
4599 case WNI_CFG_RETRYRATE_POLICY:
4600 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
4601 case WNI_CFG_RETRYRATE_SECONDARY:
4602 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
4603 case WNI_CFG_RETRYRATE_TERTIARY:
4604 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
4605 case WNI_CFG_FORCE_POLICY_PROTECTION:
4606 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
4607 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
4608 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
4609 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
4610 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
4611 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
4612 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
4613 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
4614 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
4615 case WNI_CFG_MAX_BA_SESSIONS:
4616 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
4617 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
4618 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
4619 case WNI_CFG_PS_ENABLE_BCN_FILTER:
4620 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
4621 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
4622 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
4623 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
4624 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
4625 case WNI_CFG_STATS_PERIOD:
4626 return QWLAN_HAL_CFG_STATS_PERIOD;
4627 case WNI_CFG_CFP_MAX_DURATION:
4628 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
4629#if 0 /*This is not part of CFG*/
4630 case WNI_CFG_FRAME_TRANS_ENABLED:
4631 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
4632#endif
4633 case WNI_CFG_DTIM_PERIOD:
4634 return QWLAN_HAL_CFG_DTIM_PERIOD;
4635 case WNI_CFG_EDCA_WME_ACBK:
4636 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
4637 case WNI_CFG_EDCA_WME_ACBE:
4638 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
4639 case WNI_CFG_EDCA_WME_ACVI:
4640 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
4641 case WNI_CFG_EDCA_WME_ACVO:
4642 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
4643#if 0
4644 case WNI_CFG_TELE_BCN_WAKEUP_EN:
4645 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
4646 case WNI_CFG_TELE_BCN_TRANS_LI:
4647 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
4648 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
4649 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
4650 case WNI_CFG_TELE_BCN_MAX_LI:
4651 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
4652 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
4653 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
4654#endif
4655 case WNI_CFG_ENABLE_CLOSE_LOOP:
4656 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08004657 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
4658 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
Jeff Johnson295189b2012-06-20 16:38:30 -07004659 default:
4660 {
4661 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004662 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07004663 wniCfgId);
4664 return VOS_STATUS_E_INVAL;
4665 }
4666 }
4667}
Jeff Johnson295189b2012-06-20 16:38:30 -07004668/*
4669 * FUNCTION: WDA_UpdateCfgCallback
4670 *
4671 */
4672void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
4673{
4674 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4675 WDI_UpdateCfgReqParamsType *wdiCfgParam =
4676 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004678 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004679 /*
4680 * currently there is no response message is expected between PE and
4681 * WDA, Failure return from WDI is a ASSERT condition
4682 */
4683 if(WDI_STATUS_SUCCESS != wdiStatus)
4684 {
4685 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004686 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07004687 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
4688 }
4689
4690 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
4691 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4692 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004693 return ;
4694}
Jeff Johnson295189b2012-06-20 16:38:30 -07004695/*
4696 * FUNCTION: WDA_UpdateCfg
4697 *
4698 */
4699VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
4700{
4701
4702 WDI_Status status = WDI_STATUS_SUCCESS ;
4703 tANI_U32 val =0;
4704 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
4705 tHalCfg *configData;
4706 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
4707 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07004708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004709 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004710 if (NULL == pMac )
4711 {
4712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004713 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004714 return VOS_STATUS_E_FAILURE;
4715 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004716 if(WDA_START_STATE != pWDA->wdaState)
4717 {
4718 return VOS_STATUS_E_FAILURE;
4719 }
4720
4721 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
4722 {
4723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004724 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004725 VOS_ASSERT(0);
4726 return VOS_STATUS_E_FAILURE;
4727 }
4728
4729 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
4730 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004731 if(NULL == wdiCfgReqParam)
4732 {
4733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004734 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004735 VOS_ASSERT(0);
4736 return VOS_STATUS_E_NOMEM;
4737 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004738 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
4739 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004740 if(NULL == wdiCfgReqParam->pConfigBuffer)
4741 {
4742 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004743 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004744 vos_mem_free(wdiCfgReqParam);
4745 VOS_ASSERT(0);
4746 return VOS_STATUS_E_NOMEM;
4747 }
4748
4749 /*convert the WNI CFG Id to HAL CFG Id*/
4750 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4751 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4752
4753 /*TODO: revisit this for handling string parameters */
4754 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4755 &val) != eSIR_SUCCESS)
4756 {
4757 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004758 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07004759 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4760 vos_mem_free(wdiCfgReqParam);
4761 return eSIR_FAILURE;
4762 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004763 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4764 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4765 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4766 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4767 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4768
4769 /* store Params pass it to WDI */
4770 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004771#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4772 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4773 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004774 if(IS_WDI_STATUS_FAILURE(status))
4775 {
4776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4777 "Failure in Update CFG WDI API, free all the memory " );
4778 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4779 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4780 pWDA->wdaWdiCfgApiMsgParam = NULL;
4781 /* Failure is not expected */
4782 VOS_ASSERT(0) ;
4783 }
4784#else
4785 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4786 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4787 pWDA->wdaWdiCfgApiMsgParam = NULL;
4788#endif
4789 return CONVERT_WDI2VOS_STATUS(status) ;
4790}
4791
Jeff Johnson295189b2012-06-20 16:38:30 -07004792VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4793 v_U8_t *pDefaultKeyId,
4794 v_U8_t *pNumKeys,
4795 WDI_KeysType *pWdiKeys )
4796{
4797 v_U32_t i, j, defKeyId = 0;
4798 v_U32_t val = SIR_MAC_KEY_LENGTH;
4799 VOS_STATUS status = WDI_STATUS_SUCCESS;
4800 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004801 if (NULL == pMac )
4802 {
4803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004804 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004805 return VOS_STATUS_E_FAILURE;
4806 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004807 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4808 &defKeyId ))
4809 {
4810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4811 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4812 }
4813
4814 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004815 /* Need to extract ALL of the configured WEP Keys */
4816 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4817 {
4818 val = SIR_MAC_KEY_LENGTH;
4819 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4820 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4821 pWdiKeys[j].key,
4822 &val ))
4823 {
4824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004825 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07004826 }
4827 else
4828 {
4829 pWdiKeys[j].keyId = (tANI_U8) i;
4830 /*
4831 * Actually, a DC (Don't Care) because
4832 * this is determined (and set) by PE/MLME
4833 */
4834 pWdiKeys[j].unicast = 0;
4835 /*
4836 * Another DC (Don't Care)
4837 */
4838 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4839 /* Another DC (Don't Care). Unused for WEP */
4840 pWdiKeys[j].paeRole = 0;
4841 /* Determined from wlan_cfgGetStr() above.*/
4842 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004843 j++;
4844 *pNumKeys = (tANI_U8) j;
4845 }
4846 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004847 return status;
4848}
Jeff Johnson295189b2012-06-20 16:38:30 -07004849/*
4850 * FUNCTION: WDA_SetBssKeyReqCallback
4851 * send SET BSS key RSP back to PE
4852 */
4853void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4854{
4855 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4856 tWDA_CbContext *pWDA;
4857 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004859 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004860 if(NULL == pWdaParams)
4861 {
4862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004863 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004864 VOS_ASSERT(0) ;
4865 return ;
4866 }
4867 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4868 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05304869 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
4870 sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004871 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4872 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004873 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004874 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004875 return ;
4876}
Jeff Johnson295189b2012-06-20 16:38:30 -07004877/*
4878 * FUNCTION: WDA_ProcessSetBssKeyReq
4879 * Request to WDI for programming the BSS key( key for
4880 * broadcast/multicast frames Encryption)
4881 */
4882VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4883 tSetBssKeyParams *setBssKeyParams )
4884{
4885 WDI_Status status = WDI_STATUS_SUCCESS ;
4886 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4887 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4888 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4889 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004890 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004892 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004893 if(NULL == wdiSetBssKeyParam)
4894 {
4895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004896 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004897 VOS_ASSERT(0);
4898 return VOS_STATUS_E_NOMEM;
4899 }
4900 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4901 if(NULL == pWdaParams)
4902 {
4903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004904 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004905 VOS_ASSERT(0);
4906 vos_mem_free(wdiSetBssKeyParam);
4907 return VOS_STATUS_E_NOMEM;
4908 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004909 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004910 /* copy set BSS params to WDI structure */
4911 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4912 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4913 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004914 if(setBssKeyParams->encType != eSIR_ED_NONE)
4915 {
4916 if( setBssKeyParams->numKeys == 0 &&
4917 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4918 setBssKeyParams->encType == eSIR_ED_WEP104))
4919 {
4920 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004921 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4922 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4923 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4924 }
4925 else
4926 {
4927 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4928 {
4929 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4930 setBssKeyParams->key[keyIndex].keyId;
4931 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
4932 setBssKeyParams->key[keyIndex].unicast;
4933 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
4934 setBssKeyParams->key[keyIndex].keyDirection;
4935 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
4936 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4937 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
4938 setBssKeyParams->key[keyIndex].paeRole;
4939 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
4940 setBssKeyParams->key[keyIndex].keyLength;
4941 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
4942 setBssKeyParams->key[keyIndex].key,
4943 SIR_MAC_MAX_KEY_LENGTH);
4944 }
4945 }
4946 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004947 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
4948 setBssKeyParams->singleTidRc;
4949 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004950 /* Store set key pointer, as this will be used for response */
4951 /* store Params pass it to WDI */
4952 pWdaParams->pWdaContext = pWDA;
4953 pWdaParams->wdaMsgParam = setBssKeyParams;
4954 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004955 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
4956 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
4957
4958 if(IS_WDI_STATUS_FAILURE(status))
4959 {
4960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4961 "Failure in Set BSS Key Req WDI API, free all the memory " );
4962 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4963 vos_mem_free(pWdaParams) ;
4964 setBssKeyParams->status = eSIR_FAILURE ;
4965 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
4966 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004967 return CONVERT_WDI2VOS_STATUS(status) ;
4968}
Jeff Johnson295189b2012-06-20 16:38:30 -07004969/*
4970 * FUNCTION: WDA_RemoveBssKeyReqCallback
4971 * send SET BSS key RSP back to PE
4972 */
4973void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
4974{
4975 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4976 tWDA_CbContext *pWDA;
4977 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004979 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004980 if(NULL == pWdaParams)
4981 {
4982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004983 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004984 VOS_ASSERT(0) ;
4985 return ;
4986 }
4987 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4988 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004989 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4990 vos_mem_free(pWdaParams) ;
4991
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004992 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004993 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004994 return ;
4995}
Siddharth Bhal171788a2014-09-29 21:02:40 +05304996
4997/*
4998 * FUNCTION: WDA_SpoofMacAddrRspCallback
4999 * recieves spoof mac addr response from FW
5000 */
5001void WDA_SpoofMacAddrRspCallback(WDI_SpoofMacAddrRspParamType* wdiRsp, void* pUserData)
5002{
5003 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5004 tWDA_CbContext *pWDA;
Siddharth Bhal029d6732014-10-09 21:31:23 +05305005
Siddharth Bhal171788a2014-09-29 21:02:40 +05305006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5007 "<------ %s " ,__func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305008
Siddharth Bhal171788a2014-09-29 21:02:40 +05305009 if(NULL == pWdaParams)
5010 {
5011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5012 "%s: pWdaParams received NULL", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305013 VOS_ASSERT(0);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305014 return ;
5015 }
Siddharth Bhal171788a2014-09-29 21:02:40 +05305016 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305017
Siddharth Bhal029d6732014-10-09 21:31:23 +05305018 if (wdiRsp->wdiStatus != WDI_STATUS_SUCCESS) {
Siddharth Bhal171788a2014-09-29 21:02:40 +05305019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhal029d6732014-10-09 21:31:23 +05305020 "%s:Spoofing with rsp status %d", __func__, wdiRsp->wdiStatus);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305021 }
Siddharth Bhal029d6732014-10-09 21:31:23 +05305022 WDA_SendMsg(pWDA, WDA_SPOOF_MAC_ADDR_RSP, NULL,
5023 CONVERT_WDI2SIR_STATUS(wdiRsp->wdiStatus));
Siddharth Bhal171788a2014-09-29 21:02:40 +05305024
Siddharth Bhal171788a2014-09-29 21:02:40 +05305025 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305026 vos_mem_free(pWdaParams->wdaMsgParam);
Siddharth Bhal171788a2014-09-29 21:02:40 +05305027 vos_mem_free(pWdaParams);
Siddharth Bhal029d6732014-10-09 21:31:23 +05305028
5029 return;
Siddharth Bhal171788a2014-09-29 21:02:40 +05305030}
5031
Jeff Johnson295189b2012-06-20 16:38:30 -07005032/*
5033 * FUNCTION: WDA_ProcessRemoveBssKeyReq
5034 * Request to WDI to remove the BSS key( key for broadcast/multicast
5035 * frames Encryption)
5036 */
5037VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
5038 tRemoveBssKeyParams *removeBssKeyParams )
5039{
5040 WDI_Status status = WDI_STATUS_SUCCESS ;
5041 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
5042 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
5043 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
5044 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005046 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005047 if(NULL == wdiRemoveBssKeyParam)
5048 {
5049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005050 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005051 VOS_ASSERT(0);
5052 return VOS_STATUS_E_NOMEM;
5053 }
5054 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5055 if(NULL == pWdaParams)
5056 {
5057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005058 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005059 VOS_ASSERT(0);
5060 vos_mem_free(wdiRemoveBssKeyParam);
5061 return VOS_STATUS_E_NOMEM;
5062 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005063 /* copy Remove BSS key params to WDI structure*/
5064 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
5065 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
5066 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
5067 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
5068 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005069 /* Store remove key pointer, as this will be used for response */
5070 /* store Params pass it to WDI */
5071 pWdaParams->pWdaContext = pWDA;
5072 pWdaParams->wdaMsgParam = removeBssKeyParams;
5073 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005074 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
5075 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005076 if(IS_WDI_STATUS_FAILURE(status))
5077 {
5078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5079 "Failure in Remove BSS Key Req WDI API, free all the memory " );
5080 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5081 vos_mem_free(pWdaParams) ;
5082 removeBssKeyParams->status = eSIR_FAILURE ;
5083 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
5084 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005085 return CONVERT_WDI2VOS_STATUS(status) ;
5086}
Jeff Johnson295189b2012-06-20 16:38:30 -07005087/*
5088 * FUNCTION: WDA_SetBssKeyReqCallback
5089 * send SET BSS key RSP back to PE
5090 */
5091void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
5092{
5093 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5094 tWDA_CbContext *pWDA;
5095 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005097 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005098 if(NULL == pWdaParams)
5099 {
5100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005101 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005102 VOS_ASSERT(0) ;
5103 return ;
5104 }
5105 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5106 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +05305107 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
5108 sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005109 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5110 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005111 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005112 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005113 return ;
5114}
Jeff Johnson295189b2012-06-20 16:38:30 -07005115/*
5116 * FUNCTION: WDA_ProcessSetStaKeyReq
5117 * Request to WDI for programming the STA key( key for Unicast frames
5118 * Encryption)
5119 */
5120VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
5121 tSetStaKeyParams *setStaKeyParams )
5122{
5123 WDI_Status status = WDI_STATUS_SUCCESS ;
5124 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5125 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5126 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5127 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005128 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005130 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005131 if(NULL == wdiSetStaKeyParam)
5132 {
5133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005134 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005135 VOS_ASSERT(0);
5136 return VOS_STATUS_E_NOMEM;
5137 }
5138 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5139 if(NULL == pWdaParams)
5140 {
5141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005142 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005143 VOS_ASSERT(0);
5144 vos_mem_free(wdiSetStaKeyParam);
5145 return VOS_STATUS_E_NOMEM;
5146 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005147 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005148 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005149 /* copy set STA key params to WDI structure */
5150 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
5151 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
5152 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
5153 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005154 if(setStaKeyParams->encType != eSIR_ED_NONE)
5155 {
Jeff Johnson43971f52012-07-17 12:26:56 -07005156 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005157 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
5158 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
5159 {
5160 WDA_GetWepKeysFromCfg( pWDA,
5161 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
5162 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
5163 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
5164 }
5165 else
5166 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005167 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5168 keyIndex++)
5169 {
5170 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
5171 setStaKeyParams->key[keyIndex].keyId;
5172 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
5173 setStaKeyParams->key[keyIndex].unicast;
5174 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
5175 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005176 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
5177 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5178 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
5179 setStaKeyParams->key[keyIndex].paeRole;
5180 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
5181 setStaKeyParams->key[keyIndex].keyLength;
5182 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
5183 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
5184 /* set default index to index which have key direction as WDI_TX_DEFAULT */
5185 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
5186 {
5187 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
5188 }
5189 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005190 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
5191 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005192 }
5193 }
5194 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
5195 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005196 /* Store set key pointer, as this will be used for response */
5197 /* store Params pass it to WDI */
5198 pWdaParams->pWdaContext = pWDA;
5199 pWdaParams->wdaMsgParam = setStaKeyParams;
5200 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005201 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
5202 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005203 if(IS_WDI_STATUS_FAILURE(status))
5204 {
5205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5206 "Failure in set STA Key Req WDI API, free all the memory " );
5207 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5208 vos_mem_free(pWdaParams) ;
5209 setStaKeyParams->status = eSIR_FAILURE ;
5210 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
5211 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005212 return CONVERT_WDI2VOS_STATUS(status) ;
5213}
Jeff Johnson295189b2012-06-20 16:38:30 -07005214/*
5215 * FUNCTION: WDA_SetBcastStaKeyReqCallback
5216 * send SET Bcast STA key RSP back to PE
5217 */
5218void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
5219{
5220 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5221 tWDA_CbContext *pWDA;
5222 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005224 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005225 if(NULL == pWdaParams)
5226 {
5227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005228 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005229 VOS_ASSERT(0) ;
5230 return ;
5231 }
5232 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5233 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005234 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5235 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005236 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005237 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005238 return ;
5239}
5240
Jeff Johnson295189b2012-06-20 16:38:30 -07005241/*
5242 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
5243 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
5244 * Encryption)
5245 */
5246VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
5247 tSetStaKeyParams *setStaKeyParams )
5248{
5249 WDI_Status status = WDI_STATUS_SUCCESS ;
5250 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5251 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5252 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5253 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005254 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005256 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005257 if(NULL == wdiSetStaKeyParam)
5258 {
5259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005260 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005261 VOS_ASSERT(0);
5262 return VOS_STATUS_E_NOMEM;
5263 }
5264 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5265 if(NULL == pWdaParams)
5266 {
5267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005268 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005269 VOS_ASSERT(0);
5270 vos_mem_free(wdiSetStaKeyParam);
5271 return VOS_STATUS_E_NOMEM;
5272 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005273 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005274 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005275 /* copy set STA key params to WDI structure */
5276 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
5277 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
5278 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
5279 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005280 if(setStaKeyParams->encType != eSIR_ED_NONE)
5281 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005282 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5283 keyIndex++)
5284 {
5285 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
5286 setStaKeyParams->key[keyIndex].keyId;
5287 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
5288 setStaKeyParams->key[keyIndex].unicast;
5289 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
5290 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005291 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
5292 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5293 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
5294 setStaKeyParams->key[keyIndex].paeRole;
5295 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
5296 setStaKeyParams->key[keyIndex].keyLength;
5297 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
5298 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
5299 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005300 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
5301 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005302 }
5303 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07005304 /* Store set key pointer, as this will be used for response */
5305 /* store Params pass it to WDI */
5306 pWdaParams->pWdaContext = pWDA;
5307 pWdaParams->wdaMsgParam = setStaKeyParams;
5308 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005309 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
5310 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005311 if(IS_WDI_STATUS_FAILURE(status))
5312 {
5313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5314 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
5315 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5316 vos_mem_free(pWdaParams) ;
5317 setStaKeyParams->status = eSIR_FAILURE ;
5318 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
5319 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005320 return CONVERT_WDI2VOS_STATUS(status) ;
5321}
Jeff Johnson295189b2012-06-20 16:38:30 -07005322/*
5323 * FUNCTION: WDA_RemoveStaKeyReqCallback
5324 * send SET BSS key RSP back to PE
5325 */
5326void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
5327{
5328 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5329 tWDA_CbContext *pWDA;
5330 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005332 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005333 if(NULL == pWdaParams)
5334 {
5335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005336 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005337 VOS_ASSERT(0) ;
5338 return ;
5339 }
5340 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5341 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005342 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5343 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005344 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005345 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005346 return ;
5347}
5348
Jeff Johnson295189b2012-06-20 16:38:30 -07005349/*
5350 * FUNCTION: WDA_ProcessRemoveStaKeyReq
5351 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
5352 */
5353VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
5354 tRemoveStaKeyParams *removeStaKeyParams )
5355{
5356 WDI_Status status = WDI_STATUS_SUCCESS ;
5357 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
5358 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
5359 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
5360 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005362 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005363 if(NULL == wdiRemoveStaKeyParam)
5364 {
5365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005366 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005367 VOS_ASSERT(0);
5368 return VOS_STATUS_E_NOMEM;
5369 }
5370 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5371 if(NULL == pWdaParams)
5372 {
5373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005374 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005375 VOS_ASSERT(0);
5376 vos_mem_free(wdiRemoveStaKeyParam);
5377 return VOS_STATUS_E_NOMEM;
5378 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005379 /* copy remove STA key params to WDI structure*/
5380 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
5381 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
5382 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
5383 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
5384 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005385 /* Store remove key pointer, as this will be used for response */
5386 /* store Params pass it to WDI */
5387 pWdaParams->pWdaContext = pWDA;
5388 pWdaParams->wdaMsgParam = removeStaKeyParams;
5389 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005390 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
5391 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005392 if(IS_WDI_STATUS_FAILURE(status))
5393 {
5394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5395 "Failure in remove STA Key Req WDI API, free all the memory " );
5396 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5397 vos_mem_free(pWdaParams) ;
5398 removeStaKeyParams->status = eSIR_FAILURE ;
5399 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
5400 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005401 return CONVERT_WDI2VOS_STATUS(status) ;
5402}
Jeff Johnson295189b2012-06-20 16:38:30 -07005403/*
5404 * FUNCTION: WDA_IsHandleSetLinkStateReq
5405 * Update the WDA state and return the status to handle this message or not
5406 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005407WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
5408 tWDA_CbContext *pWDA,
5409 tLinkStateParams *linkStateParams)
5410{
5411 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005412 switch(linkStateParams->state)
5413 {
5414 case eSIR_LINK_PREASSOC_STATE:
5415 case eSIR_LINK_BTAMP_PREASSOC_STATE:
5416 /*
5417 * set the WDA state to PRE ASSOC
5418 * copy the BSSID into pWDA to use it in join request and return,
5419 * No need to handle these messages.
5420 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005421 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
5422 {
5423 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07005424 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005425 }
5426 else
5427 {
5428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005429 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005430 VOS_ASSERT(0);
5431 }
5432
5433 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
5434 {
5435 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07005436 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005437 }
5438 else
5439 {
5440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005441 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005442 VOS_ASSERT(0);
5443 }
5444
Jeff Johnson295189b2012-06-20 16:38:30 -07005445 /* UMAC is issuing the setlink state with PREASSOC twice (before set
5446 *channel and after ) so reset the WDA state to ready when the second
5447 * time UMAC issue the link state with PREASSOC
5448 */
5449 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
5450 {
5451 /* RESET WDA state back to WDA_READY_STATE */
5452 pWDA->wdaState = WDA_READY_STATE;
5453 }
5454 else
5455 {
5456 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
5457 }
5458 //populate linkState info in WDACbCtxt
5459 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07005460 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07005461 default:
5462 if(pWDA->wdaState != WDA_READY_STATE)
5463 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005464 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
5465 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
5466 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
5467 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
5468 *the ASSERT in WDA_Stop during module unload.*/
5469 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
5470 {
5471 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005472 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005473 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005474 else
5475 {
5476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005477 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005478 status = WDA_IGNORE_SET_LINK_STATE;
5479 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005480 }
5481 break;
5482 }
5483
5484 return status;
5485}
Jeff Johnson295189b2012-06-20 16:38:30 -07005486/*
5487 * FUNCTION: WDA_SetLinkStateCallback
5488 * call back function for set link state from WDI
5489 */
5490void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
5491{
5492 tWDA_CbContext *pWDA;
5493 tLinkStateParams *linkStateParams;
5494 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005496 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005497 if(NULL == pWdaParams)
5498 {
5499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005500 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005501 VOS_ASSERT(0) ;
5502 return ;
5503 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005504 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -07005505 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005506 /*
5507 * In STA mode start the BA activity check timer after association
5508 * and in AP mode start BA activity check timer after BSS start */
5509 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
5510 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07005511 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
5512 ((status == WDI_STATUS_SUCCESS) &&
5513 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07005514 {
5515 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5516 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005517 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005518 /*
5519 * No respone required for WDA_SET_LINK_STATE so free the request
5520 * param here
5521 */
5522 if( pWdaParams != NULL )
5523 {
5524 if( pWdaParams->wdaWdiApiMsgParam != NULL )
5525 {
5526 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5527 }
5528 vos_mem_free(pWdaParams);
5529 }
5530 return ;
5531}
Jeff Johnson295189b2012-06-20 16:38:30 -07005532/*
5533 * FUNCTION: WDA_ProcessSetLinkState
5534 * Request to WDI to set the link status.
5535 */
5536VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
5537 tLinkStateParams *linkStateParams)
5538{
5539 WDI_Status status = WDI_STATUS_SUCCESS ;
5540 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
5541 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
5542 sizeof(WDI_SetLinkReqParamsType)) ;
5543 tWDA_ReqParams *pWdaParams ;
5544 tpAniSirGlobal pMac;
5545 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
5546
5547 if(NULL == pMac)
5548 {
5549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005550 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005551 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005552 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005553 return VOS_STATUS_E_FAILURE;
5554 }
5555
5556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005557 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005558 if(NULL == wdiSetLinkStateParam)
5559 {
5560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005561 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005562 VOS_ASSERT(0);
5563 return VOS_STATUS_E_NOMEM;
5564 }
5565 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5566 if(NULL == pWdaParams)
5567 {
5568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005569 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005570 VOS_ASSERT(0);
5571 vos_mem_free(wdiSetLinkStateParam);
5572 return VOS_STATUS_E_NOMEM;
5573 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005574 if(WDA_IGNORE_SET_LINK_STATE ==
5575 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
5576 {
5577 status = WDI_STATUS_E_FAILURE;
5578 }
5579 else
5580 {
5581 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
5582 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005583 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
5584 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005585 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
5586 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005587 pWdaParams->pWdaContext = pWDA;
5588 /* Store remove key pointer, as this will be used for response */
5589 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005590 /* store Params pass it to WDI */
5591 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
5592 /* Stop Timer only other than GO role and concurrent session */
5593 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07005594 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005595 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
5596 {
5597 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5598 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005599 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
5600 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005601 if(IS_WDI_STATUS_FAILURE(status))
5602 {
5603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5604 "Failure in set link state Req WDI API, free all the memory " );
5605 }
5606 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005607 if(IS_WDI_STATUS_FAILURE(status))
5608 {
5609 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07005610 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005611 vos_mem_free(pWdaParams);
5612 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005613 return CONVERT_WDI2VOS_STATUS(status) ;
5614}
Jeff Johnson295189b2012-06-20 16:38:30 -07005615/*
5616 * FUNCTION: WDA_GetStatsReqParamsCallback
5617 * send the response to PE with Stats received from WDI
5618 */
5619void WDA_GetStatsReqParamsCallback(
5620 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
5621 void* pUserData)
5622{
5623 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5624 tAniGetPEStatsRsp *pGetPEStatsRspParams;
5625
5626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005627 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005628 pGetPEStatsRspParams =
5629 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
5630 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
5631
5632 if(NULL == pGetPEStatsRspParams)
5633 {
5634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005635 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005636 VOS_ASSERT(0);
5637 return;
5638 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005639 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
5640 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
5641 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
5642 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005643
5644 //Fill the Session Id Properly in PE
5645 pGetPEStatsRspParams->sessionId = 0;
5646 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005647 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005648 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
5649 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005650 vos_mem_copy( pGetPEStatsRspParams + 1,
5651 wdiGetStatsRsp + 1,
5652 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005653 /* send response to UMAC*/
5654 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
5655
5656 return;
5657}
5658
Jeff Johnson295189b2012-06-20 16:38:30 -07005659/*
5660 * FUNCTION: WDA_ProcessGetStatsReq
5661 * Request to WDI to get the statistics
5662 */
5663VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
5664 tAniGetPEStatsReq *pGetStatsParams)
5665{
5666 WDI_Status status = WDI_STATUS_SUCCESS ;
5667 WDI_GetStatsReqParamsType wdiGetStatsParam;
5668 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005670 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005671 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
5672 pGetStatsParams->staId;
5673 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
5674 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005675 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005676 status = WDI_GetStatsReq(&wdiGetStatsParam,
5677 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005678 if(IS_WDI_STATUS_FAILURE(status))
5679 {
5680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5681 "Failure in Get Stats Req WDI API, free all the memory " );
5682 pGetPEStatsRspParams =
5683 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
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);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005689 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005690 return VOS_STATUS_E_NOMEM;
5691 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005692 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
5693 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
5694 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
5695 pGetPEStatsRspParams->rc = eSIR_FAILURE;
5696 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
5697 (void *)pGetPEStatsRspParams, 0) ;
5698 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005699 /* Free the request message */
5700 vos_mem_free(pGetStatsParams);
5701 return CONVERT_WDI2VOS_STATUS(status);
5702}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005703
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08005704#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005705/*
5706 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
5707 * send the response to PE with roam Rssi received from WDI
5708 */
5709void WDA_GetRoamRssiReqParamsCallback(
5710 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
5711 void* pUserData)
5712{
5713 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5714 tWDA_CbContext *pWDA = NULL;
5715 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5716 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
5717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5718 "<------ %s " ,__func__);
5719 if(NULL == pWdaParams)
5720 {
5721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5722 "%s: pWdaParams received NULL", __func__);
5723 VOS_ASSERT(0) ;
5724 return ;
5725 }
5726 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5727 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
5728
5729 if(NULL == pGetRoamRssiReqParams)
5730 {
5731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5732 "%s: pGetRoamRssiReqParams received NULL", __func__);
5733 VOS_ASSERT(0);
5734 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5735 vos_mem_free(pWdaParams);
5736 return ;
5737 }
5738 pGetRoamRssiRspParams =
5739 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5740
5741 if(NULL == pGetRoamRssiRspParams)
5742 {
5743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5744 "%s: VOS MEM Alloc Failure", __func__);
5745 VOS_ASSERT(0);
5746 return;
5747 }
5748 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
5749 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005750 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005751 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
5752 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
5753
5754 /* Assign get roam rssi req (backup) in to the response */
5755 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
5756
5757 /* free WDI command buffer */
5758 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5759 vos_mem_free(pWdaParams) ;
5760
5761 /* send response to UMAC*/
5762 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
5763
5764 return;
5765}
5766
5767
5768
5769/*
5770 * FUNCTION: WDA_ProcessGetRoamRssiReq
5771 * Request to WDI to get the statistics
5772 */
5773VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
5774 tAniGetRssiReq *pGetRoamRssiParams)
5775{
5776 WDI_Status status = WDI_STATUS_SUCCESS ;
5777 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
5778 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5779 tWDA_ReqParams *pWdaParams = NULL;
5780
5781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5782 "------> %s " ,__func__);
5783 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
5784 pGetRoamRssiParams->staId;
5785 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
5786
5787 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5788 if(NULL == pWdaParams)
5789 {
5790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5791 "%s: VOS MEM Alloc Failure", __func__);
5792 VOS_ASSERT(0);
5793 return VOS_STATUS_E_NOMEM;
5794 }
5795
5796 /* Store Init Req pointer, as this will be used for response */
5797 pWdaParams->pWdaContext = pWDA;
5798
5799 /* Take Get roam Rssi req backup as it stores the callback to be called after
5800 receiving the response */
5801 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
5802 pWdaParams->wdaWdiApiMsgParam = NULL;
5803
5804 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
5805 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
5806 if(IS_WDI_STATUS_FAILURE(status))
5807 {
5808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5809 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
5810 pGetRoamRssiRspParams =
5811 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5812 if(NULL == pGetRoamRssiRspParams)
5813 {
5814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5815 "%s: VOS MEM Alloc Failure", __func__);
5816 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05305817 vos_mem_free(pGetRoamRssiParams);
5818 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005819 return VOS_STATUS_E_NOMEM;
5820 }
5821 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
5822 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
5823 pGetRoamRssiRspParams->rssi = 0;
5824 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
5825 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
5826 (void *)pGetRoamRssiRspParams, 0) ;
5827 }
5828 return CONVERT_WDI2VOS_STATUS(status);
5829}
5830#endif
5831
5832
Jeff Johnson295189b2012-06-20 16:38:30 -07005833/*
5834 * FUNCTION: WDA_UpdateEDCAParamCallback
5835 * call back function for Update EDCA params from WDI
5836 */
5837void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
5838{
5839 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5840 tEdcaParams *pEdcaParams;
5841
5842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005843 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005844 if(NULL == pWdaParams)
5845 {
5846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005847 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005848 VOS_ASSERT(0) ;
5849 return ;
5850 }
5851 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005852 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5853 vos_mem_free(pWdaParams);
5854 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005855 return ;
5856}
Jeff Johnson295189b2012-06-20 16:38:30 -07005857/*
5858 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
5859 * Request to WDI to Update the EDCA params.
5860 */
5861VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
5862 tEdcaParams *pEdcaParams)
5863{
5864 WDI_Status status = WDI_STATUS_SUCCESS ;
5865 WDI_UpdateEDCAParamsType *wdiEdcaParam =
5866 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
5867 sizeof(WDI_UpdateEDCAParamsType)) ;
5868 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005870 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005871 if(NULL == wdiEdcaParam)
5872 {
5873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005874 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005875 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005876 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005877 return VOS_STATUS_E_NOMEM;
5878 }
5879 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5880 if(NULL == pWdaParams)
5881 {
5882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005883 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005884 VOS_ASSERT(0);
5885 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005886 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005887 return VOS_STATUS_E_NOMEM;
5888 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005889 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07005890 /*
5891 Since firmware is not using highperformance flag, we have removed
5892 this flag from wdiEDCAInfo structure to match sizeof the structure
5893 between host and firmware.In future if we are planning to use
5894 highperformance flag then Please define this flag in wdiEDCAInfo
5895 structure, update it here and send it to firmware. i.e.
5896 Following is the original line which we removed as part of the fix
5897 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
5898 pEdcaParams->highPerformance;
5899 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005900 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
5901 &pEdcaParams->acbe);
5902 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
5903 &pEdcaParams->acbk);
5904 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
5905 &pEdcaParams->acvi);
5906 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
5907 &pEdcaParams->acvo);
5908 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005909 pWdaParams->pWdaContext = pWDA;
5910 /* Store remove key pointer, as this will be used for response */
5911 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005912 /* store Params pass it to WDI */
5913 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005914 status = WDI_UpdateEDCAParams(wdiEdcaParam,
5915 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005916 if(IS_WDI_STATUS_FAILURE(status))
5917 {
5918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5919 "Failure in Update EDCA Params WDI API, free all the memory " );
5920 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5921 vos_mem_free(pWdaParams);
5922 vos_mem_free(pEdcaParams);
5923 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005924 return CONVERT_WDI2VOS_STATUS(status) ;
5925}
Jeff Johnson295189b2012-06-20 16:38:30 -07005926/*
5927 * FUNCTION: WDA_AddBAReqCallback
5928 * send ADD BA RSP back to PE
5929 */
5930void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
5931 void* pUserData)
5932{
5933 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5934 tWDA_CbContext *pWDA;
5935 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005937 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005938 if(NULL == pWdaParams)
5939 {
5940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005941 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005942 VOS_ASSERT(0) ;
5943 return ;
5944 }
5945 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5946 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005947 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5948 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005949 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005950 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005951 return ;
5952}
5953
Jeff Johnson295189b2012-06-20 16:38:30 -07005954/*
5955 * FUNCTION: WDA_ProcessAddBAReq
5956 * Request to WDI to Update the ADDBA REQ params.
5957 */
5958VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
5959 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
5960{
Jeff Johnson43971f52012-07-17 12:26:56 -07005961 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005962 WDI_AddBAReqParamsType *wdiAddBAReqParam =
5963 (WDI_AddBAReqParamsType *)vos_mem_malloc(
5964 sizeof(WDI_AddBAReqParamsType)) ;
5965 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005967 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005968 if(NULL == wdiAddBAReqParam)
5969 {
5970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005971 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005972 VOS_ASSERT(0);
5973 return VOS_STATUS_E_NOMEM;
5974 }
5975 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5976 if(NULL == pWdaParams)
5977 {
5978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005979 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005980 VOS_ASSERT(0);
5981 vos_mem_free(wdiAddBAReqParam);
5982 return VOS_STATUS_E_NOMEM;
5983 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005984 do
5985 {
5986 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005987 wdiAddBaInfo->ucSTAIdx = staIdx ;
5988 wdiAddBaInfo->ucBaSessionID = baSessionID ;
5989 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005990 } while(0) ;
5991 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005992 pWdaParams->pWdaContext = pWDA;
5993 /* store Params pass it to WDI */
5994 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
5995 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07005996 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
5997 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005998
Jeff Johnson43971f52012-07-17 12:26:56 -07005999 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07006000 {
6001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07006002 "Failure in ADD BA REQ Params WDI API, free all the memory" );
6003 status = CONVERT_WDI2VOS_STATUS(wstatus);
6004 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006005 vos_mem_free(pWdaParams);
6006 pAddBAReqParams->status = eSIR_FAILURE;
6007 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6008 }
Jeff Johnson43971f52012-07-17 12:26:56 -07006009 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07006010}
Jeff Johnson295189b2012-06-20 16:38:30 -07006011/*
6012 * FUNCTION: WDA_AddBASessionReqCallback
6013 * send ADD BA SESSION RSP back to PE/(or TL)
6014 */
6015void WDA_AddBASessionReqCallback(
6016 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
6017{
6018 VOS_STATUS status = VOS_STATUS_SUCCESS ;
6019 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6020 tWDA_CbContext *pWDA;
6021 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006023 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006024 if(NULL == pWdaParams)
6025 {
6026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006027 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006028 VOS_ASSERT(0) ;
6029 return ;
6030 }
6031 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6032 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006033 if( NULL == pAddBAReqParams )
6034 {
Jeff Johnson295189b2012-06-20 16:38:30 -07006035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006036 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006037 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006038 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6039 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006040 return ;
6041 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006042 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6043 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006044 /*
6045 * if WDA in update TL state, update TL with BA session parama and send
6046 * another request to HAL(/WDI) (ADD_BA_REQ)
6047 */
6048
6049 if((VOS_STATUS_SUCCESS ==
6050 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
6051 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
6052 {
6053 /* Update TL with BA info received from HAL/WDI */
6054 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
6055 wdiAddBaSession->usBaSessionID,
6056 wdiAddBaSession->ucSTAIdx,
6057 wdiAddBaSession->ucBaTID,
6058 wdiAddBaSession->ucBaBufferSize,
6059 wdiAddBaSession->ucWinSize,
6060 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07006061 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
6062 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
6063 }
6064 else
6065 {
6066 pAddBAReqParams->status =
6067 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
6068
6069 /* Setting Flag to indicate that Set BA is success */
6070 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
6071 {
6072 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
6073 tANI_U8 tid = wdiAddBaSession->ucBaTID;
6074 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
6075 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006076 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6077 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006078 /*Reset the WDA state to READY */
6079 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006080 return ;
6081}
6082
Jeff Johnson295189b2012-06-20 16:38:30 -07006083/*
6084 * FUNCTION: WDA_ProcessAddBASessionReq
6085 * Request to WDI to Update the ADDBA REQ params.
6086 */
6087VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
6088 tAddBAParams *pAddBAReqParams)
6089{
6090 WDI_Status status = WDI_STATUS_SUCCESS ;
6091 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
6092 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
6093 sizeof(WDI_AddBASessionReqParamsType)) ;
6094 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006095 WLANTL_STAStateType tlSTAState = 0;
6096
Jeff Johnson295189b2012-06-20 16:38:30 -07006097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006098 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006099 if(NULL == wdiAddBASessionReqParam)
6100 {
6101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006102 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006103 VOS_ASSERT(0);
6104 return VOS_STATUS_E_NOMEM;
6105 }
6106 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6107 if(NULL == pWdaParams)
6108 {
6109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006110 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006111 VOS_ASSERT(0);
6112 vos_mem_free(wdiAddBASessionReqParam);
6113 return VOS_STATUS_E_NOMEM;
6114 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006115 /*
6116 * Populate ADD BA parameters and pass these paarmeters to WDI.
6117 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
6118 * the state to track if these is BA recipient case or BA initiator
6119 * case.
6120 */
6121 do
6122 {
6123 WDI_AddBASessionReqinfoType *wdiBAInfoType =
6124 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
6125 /* vos_mem_copy(wdiBAInfoType->macBSSID,
6126 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
6127 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
6128 vos_mem_copy(wdiBAInfoType->macPeerAddr,
6129 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006130 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07006131 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
6132 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
6133 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
6134 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
6135 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07006136 /* check the BA direction and update state accordingly */
6137 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
6138 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
6139 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
6140
6141 }while(0) ;
6142 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006143 pWdaParams->pWdaContext = pWDA;
6144 /* Store ADD BA pointer, as this will be used for response */
6145 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
6146 /* store Params pass it to WDI */
6147 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006148
6149 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
6150 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
6151 */
6152 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
6153 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
6154 {
6155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006156 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07006157 status = WDI_STATUS_E_NOT_ALLOWED;
6158 pAddBAReqParams->status =
6159 CONVERT_WDI2SIR_STATUS(status) ;
6160 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
6161 /*Reset the WDA state to READY */
6162 pWDA->wdaState = WDA_READY_STATE;
6163 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6164 vos_mem_free(pWdaParams);
6165
6166 return CONVERT_WDI2VOS_STATUS(status) ;
6167 }
6168
Jeff Johnson295189b2012-06-20 16:38:30 -07006169 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
6170 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006171 if(IS_WDI_STATUS_FAILURE(status))
6172 {
6173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006174 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07006175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08006176 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07006177 pAddBAReqParams->status =
6178 CONVERT_WDI2SIR_STATUS(status) ;
6179 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07006180 /*Reset the WDA state to READY */
6181 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07006182 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006183 vos_mem_free(pWdaParams);
6184 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006185 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006186}
Jeff Johnson295189b2012-06-20 16:38:30 -07006187/*
6188 * FUNCTION: WDA_DelBANotifyTL
6189 * send DEL BA IND to TL
6190 */
6191void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
6192 tDelBAParams *pDelBAReqParams)
6193{
6194 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
6195 //tSirMsgQ msg;
6196 vos_msg_t vosMsg;
6197 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07006198 if(NULL == pDelBAInd)
6199 {
6200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006201 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006202 VOS_ASSERT(0) ;
6203 return;
6204 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006205 pDelBAInd->mesgType = WDA_DELETEBA_IND;
6206 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
6207 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
6208 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07006209
Jeff Johnson295189b2012-06-20 16:38:30 -07006210
6211 vosMsg.type = WDA_DELETEBA_IND;
6212 vosMsg.bodyptr = pDelBAInd;
6213 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
6214 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
6215 {
6216 vosStatus = VOS_STATUS_E_BADMSG;
6217 }
6218}
Jeff Johnson295189b2012-06-20 16:38:30 -07006219/*
6220 * FUNCTION: WDA_DelBAReqCallback
6221 * send DEL BA RSP back to PE
6222 */
6223void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
6224{
6225 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6226 tWDA_CbContext *pWDA;
6227 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006229 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006230 if(NULL == pWdaParams)
6231 {
6232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006233 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006234 VOS_ASSERT(0) ;
6235 return ;
6236 }
6237 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6238 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006239 /* Notify TL about DEL BA in case of recipinet */
6240 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
6241 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
6242 {
6243 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
6244 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006245 /*
6246 * No respone required for WDA_DELBA_IND so just free the request
6247 * param here
6248 */
6249 vos_mem_free(pDelBAReqParams);
6250 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6251 vos_mem_free(pWdaParams);
6252 return ;
6253}
6254
Jeff Johnson295189b2012-06-20 16:38:30 -07006255/*
6256 * FUNCTION: WDA_ProcessDelBAReq
6257 * Request to WDI to Update the DELBA REQ params.
6258 */
6259VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
6260 tDelBAParams *pDelBAReqParams)
6261{
6262 WDI_Status status = WDI_STATUS_SUCCESS ;
6263 WDI_DelBAReqParamsType *wdiDelBAReqParam =
6264 (WDI_DelBAReqParamsType *)vos_mem_malloc(
6265 sizeof(WDI_DelBAReqParamsType)) ;
6266 tWDA_ReqParams *pWdaParams ;
6267 tANI_U16 staIdx = 0;
6268 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07006269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006270 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006271 if(NULL == wdiDelBAReqParam)
6272 {
6273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006274 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006275 VOS_ASSERT(0);
6276 return VOS_STATUS_E_NOMEM;
6277 }
6278 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6279 if(NULL == pWdaParams)
6280 {
6281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006282 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006283 VOS_ASSERT(0);
6284 vos_mem_free(wdiDelBAReqParam);
6285 return VOS_STATUS_E_NOMEM;
6286 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006287 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
6288 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
6289 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
6290 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006291 pWdaParams->pWdaContext = pWDA;
6292 /* Store DEL BA pointer, as this will be used for response */
6293 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006294 /* store Params pass it to WDI */
6295 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006296 /* if BA exchange over the air is failed, clear this tid in BaBitmap
6297 * maintained in WDA, so that WDA can retry for another BA session
6298 */
6299 staIdx = pDelBAReqParams->staIdx;
6300 tid = pDelBAReqParams->baTID;
6301 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07006302 status = WDI_DelBAReq(wdiDelBAReqParam,
6303 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006304 if(IS_WDI_STATUS_FAILURE(status))
6305 {
6306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6307 "Failure in DEL BA REQ Params WDI API, free all the memory " );
6308 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6309 vos_mem_free(pWdaParams->wdaMsgParam);
6310 vos_mem_free(pWdaParams);
6311 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006312 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006313}
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006314
6315/*
6316 * FUNCTION: WDA_UpdateChReqCallback
6317 *
6318 */
6319void WDA_UpdateChReqCallback(WDI_Status status, void* pUserData)
6320{
Siddharth Bhala006c122014-05-03 12:13:27 +05306321 tWDA_ReqParams *pWdaParams;
6322 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
6323 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
6324 WDI_UpdateChannelReqinfoType *pChanInfoType;
6325 tSirUpdateChanList *pChanList;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006326
6327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6328 "<------ %s " ,__func__);
Siddharth Bhala006c122014-05-03 12:13:27 +05306329 if(NULL == pUserData)
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006330 {
6331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhala006c122014-05-03 12:13:27 +05306332 "%s: pUserData received NULL", __func__);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006333 VOS_ASSERT(0);
6334 return;
6335 }
6336
Siddharth Bhala006c122014-05-03 12:13:27 +05306337 pWdaParams = (tWDA_ReqParams *)pUserData;
6338 pwdiUpdateChReqParam =
6339 (WDI_UpdateChReqParamsType *)pWdaParams->wdaWdiApiMsgParam;
6340 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
6341 pChanInfoType = pwdiUpdateChanReqType->pchanParam;
6342 pChanList = (tSirUpdateChanList *)pWdaParams->wdaMsgParam;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006343 /*
6344 * currently there is no response message is expected between PE and
6345 * WDA, Failure return from WDI is a ASSERT condition
6346 */
6347 vos_mem_free(pChanInfoType);
6348 vos_mem_free(pChanList);
6349 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6350 vos_mem_free(pWdaParams);
6351
6352 return;
6353}
6354
6355/*
6356 * FUNCTION: WDA_ProcessUpdateChannelList
6357 * Request to WDI to Update the ChannelList params.
6358 */
6359VOS_STATUS WDA_ProcessUpdateChannelList(tWDA_CbContext *pWDA,
6360 tSirUpdateChanList *pChanList)
6361{
6362 WDI_Status status = WDI_STATUS_SUCCESS;
6363 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
6364 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
6365 WDI_UpdateChannelReqinfoType *pChanInfoType;
6366 tWDA_ReqParams *pWdaParams;
6367 wpt_uint8 i;
6368
6369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6370 "------> %s " ,__func__);
6371 if(NULL == pChanList)
6372 {
6373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6374 "%s: NULL pChanList", __func__);
6375 VOS_ASSERT(0);
6376 return VOS_STATUS_E_INVAL;
6377 }
6378
6379 if(!WDA_getFwWlanFeatCaps(UPDATE_CHANNEL_LIST))
6380 {
6381 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6382 "Update channel list capability Not Supported");
6383 vos_mem_free(pChanList);
6384 return VOS_STATUS_E_INVAL;
6385 }
6386
6387 pwdiUpdateChReqParam = (WDI_UpdateChReqParamsType *)vos_mem_malloc(
6388 sizeof(WDI_UpdateChReqParamsType));
6389 if(NULL == pwdiUpdateChReqParam)
6390 {
6391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6392 "%s: VOS MEM Alloc Failed for WDI_UpdateChReqParamsType",
6393 __func__);
6394 VOS_ASSERT(0);
6395 vos_mem_free(pChanList);
6396 return VOS_STATUS_E_NOMEM;
6397 }
6398 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
6399 pChanInfoType = (WDI_UpdateChannelReqinfoType *)
6400 vos_mem_malloc(sizeof(WDI_UpdateChannelReqinfoType) *
6401 pChanList->numChan);
6402 if(NULL == pChanInfoType)
6403 {
6404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6405 "%s: VOS MEM Alloc Failure", __func__);
6406 VOS_ASSERT(0);
6407 vos_mem_free(pChanList);
6408 vos_mem_free(pwdiUpdateChReqParam);
6409 return VOS_STATUS_E_NOMEM;
6410 }
6411 vos_mem_zero(pChanInfoType, sizeof(WDI_UpdateChannelReqinfoType)
6412 * pChanList->numChan);
6413 pwdiUpdateChanReqType->pchanParam = pChanInfoType;
6414
6415 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6416 if(NULL == pWdaParams)
6417 {
6418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6419 "%s: VOS MEM Alloc Failure", __func__);
6420 VOS_ASSERT(0);
6421 vos_mem_free(pChanList);
6422 vos_mem_free(pChanInfoType);
6423 vos_mem_free(pwdiUpdateChReqParam);
6424 return VOS_STATUS_E_NOMEM;
6425 }
6426 pwdiUpdateChanReqType->numchan = pChanList->numChan;
6427
6428 for(i = 0; i < pwdiUpdateChanReqType->numchan; i++)
6429 {
6430 pChanInfoType->mhz =
6431 vos_chan_to_freq(pChanList->chanParam[i].chanId);
6432
6433 pChanInfoType->band_center_freq1 = pChanInfoType->mhz;
6434 pChanInfoType->band_center_freq2 = 0;
6435
6436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6437 "chan[%d] = %u", i, pChanInfoType->mhz);
6438 if (pChanList->chanParam[i].dfsSet)
6439 {
6440 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_PASSIVE);
6441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6442 "chan[%d] DFS[%d]", pChanList->chanParam[i].chanId,
6443 pChanList->chanParam[i].dfsSet);
6444 }
6445
6446 if (pChanInfoType->mhz < WDA_2_4_GHZ_MAX_FREQ)
6447 {
6448 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11G);
6449 }
6450 else
6451 {
6452 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11A);
6453 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_HT);
6454 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_VHT);
6455 }
6456
6457 WDA_SET_CHANNEL_MAX_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
6458 WDA_SET_CHANNEL_REG_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
6459
6460 pChanInfoType++;
6461 }
6462
6463 pwdiUpdateChReqParam->wdiReqStatusCB = NULL;
6464 pWdaParams->pWdaContext = pWDA;
6465 pWdaParams->wdaMsgParam = (void *)pChanList;
6466 /* store Params pass it to WDI */
6467 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiUpdateChReqParam;
6468 status = WDI_UpdateChannelReq(pwdiUpdateChReqParam,
6469 (WDI_UpdateChannelRspCb)WDA_UpdateChReqCallback, pWdaParams);
6470 if(IS_WDI_STATUS_FAILURE(status))
6471 {
6472 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6473 "Failure in Update Channel REQ Params WDI API, free all the memory");
6474 vos_mem_free(pwdiUpdateChanReqType->pchanParam);
6475 vos_mem_free(pwdiUpdateChReqParam);
6476 vos_mem_free(pWdaParams->wdaMsgParam);
6477 vos_mem_free(pWdaParams);
6478 }
6479 return CONVERT_WDI2VOS_STATUS(status);
6480}
6481
Jeff Johnson295189b2012-06-20 16:38:30 -07006482/*
6483 * FUNCTION: WDA_AddTSReqCallback
6484 * send ADD TS RSP back to PE
6485 */
6486void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
6487{
6488 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6489 tWDA_CbContext *pWDA;
6490 tAddTsParams *pAddTsReqParams;
6491
6492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006493 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006494 if(NULL == pWdaParams)
6495 {
6496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006497 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006498 VOS_ASSERT(0) ;
6499 return ;
6500 }
6501 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6502 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
6503 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6504 vos_mem_free(pWdaParams);
6505
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006506 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006507 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006508 return ;
6509}
6510
Jeff Johnson295189b2012-06-20 16:38:30 -07006511/*
6512 * FUNCTION: WDA_ProcessAddTSReq
6513 * Request to WDI to Update the ADD TS REQ params.
6514 */
6515VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
6516 tAddTsParams *pAddTsReqParams)
6517{
6518 WDI_Status status = WDI_STATUS_SUCCESS ;
6519 WDI_AddTSReqParamsType *wdiAddTSReqParam =
6520 (WDI_AddTSReqParamsType *)vos_mem_malloc(
6521 sizeof(WDI_AddTSReqParamsType)) ;
6522 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006524 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006525 if(NULL == wdiAddTSReqParam)
6526 {
6527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006528 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006529 VOS_ASSERT(0);
6530 return VOS_STATUS_E_NOMEM;
6531 }
6532 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6533 if(NULL == pWdaParams)
6534 {
6535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006536 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006537 VOS_ASSERT(0);
6538 vos_mem_free(wdiAddTSReqParam);
6539 return VOS_STATUS_E_NOMEM;
6540 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006541 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
6542 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006543 //TS IE
6544 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
6545 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
6546 pAddTsReqParams->tspec.length;
6547
6548 //TS IE : TS INFO : TRAFFIC
6549 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
6550 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
6551 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
6552 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
6553 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
6554 pAddTsReqParams->tspec.tsinfo.traffic.psb;
6555 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
6556 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
6557 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
6558 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
6559 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
6560 pAddTsReqParams->tspec.tsinfo.traffic.direction;
6561 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
6562 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
6563 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
6564 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
6565
6566 //TS IE : TS INFO : SCHEDULE
6567 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
6568 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
6569 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
6570 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07006571 //TS IE
6572 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
6573 pAddTsReqParams->tspec.nomMsduSz;
6574 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
6575 pAddTsReqParams->tspec.maxMsduSz;
6576 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
6577 pAddTsReqParams->tspec.minSvcInterval;
6578 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
6579 pAddTsReqParams->tspec.maxSvcInterval;
6580 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
6581 pAddTsReqParams->tspec.inactInterval;
6582 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
6583 pAddTsReqParams->tspec.suspendInterval;
6584 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
6585 pAddTsReqParams->tspec.svcStartTime;
6586 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
6587 pAddTsReqParams->tspec.minDataRate;
6588 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
6589 pAddTsReqParams->tspec.meanDataRate;
6590 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
6591 pAddTsReqParams->tspec.peakDataRate;
6592 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
6593 pAddTsReqParams->tspec.maxBurstSz;
6594 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
6595 pAddTsReqParams->tspec.delayBound;
6596 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
6597 pAddTsReqParams->tspec.minPhyRate;
6598 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
6599 pAddTsReqParams->tspec.surplusBw;
6600 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
6601 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07006602 /* TODO: tAddTsParams doesn't have the following fields */
6603#if 0
6604 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6605 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
6606 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6607 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6608#endif
6609 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
6610
6611 pWdaParams->pWdaContext = pWDA;
6612 /* Store ADD TS pointer, as this will be used for response */
6613 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006614 /* store Params pass it to WDI */
6615 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006616 status = WDI_AddTSReq(wdiAddTSReqParam,
6617 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006618 if(IS_WDI_STATUS_FAILURE(status))
6619 {
6620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6621 "Failure in ADD TS REQ Params WDI API, free all the memory " );
6622 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6623 vos_mem_free(pWdaParams);
6624 pAddTsReqParams->status = eSIR_FAILURE ;
6625 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
6626 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006627 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006628}
6629
Jeff Johnson295189b2012-06-20 16:38:30 -07006630/*
6631 * FUNCTION: WDA_DelTSReqCallback
6632 * send DEL TS RSP back to PE
6633 */
6634void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
6635{
6636 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006638 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006639 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6640 vos_mem_free(pWdaParams->wdaMsgParam) ;
6641 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006642 /*
6643 * No respone required for WDA_DEL_TS_REQ so just free the request
6644 * param here
6645 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006646 return ;
6647}
6648
Jeff Johnson295189b2012-06-20 16:38:30 -07006649/*
6650 * FUNCTION: WDA_ProcessDelTSReq
6651 * Request to WDI to Update the DELTS REQ params.
6652 */
6653VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
6654 tDelTsParams *pDelTSReqParams)
6655{
6656 WDI_Status status = WDI_STATUS_SUCCESS ;
6657 WDI_DelTSReqParamsType *wdiDelTSReqParam =
6658 (WDI_DelTSReqParamsType *)vos_mem_malloc(
6659 sizeof(WDI_DelTSReqParamsType)) ;
6660 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006662 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006663 if(NULL == wdiDelTSReqParam)
6664 {
6665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006666 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006667 VOS_ASSERT(0);
6668 return VOS_STATUS_E_NOMEM;
6669 }
6670 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6671 if(NULL == pWdaParams)
6672 {
6673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006674 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006675 VOS_ASSERT(0);
6676 vos_mem_free(wdiDelTSReqParam);
6677 return VOS_STATUS_E_NOMEM;
6678 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006679 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
6680 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
6681 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
6682 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
6683 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006684 pWdaParams->pWdaContext = pWDA;
6685 /* Store DEL TS pointer, as this will be used for response */
6686 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006687 /* store Params pass it to WDI */
6688 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006689 status = WDI_DelTSReq(wdiDelTSReqParam,
6690 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006691 if(IS_WDI_STATUS_FAILURE(status))
6692 {
6693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6694 "Failure in DEL TS REQ Params WDI API, free all the memory " );
6695 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6696 vos_mem_free(pWdaParams->wdaMsgParam);
6697 vos_mem_free(pWdaParams);
6698 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006699 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006700}
Jeff Johnson295189b2012-06-20 16:38:30 -07006701/*
6702 * FUNCTION: WDA_UpdateBeaconParamsCallback
6703 * Free the memory. No need to send any response to PE in this case
6704 */
6705void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
6706{
6707 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006709 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006710 if(NULL == pWdaParams)
6711 {
6712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006713 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006714 VOS_ASSERT(0) ;
6715 return ;
6716 }
6717 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6718 vos_mem_free(pWdaParams->wdaMsgParam) ;
6719 vos_mem_free(pWdaParams);
6720 /*
6721 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
6722 * param here
6723 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006724 return ;
6725}
Jeff Johnson295189b2012-06-20 16:38:30 -07006726/*
6727 * FUNCTION: WDA_ProcessUpdateBeaconParams
6728 * Request to WDI to send the beacon parameters to HAL to update the Hardware
6729 */
6730VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
6731 tUpdateBeaconParams *pUpdateBeaconParams)
6732{
6733 WDI_Status status = WDI_STATUS_SUCCESS ;
6734 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
6735 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
6736 sizeof(WDI_UpdateBeaconParamsType)) ;
6737 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006739 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006740 if(NULL == wdiUpdateBeaconParams)
6741 {
6742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006743 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006744 VOS_ASSERT(0);
6745 return VOS_STATUS_E_NOMEM;
6746 }
6747 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6748 if(NULL == pWdaParams)
6749 {
6750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006751 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006752 VOS_ASSERT(0);
6753 vos_mem_free(wdiUpdateBeaconParams);
6754 return VOS_STATUS_E_NOMEM;
6755 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006756 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
6757 pUpdateBeaconParams->bssIdx;
6758 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
6759 pUpdateBeaconParams->fShortPreamble;
6760 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
6761 pUpdateBeaconParams->fShortSlotTime;
6762 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
6763 pUpdateBeaconParams->beaconInterval;
6764 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
6765 pUpdateBeaconParams->llaCoexist;
6766 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
6767 pUpdateBeaconParams->llbCoexist;
6768 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
6769 pUpdateBeaconParams->llgCoexist;
6770 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
6771 pUpdateBeaconParams->ht20MhzCoexist;
6772 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
6773 pUpdateBeaconParams->llnNonGFCoexist;
6774 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
6775 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
6776 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
6777 pUpdateBeaconParams->fRIFSMode;
6778 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
6779 pUpdateBeaconParams->paramChangeBitmap;
6780 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
6781
6782 pWdaParams->pWdaContext = pWDA;
6783 /* Store UpdateBeacon Req pointer, as this will be used for response */
6784 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006785 /* store Params pass it to WDI */
6786 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006787 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
6788 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
6789 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006790 if(IS_WDI_STATUS_FAILURE(status))
6791 {
6792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6793 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
6794 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6795 vos_mem_free(pWdaParams->wdaMsgParam);
6796 vos_mem_free(pWdaParams);
6797 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006798 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006799}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08006800#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -07006801/*
6802 * FUNCTION: WDA_TSMStatsReqCallback
6803 * send TSM Stats RSP back to PE
6804 */
6805void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
6806{
6807 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6808 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006809 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
6810 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006811
6812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006813 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006814 if(NULL == pWdaParams)
6815 {
6816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006817 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006818 VOS_ASSERT(0) ;
6819 return ;
6820 }
6821 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006822 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
6823
6824 if(NULL == pGetTsmStatsReqParams)
6825 {
6826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6827 "%s: pGetTsmStatsReqParams received NULL", __func__);
6828 VOS_ASSERT(0);
6829 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6830 vos_mem_free(pWdaParams);
6831 return;
6832 }
6833
6834 pTsmRspParams =
6835 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07006836 if( NULL == pTsmRspParams )
6837 {
6838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006839 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006840 VOS_ASSERT( 0 );
6841 return ;
6842 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006843 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
6844 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
6845 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
6846
Jeff Johnson295189b2012-06-20 16:38:30 -07006847 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
6848 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
6849 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
6850 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
6851 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
6852 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
6853 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
6854 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
6855 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
6856 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006857
6858 /* Assign get tsm stats req req (backup) in to the response */
6859 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
6860
6861 /* free WDI command buffer */
6862 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6863 vos_mem_free(pWdaParams);
6864
Jeff Johnson295189b2012-06-20 16:38:30 -07006865 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006866 return ;
6867}
6868
6869
Jeff Johnson295189b2012-06-20 16:38:30 -07006870/*
6871 * FUNCTION: WDA_ProcessTsmStatsReq
6872 * Request to WDI to get the TSM Stats params.
6873 */
6874VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006875 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07006876{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006877 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006878 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006879 tWDA_ReqParams *pWdaParams = NULL;
6880 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
6881
Jeff Johnson295189b2012-06-20 16:38:30 -07006882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006883 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006884 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
6885 sizeof(WDI_TSMStatsReqParamsType));
6886 if(NULL == wdiTSMReqParam)
6887 {
6888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006889 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006890 VOS_ASSERT(0);
6891 return VOS_STATUS_E_NOMEM;
6892 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006893 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6894 if(NULL == pWdaParams)
6895 {
6896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006897 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006898 VOS_ASSERT(0);
6899 vos_mem_free(wdiTSMReqParam);
6900 return VOS_STATUS_E_NOMEM;
6901 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006902 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
6903 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
6904 pTsmStats->bssId,
6905 sizeof(wpt_macAddr));
6906 wdiTSMReqParam->wdiReqStatusCB = NULL ;
6907
6908 pWdaParams->pWdaContext = pWDA;
6909 /* Store TSM Stats pointer, as this will be used for response */
6910 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006911 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006912 status = WDI_TSMStatsReq(wdiTSMReqParam,
6913 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006914 if(IS_WDI_STATUS_FAILURE(status))
6915 {
6916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6917 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006918 vos_mem_free(pWdaParams);
6919
6920 pGetTsmStatsRspParams =
6921 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
6922 if(NULL == pGetTsmStatsRspParams)
6923 {
6924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6925 "%s: VOS MEM Alloc Failure", __func__);
6926 VOS_ASSERT(0);
6927 vos_mem_free(pTsmStats);
6928 return VOS_STATUS_E_NOMEM;
6929 }
6930 pGetTsmStatsRspParams->staId = pTsmStats->staId;
6931 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
6932 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
6933
6934 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006935 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006936 return CONVERT_WDI2VOS_STATUS(status) ;
6937}
6938#endif
6939/*
6940 * FUNCTION: WDA_SendBeaconParamsCallback
6941 * No need to send any response to PE in this case
6942 */
6943void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
6944{
6945
Jeff Johnson295189b2012-06-20 16:38:30 -07006946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006947 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006948 return ;
6949}
Jeff Johnson295189b2012-06-20 16:38:30 -07006950/*
6951 * FUNCTION: WDA_ProcessSendBeacon
6952 * Request to WDI to send the beacon template to HAL to update the TPE memory and
6953 * start beacon trasmission
6954 */
6955VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
6956 tSendbeaconParams *pSendbeaconParams)
6957{
6958 WDI_Status status = WDI_STATUS_SUCCESS ;
6959 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006961 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006962 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
6963 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
6964 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
6965 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07006966 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
6967 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05306968 /* p2pIeOffset should be atleast greater than timIeOffset */
6969 if ((pSendbeaconParams->p2pIeOffset != 0) &&
6970 (pSendbeaconParams->p2pIeOffset <
6971 pSendbeaconParams->timIeOffset))
6972 {
6973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6974 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
6975 VOS_ASSERT( 0 );
6976 return WDI_STATUS_E_FAILURE;
6977 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006978 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
6979 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07006980 /* Copy the beacon template to local buffer */
6981 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
6982 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
6983 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
6984
Jeff Johnson295189b2012-06-20 16:38:30 -07006985 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
6986 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006987 if(IS_WDI_STATUS_FAILURE(status))
6988 {
6989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6990 "Failure in SEND BEACON REQ Params WDI API" );
6991 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006992 vos_mem_free(pSendbeaconParams);
6993 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006994}
Jeff Johnson295189b2012-06-20 16:38:30 -07006995/*
6996 * FUNCTION: WDA_UpdateProbeRspParamsCallback
6997 * No need to send any response to PE in this case
6998 */
6999void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
7000{
Jeff Johnson295189b2012-06-20 16:38:30 -07007001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007002 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007003 return ;
7004}
7005
Jeff Johnson295189b2012-06-20 16:38:30 -07007006/*
7007 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
7008 * Request to WDI to send the probe response template to HAL to update the TPE memory and
7009 * send probe response
7010 */
7011VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
7012 tSendProbeRespParams *pSendProbeRspParams)
7013{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007014 WDI_Status status = WDI_STATUS_SUCCESS;
7015 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
7016 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07007017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007018 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007019
7020 if (!wdiSendProbeRspParam)
7021 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
7022
Jeff Johnson295189b2012-06-20 16:38:30 -07007023 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007024 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07007025 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007026 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07007027 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07007028 /* Copy the Probe Response template to local buffer */
7029 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007030 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07007031 pSendProbeRspParams->pProbeRespTemplate,
7032 pSendProbeRspParams->probeRespTemplateLen);
7033 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007034 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07007035 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
7036 WDI_PROBE_REQ_BITMAP_IE_LEN);
7037
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007038 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007039
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007040 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07007041 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007042 if(IS_WDI_STATUS_FAILURE(status))
7043 {
7044 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7045 "Failure in SEND Probe RSP Params WDI API" );
7046 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007047 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07007048 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007049 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07007050}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007051#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -07007052/*
7053 * FUNCTION: WDA_SetMaxTxPowerCallBack
7054 * send the response to PE with power value received from WDI
7055 */
7056void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
7057 void* pUserData)
7058{
7059 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7060 tWDA_CbContext *pWDA = NULL;
7061 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
7062
7063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007064 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007065 if(NULL == pWdaParams)
7066 {
7067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007068 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007069 VOS_ASSERT(0) ;
7070 return ;
7071 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007072 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7073 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007074 if( NULL == pMaxTxPowerParams )
7075 {
7076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007077 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07007078 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007079 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7080 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007081 return ;
7082 }
Jeff Johnsone7245742012-09-05 17:12:55 -07007083
Jeff Johnson295189b2012-06-20 16:38:30 -07007084
7085 /*need to free memory for the pointers used in the
7086 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007087 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7088 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007089 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07007090
Jeff Johnson295189b2012-06-20 16:38:30 -07007091
7092 /* send response to UMAC*/
7093 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
7094
7095 return;
7096}
Jeff Johnson295189b2012-06-20 16:38:30 -07007097/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007098 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07007099 * Request to WDI to send set Max Tx Power Request
7100 */
7101 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
7102 tMaxTxPowerParams *MaxTxPowerParams)
7103{
7104 WDI_Status status = WDI_STATUS_SUCCESS;
7105 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
7106 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007107
Jeff Johnson295189b2012-06-20 16:38:30 -07007108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007109 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007110
Jeff Johnson295189b2012-06-20 16:38:30 -07007111 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
7112 sizeof(WDI_SetMaxTxPowerParamsType));
7113 if(NULL == wdiSetMaxTxPowerParams)
7114 {
7115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007116 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007117 VOS_ASSERT(0);
7118 return VOS_STATUS_E_NOMEM;
7119 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007120 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7121 if(NULL == pWdaParams)
7122 {
7123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007124 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007125 vos_mem_free(wdiSetMaxTxPowerParams);
7126 VOS_ASSERT(0);
7127 return VOS_STATUS_E_NOMEM;
7128 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007129 /* Copy.Max.Tx.Power Params to WDI structure */
7130 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
7131 MaxTxPowerParams->bssId,
7132 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007133 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
7134 MaxTxPowerParams->selfStaMacAddr,
7135 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007136 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
7137 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07007138 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007139 pWdaParams->pWdaContext = pWDA;
7140 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007141 /* store Params pass it to WDI */
7142 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007143 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
7144 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007145 if(IS_WDI_STATUS_FAILURE(status))
7146 {
7147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7148 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
7149 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7150 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007151 /* send response to UMAC*/
7152 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007153 }
7154 return CONVERT_WDI2VOS_STATUS(status);
7155
7156}
Jeff Johnson295189b2012-06-20 16:38:30 -07007157#endif
schang86c22c42013-03-13 18:41:24 -07007158
7159/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07007160 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
7161 * send the response to PE with power value received from WDI
7162 */
7163void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
7164 *pwdiSetMaxTxPowerPerBandRsp,
7165 void* pUserData)
7166{
7167 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7168 tWDA_CbContext *pWDA = NULL;
7169 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
7170
7171 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7172 "<------ %s ", __func__);
7173 if (NULL == pWdaParams)
7174 {
7175 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7176 "%s: pWdaParams received NULL", __func__);
7177 VOS_ASSERT(0);
7178 return ;
7179 }
7180 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7181 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
7182 if ( NULL == pMxTxPwrPerBandParams )
7183 {
7184 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7185 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
7186 VOS_ASSERT(0);
7187 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7188 vos_mem_free(pWdaParams);
7189 return;
7190 }
7191
7192 /*need to free memory for the pointers used in the
7193 WDA Process.Set Max Tx Power Req function*/
7194 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7195 vos_mem_free(pWdaParams);
7196 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
7197
7198 /* send response to UMAC*/
7199 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
7200 pMxTxPwrPerBandParams, 0);
7201
7202 return;
7203}
7204
7205/*
7206 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
7207 * Request to WDI to send set Max Tx Power Per band Request
7208 */
7209 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
7210 tMaxTxPowerPerBandParams
7211 *MaxTxPowerPerBandParams)
7212{
7213 WDI_Status status = WDI_STATUS_SUCCESS;
7214 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
7215 tWDA_ReqParams *pWdaParams = NULL;
7216
7217 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7218 "------> %s ", __func__);
7219
7220 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
7221 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
7222
7223 if (NULL == wdiSetMxTxPwrPerBandParams)
7224 {
7225 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7226 "%s: VOS MEM Alloc Failure", __func__);
7227 VOS_ASSERT(0);
7228 return VOS_STATUS_E_NOMEM;
7229 }
7230 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7231 if (NULL == pWdaParams)
7232 {
7233 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7234 "%s: VOS MEM Alloc Failure", __func__);
7235 vos_mem_free(wdiSetMxTxPwrPerBandParams);
7236 VOS_ASSERT(0);
7237 return VOS_STATUS_E_NOMEM;
7238 }
7239 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
7240 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
7241 MaxTxPowerPerBandParams->bandInfo;
7242 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
7243 MaxTxPowerPerBandParams->power;
7244 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
7245 pWdaParams->pWdaContext = pWDA;
7246 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
7247 /* store Params pass it to WDI */
7248 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
7249 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
7250 WDA_SetMaxTxPowerPerBandCallBack,
7251 pWdaParams);
7252 if (IS_WDI_STATUS_FAILURE(status))
7253 {
7254 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7255 "Failure in SET MAX TX Power REQ Params WDI API,"
7256 " free all the memory");
7257 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7258 vos_mem_free(pWdaParams);
7259 /* send response to UMAC*/
7260 WDA_SendMsg(pWDA,
7261 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
7262 MaxTxPowerPerBandParams, 0);
7263 }
7264 return CONVERT_WDI2VOS_STATUS(status);
7265}
7266
7267/*
schang86c22c42013-03-13 18:41:24 -07007268 * FUNCTION: WDA_SetTxPowerCallBack
7269 * send the response to PE with power value received from WDI
7270 */
7271void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
7272 void* pUserData)
7273{
7274 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7275 tWDA_CbContext *pWDA = NULL;
7276 tSirSetTxPowerReq *pTxPowerParams = NULL;
7277
7278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7279 "<------ %s ", __func__);
7280 if(NULL == pWdaParams)
7281 {
7282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7283 "%s: pWdaParams received NULL", __func__);
7284 VOS_ASSERT(0) ;
7285 return ;
7286 }
7287 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7288 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
7289 if(NULL == pTxPowerParams)
7290 {
7291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7292 "%s: pTxPowerParams received NULL " ,__func__);
7293 VOS_ASSERT(0);
7294 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7295 vos_mem_free(pWdaParams);
7296 return ;
7297 }
7298
7299 /*need to free memory for the pointers used in the
7300 WDA Process.Set Max Tx Power Req function*/
7301 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7302 vos_mem_free(pWdaParams);
7303
7304 /* send response to UMAC*/
7305 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
7306 return;
7307}
7308
7309/*
7310 * FUNCTION: WDA_ProcessSetTxPowerReq
7311 * Request to WDI to send set Tx Power Request
7312 */
7313 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
7314 tSirSetTxPowerReq *txPowerParams)
7315{
7316 WDI_Status status = WDI_STATUS_SUCCESS;
7317 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
7318 tWDA_ReqParams *pWdaParams = NULL;
7319
7320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7321 "------> %s ", __func__);
7322
7323 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
7324 sizeof(WDI_SetTxPowerParamsType));
7325 if(NULL == wdiSetTxPowerParams)
7326 {
7327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7328 "%s: VOS MEM Alloc Failure", __func__);
7329 VOS_ASSERT(0);
7330 return VOS_STATUS_E_NOMEM;
7331 }
7332 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7333 if(NULL == pWdaParams)
7334 {
7335 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7336 "%s: VOS MEM Alloc Failure", __func__);
7337 vos_mem_free(wdiSetTxPowerParams);
7338 VOS_ASSERT(0);
7339 return VOS_STATUS_E_NOMEM;
7340 }
7341 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
7342 txPowerParams->bssIdx;
7343 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
7344 txPowerParams->mwPower;
7345 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
7346 pWdaParams->pWdaContext = pWDA;
7347 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
7348 /* store Params pass it to WDI */
7349 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
7350 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
7351 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
7352 if(IS_WDI_STATUS_FAILURE(status))
7353 {
7354 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7355 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
7356 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7357 vos_mem_free(pWdaParams);
7358 /* send response to UMAC*/
7359 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
7360 }
7361 return CONVERT_WDI2VOS_STATUS(status);
7362}
7363
Jeff Johnson295189b2012-06-20 16:38:30 -07007364/*
7365 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7366 * Free the memory. No need to send any response to PE in this case
7367 */
7368void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
7369{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007370 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7371
Jeff Johnson295189b2012-06-20 16:38:30 -07007372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007373 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007374
7375 if(NULL == pWdaParams)
7376 {
7377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007378 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007379 VOS_ASSERT(0) ;
7380 return ;
7381 }
7382
7383 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7384 vos_mem_free(pWdaParams->wdaMsgParam) ;
7385 vos_mem_free(pWdaParams);
7386
Jeff Johnson295189b2012-06-20 16:38:30 -07007387 /*
7388 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
7389 * so just free the request param here
7390 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007391 return ;
7392}
7393
Jeff Johnson295189b2012-06-20 16:38:30 -07007394/*
7395 * FUNCTION: WDA_ProcessSetP2PGONOAReq
7396 * Request to WDI to set the P2P Group Owner Notice of Absence Req
7397 */
7398VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
7399 tP2pPsParams *pP2pPsConfigParams)
7400{
7401 WDI_Status status = WDI_STATUS_SUCCESS ;
7402 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
7403 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
7404 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007405 tWDA_ReqParams *pWdaParams = NULL;
7406
Jeff Johnson295189b2012-06-20 16:38:30 -07007407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007408 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007409 if(NULL == wdiSetP2PGONOAReqParam)
7410 {
7411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007412 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007413 VOS_ASSERT(0);
7414 return VOS_STATUS_E_NOMEM;
7415 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007416
7417 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7418 if(NULL == pWdaParams)
7419 {
7420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007421 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007422 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007423 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007424 VOS_ASSERT(0);
7425 return VOS_STATUS_E_NOMEM;
7426 }
7427
Jeff Johnson295189b2012-06-20 16:38:30 -07007428 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
7429 pP2pPsConfigParams->opp_ps;
7430 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
7431 pP2pPsConfigParams->ctWindow;
7432 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
7433 pP2pPsConfigParams->count;
7434 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
7435 pP2pPsConfigParams->duration;
7436 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
7437 pP2pPsConfigParams->interval;
7438 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
7439 pP2pPsConfigParams->single_noa_duration;
7440 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
7441 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007442
Jeff Johnson295189b2012-06-20 16:38:30 -07007443 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
7444 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007445 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
7446
Jeff Johnson295189b2012-06-20 16:38:30 -07007447 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007448 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
7449 pWdaParams->pWdaContext = pWDA;
7450
Jeff Johnson295189b2012-06-20 16:38:30 -07007451 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007452 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
7453
Jeff Johnson295189b2012-06-20 16:38:30 -07007454 if(IS_WDI_STATUS_FAILURE(status))
7455 {
7456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7457 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007458 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7459 vos_mem_free(pWdaParams->wdaMsgParam);
7460 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007461 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007462 return CONVERT_WDI2VOS_STATUS(status);
7463
Jeff Johnson295189b2012-06-20 16:38:30 -07007464}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307465
7466#ifdef FEATURE_WLAN_TDLS
7467/*
7468 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7469 * Free the memory. No need to send any response to PE in this case
7470 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307471void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
7472 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307473{
7474 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7475 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307476 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307477
7478
7479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7480 "<------ %s " ,__func__);
7481 if(NULL == pWdaParams)
7482 {
7483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7484 "%s: pWdaParams received NULL", __func__);
7485 VOS_ASSERT(0) ;
7486 return ;
7487 }
7488 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7489
7490 if(NULL == pWdaParams)
7491 {
7492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7493 "%s: pWdaParams received NULL", __func__);
7494 VOS_ASSERT(0) ;
7495 return ;
7496 }
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307497 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
7498 if( NULL == pTdlsLinkEstablishParams )
7499 {
7500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7501 "%s: pTdlsLinkEstablishParams "
7502 "received NULL " ,__func__);
7503 VOS_ASSERT(0);
7504 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7505 vos_mem_free(pWdaParams);
7506 return ;
7507 }
7508 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
7509 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307510 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307511 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307512 /* send response to UMAC*/
7513 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
7514
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307515 return ;
7516}
7517
7518VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
7519 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
7520{
7521 WDI_Status status = WDI_STATUS_SUCCESS ;
7522 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
7523 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
7524 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
7525 tWDA_ReqParams *pWdaParams = NULL;
7526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7527 "------> %s " ,__func__);
7528 if(NULL == wdiSetTDLSLinkEstablishReqParam)
7529 {
7530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7531 "%s: VOS MEM Alloc Failure", __func__);
7532 VOS_ASSERT(0);
7533 return VOS_STATUS_E_NOMEM;
7534 }
7535 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7536 if(NULL == pWdaParams)
7537 {
7538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7539 "%s: VOS MEM Alloc Failure", __func__);
7540 vos_mem_free(pTdlsLinkEstablishParams);
7541 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
7542 VOS_ASSERT(0);
7543 return VOS_STATUS_E_NOMEM;
7544 }
7545 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307546 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307547 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307548 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307549 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307550 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307551 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307552 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307553 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307554 pTdlsLinkEstablishParams->isBufsta;
Naresh Jayaramc7cbd782014-02-04 17:38:23 +05307555 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsOffChannelSupported =
7556 pTdlsLinkEstablishParams->isOffChannelSupported;
7557
7558 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannels,
7559 pTdlsLinkEstablishParams->validChannels,
7560 pTdlsLinkEstablishParams->validChannelsLen);
7561
7562 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannelsLen =
7563 pTdlsLinkEstablishParams->validChannelsLen;
7564
7565 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClasses,
7566 pTdlsLinkEstablishParams->validOperClasses,
7567 pTdlsLinkEstablishParams->validOperClassesLen);
7568 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClassesLen =
7569 pTdlsLinkEstablishParams->validOperClassesLen;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307570
7571 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
7572 /* Store msg pointer from PE, as this will be used for response */
7573 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
7574 /* store Params pass it to WDI */
7575 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
7576 pWdaParams->pWdaContext = pWDA;
7577
7578 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
7579 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
7580 WDA_SetTDLSLinkEstablishReqParamsCallback,
7581 pWdaParams);
7582 if(IS_WDI_STATUS_FAILURE(status))
7583 {
7584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7585 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
7586 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7587 vos_mem_free(pWdaParams->wdaMsgParam);
7588 vos_mem_free(pWdaParams);
7589 }
7590 return CONVERT_WDI2VOS_STATUS(status);
7591}
Atul Mittalc0f739f2014-07-31 13:47:47 +05307592
7593// tdlsoffchan
7594void WDA_SetTDLSChanSwitchReqParamsCallback(WDI_SetTdlsChanSwitchReqResp *wdiSetTdlsChanSwitchReqRsp,
7595 void* pUserData)
7596{
7597 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7598 tWDA_CbContext *pWDA = NULL;
7599 tTdlsChanSwitchParams *pTdlsChanSwitchParams;
7600
7601
7602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7603 "<------ %s " ,__func__);
7604 if(NULL == pWdaParams)
7605 {
7606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7607 "%s: pWdaParams received NULL", __func__);
Atul Mittalc0f739f2014-07-31 13:47:47 +05307608 VOS_ASSERT(0) ;
7609 return ;
7610 }
7611 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7612
Atul Mittal60bd4292014-08-14 12:19:27 +05307613 if(NULL == pWdaParams)
7614 {
7615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7616 "%s: pWdaParams received NULL", __func__);
7617 VOS_ASSERT(0) ;
7618 return ;
7619 }
Atul Mittalc0f739f2014-07-31 13:47:47 +05307620 pTdlsChanSwitchParams = (tTdlsChanSwitchParams *)pWdaParams->wdaMsgParam ;
Atul Mittal60bd4292014-08-14 12:19:27 +05307621 if( NULL == pTdlsChanSwitchParams )
Atul Mittalc0f739f2014-07-31 13:47:47 +05307622 {
7623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7624 "%s: pTdlsChanSwitchParams "
7625 "received NULL " ,__func__);
7626 VOS_ASSERT(0);
7627 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7628 vos_mem_free(pWdaParams);
7629 return ;
7630 }
7631 pTdlsChanSwitchParams->status = CONVERT_WDI2SIR_STATUS(
7632 wdiSetTdlsChanSwitchReqRsp->wdiStatus);
Atul Mittalc0f739f2014-07-31 13:47:47 +05307633 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7634 vos_mem_free(pWdaParams);
Atul Mittal60bd4292014-08-14 12:19:27 +05307635 /* send response to UMAC*/
7636 WDA_SendMsg(pWDA, WDA_SET_TDLS_CHAN_SWITCH_REQ_RSP, pTdlsChanSwitchParams, 0) ;
Atul Mittalc0f739f2014-07-31 13:47:47 +05307637
7638 return ;
7639}
7640VOS_STATUS WDA_ProcessSetTdlsChanSwitchReq(tWDA_CbContext *pWDA,
7641 tTdlsChanSwitchParams *pTdlsChanSwitchParams)
7642{
7643 WDI_Status status = WDI_STATUS_SUCCESS ;
7644 WDI_SetTDLSChanSwitchReqParamsType *wdiSetTDLSChanSwitchReqParam =
7645 (WDI_SetTDLSChanSwitchReqParamsType *)vos_mem_malloc(
7646 sizeof(WDI_SetTDLSChanSwitchReqParamsType));
7647 tWDA_ReqParams *pWdaParams = NULL;
7648
7649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7650 "Enter: %s ",__func__);
7651 if(NULL == wdiSetTDLSChanSwitchReqParam)
7652 {
7653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7654 "%s: VOS MEM Alloc Failure", __func__);
7655 VOS_ASSERT(0);
7656 return VOS_STATUS_E_NOMEM;
7657 }
7658
7659 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7660 if(NULL == pWdaParams)
7661 {
7662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7663 "%s: VOS MEM Alloc Failure", __func__);
7664 vos_mem_free(pTdlsChanSwitchParams);
7665 vos_mem_free(wdiSetTDLSChanSwitchReqParam);
7666 VOS_ASSERT(0);
7667 return VOS_STATUS_E_NOMEM;
7668 }
7669 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.staIdx =
7670 pTdlsChanSwitchParams->staIdx;
7671 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.isOffchannelInitiator =
7672 pTdlsChanSwitchParams->tdlsSwMode;
7673 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetOperClass =
7674 pTdlsChanSwitchParams->operClass;
7675 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.targetChannel =
7676 pTdlsChanSwitchParams->tdlsOffCh;
7677 wdiSetTDLSChanSwitchReqParam->wdiTDLSChanSwitchReqInfo.secondaryChannelOffset =
7678 pTdlsChanSwitchParams->tdlsOffChBwOffset;
7679
7680
7681 /* Store msg pointer from PE, as this will be used for response */
7682 pWdaParams->wdaMsgParam = (void *)pTdlsChanSwitchParams ;
7683 /* store Params pass it to WDI */
7684 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSChanSwitchReqParam ;
7685 pWdaParams->pWdaContext = pWDA;
7686 status = WDI_SetTDLSChanSwitchReq(wdiSetTDLSChanSwitchReqParam,
7687 (WDI_SetTDLSChanSwitchReqParamsRspCb)
7688 WDA_SetTDLSChanSwitchReqParamsCallback,
7689 pWdaParams);
7690 if(IS_WDI_STATUS_FAILURE(status))
7691 {
7692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7693 "Failure in TDLS Channel Switch Req WDI API, free all the memory" );
7694 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7695 vos_mem_free(pWdaParams->wdaMsgParam);
7696 vos_mem_free(pWdaParams);
7697 }
7698 return CONVERT_WDI2VOS_STATUS(status);
7699}
7700#endif /*FEATURE_WLAN_TDLS*/
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307701
7702
Jeff Johnson295189b2012-06-20 16:38:30 -07007703#ifdef WLAN_FEATURE_VOWIFI_11R
7704/*
7705 * FUNCTION: WDA_AggrAddTSReqCallback
7706 * send ADD AGGREGATED TS RSP back to PE
7707 */
7708void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
7709{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007710 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7711 tWDA_CbContext *pWDA;
7712 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007713 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07007714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007715 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007716 if(NULL == pWdaParams)
7717 {
7718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007719 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007720 VOS_ASSERT(0) ;
7721 return ;
7722 }
7723
7724 pWDA = pWdaParams->pWdaContext;
7725 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007726
7727 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
7728 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007729 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007730 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007731 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007732
7733 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7734 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007735 return ;
7736}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07007737/*
7738 * FUNCTION: WDA_ProcessAddTSReq
7739 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
7740 */
7741VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
7742 tAggrAddTsParams *pAggrAddTsReqParams)
7743{
7744 WDI_Status status = WDI_STATUS_SUCCESS ;
7745 int i;
7746 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007747 tWDA_ReqParams *pWdaParams = NULL;
7748
7749
Jeff Johnson295189b2012-06-20 16:38:30 -07007750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007751 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007752 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
7753 sizeof(WDI_AggrAddTSReqParamsType)) ;
7754 if(NULL == wdiAggrAddTSReqParam)
7755 {
7756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007757 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007758 VOS_ASSERT(0);
7759 return VOS_STATUS_E_NOMEM;
7760 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007761
7762
7763 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7764 if(NULL == pWdaParams)
7765 {
7766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007767 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007768 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007769 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007770 VOS_ASSERT(0);
7771 return VOS_STATUS_E_NOMEM;
7772 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007773 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
7774 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
7775 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007776 for( i = 0; i < WDI_MAX_NO_AC; i++ )
7777 {
7778 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
7779 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
7780 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07007781 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
7782 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
7783 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
7784 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
7785 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
7786 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
7787 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
7788 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
7789 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
7790 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
7791 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
7792 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
7793 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
7794 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
7795 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
7796 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07007797 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
7798 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07007799 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
7800 pAggrAddTsReqParams->tspec[i].nomMsduSz;
7801 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
7802 pAggrAddTsReqParams->tspec[i].maxMsduSz;
7803 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
7804 pAggrAddTsReqParams->tspec[i].minSvcInterval;
7805 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
7806 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
7807 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
7808 pAggrAddTsReqParams->tspec[i].inactInterval;
7809 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
7810 pAggrAddTsReqParams->tspec[i].suspendInterval;
7811 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
7812 pAggrAddTsReqParams->tspec[i].svcStartTime;
7813 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
7814 pAggrAddTsReqParams->tspec[i].minDataRate;
7815 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
7816 pAggrAddTsReqParams->tspec[i].meanDataRate;
7817 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
7818 pAggrAddTsReqParams->tspec[i].peakDataRate;
7819 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
7820 pAggrAddTsReqParams->tspec[i].maxBurstSz;
7821 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
7822 pAggrAddTsReqParams->tspec[i].delayBound;
7823 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
7824 pAggrAddTsReqParams->tspec[i].minPhyRate;
7825 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
7826 pAggrAddTsReqParams->tspec[i].surplusBw;
7827 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
7828 pAggrAddTsReqParams->tspec[i].mediumTime;
7829 }
7830
7831 /* TODO: tAggrAddTsParams doesn't have the following fields */
7832#if 0
7833 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
7834 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
7835 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
7836 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
7837#endif
7838 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
7839
7840 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007841 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007842 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007843 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
7844
7845 pWdaParams->pWdaContext = pWDA;
7846
Jeff Johnson295189b2012-06-20 16:38:30 -07007847 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007848 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
7849
Jeff Johnson295189b2012-06-20 16:38:30 -07007850 if(IS_WDI_STATUS_FAILURE(status))
7851 {
7852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7853 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007854 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7855 vos_mem_free(pWdaParams);
7856
7857 /* send the failure response back to PE*/
7858 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
7859 {
7860 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
7861 }
7862
7863 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
7864 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007865 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007866 return CONVERT_WDI2VOS_STATUS(status) ;
7867}
7868#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07007869/*
Mihir Shetea4306052014-03-25 00:02:54 +05307870 * FUNCTION: WDA_EnterImpsRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007871 * send Enter IMPS RSP back to PE
7872 */
Mihir Shetea4306052014-03-25 00:02:54 +05307873void WDA_EnterImpsRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007874{
Mihir Shetea4306052014-03-25 00:02:54 +05307875 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7876 tWDA_CbContext *pWDA;
7877
Jeff Johnson295189b2012-06-20 16:38:30 -07007878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Mihir Shetea4306052014-03-25 00:02:54 +05307879 "<------ %s status=%d" ,__func__,status);
7880 if(NULL == pWdaParams)
7881 {
7882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7883 "%s: pWdaParams received NULL", __func__);
7884 VOS_ASSERT(0);
7885 return;
7886 }
7887
7888 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7889
7890 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7891 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007892 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007893 return ;
7894}
Mihir Shetea4306052014-03-25 00:02:54 +05307895
7896
7897/*
7898 * FUNCTION: WDA_EnterImpsReqCallback
7899 * Free memory and send Enter IMPS RSP back to PE.
7900 * Invoked when Enter IMPS REQ failed in WDI and no RSP callback is generated.
7901 */
7902void WDA_EnterImpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7903{
7904 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7905 tWDA_CbContext *pWDA;
7906
7907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7908 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7909
7910 if(NULL == pWdaParams)
7911 {
7912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7913 "%s: pWdaParams received NULL", __func__);
7914 VOS_ASSERT(0);
7915 return;
7916 }
7917
7918 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7919
7920 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7921 {
7922 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7923 vos_mem_free(pWdaParams);
7924 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
7925 CONVERT_WDI2SIR_STATUS(wdiStatus));
7926 }
7927
7928 return;
7929}
Jeff Johnson295189b2012-06-20 16:38:30 -07007930/*
7931 * FUNCTION: WDA_ProcessEnterImpsReq
7932 * Request to WDI to Enter IMPS power state.
7933 */
7934VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
7935{
7936 WDI_Status status = WDI_STATUS_SUCCESS ;
Mihir Shetea4306052014-03-25 00:02:54 +05307937 WDI_EnterImpsReqParamsType *wdiEnterImpsReqParams;
7938 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007940 "------> %s " ,__func__);
Mihir Shetea4306052014-03-25 00:02:54 +05307941
7942
7943 wdiEnterImpsReqParams = vos_mem_malloc(sizeof(WDI_EnterImpsReqParamsType));
7944 if (NULL == wdiEnterImpsReqParams)
7945 {
7946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7947 "%s: VOS MEM Alloc Failure", __func__);
7948 VOS_ASSERT(0);
7949 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
7950 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
7951 return VOS_STATUS_E_NOMEM;
7952 }
7953
7954 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7955 if (NULL == pWdaParams)
7956 {
7957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7958 "%s: VOS MEM Alloc Failure", __func__);
7959 VOS_ASSERT(0);
7960 vos_mem_free(wdiEnterImpsReqParams);
7961 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL ,
7962 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
7963 return VOS_STATUS_E_NOMEM;
7964 }
7965
7966 wdiEnterImpsReqParams->wdiReqStatusCB = WDA_EnterImpsReqCallback;
7967 wdiEnterImpsReqParams->pUserData = pWdaParams;
7968
7969 pWdaParams->wdaWdiApiMsgParam = wdiEnterImpsReqParams;
7970 pWdaParams->wdaMsgParam = NULL;
7971 pWdaParams->pWdaContext = pWDA;
7972
7973 status = WDI_EnterImpsReq(wdiEnterImpsReqParams,
7974 (WDI_EnterImpsRspCb)WDA_EnterImpsRspCallback,
7975 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007976 if(IS_WDI_STATUS_FAILURE(status))
7977 {
7978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7979 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Mihir Shetea4306052014-03-25 00:02:54 +05307980 vos_mem_free(wdiEnterImpsReqParams);
7981 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007982 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007983 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007984 return CONVERT_WDI2VOS_STATUS(status) ;
7985}
Jeff Johnson295189b2012-06-20 16:38:30 -07007986/*
7987 * FUNCTION: WDA_ExitImpsReqCallback
7988 * send Exit IMPS RSP back to PE
7989 */
7990void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
7991{
7992 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007994 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007995 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007996 return ;
7997}
Jeff Johnson295189b2012-06-20 16:38:30 -07007998/*
7999 * FUNCTION: WDA_ProcessExitImpsReq
8000 * Request to WDI to Exit IMPS power state.
8001 */
8002VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
8003{
8004 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008006 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008007 status = WDI_ExitImpsReq((WDI_ExitImpsRspCb)WDA_ExitImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07008008 if(IS_WDI_STATUS_FAILURE(status))
8009 {
8010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8011 "Failure in Exit IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008012 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008013 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008014 return CONVERT_WDI2VOS_STATUS(status) ;
8015}
Jeff Johnson295189b2012-06-20 16:38:30 -07008016/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008017 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008018 * send Enter BMPS RSP back to PE
8019 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008020void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008021{
8022 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8023 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008024 tEnterBmpsParams *pEnterBmpsRspParams;
8025
Jeff Johnson295189b2012-06-20 16:38:30 -07008026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008027 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008028 if(NULL == pWdaParams)
8029 {
8030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008031 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008032 VOS_ASSERT(0) ;
8033 return ;
8034 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008035
8036 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8037 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
8038
8039 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008040 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008041
8042 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008043 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008044 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
8045
Jeff Johnson295189b2012-06-20 16:38:30 -07008046 return ;
8047}
Jeff Johnson295189b2012-06-20 16:38:30 -07008048/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008049 * FUNCTION: WDA_EnterBmpsReqCallback
8050 * Free memory and send Enter BMPS RSP back to PE.
8051 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
8052 */
8053void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8054{
8055 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8056 tWDA_CbContext *pWDA;
8057 tEnterBmpsParams *pEnterBmpsRspParams;
8058
8059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8060 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8061
8062 if(NULL == pWdaParams)
8063 {
8064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8065 "%s: pWdaParams received NULL", __func__);
8066 VOS_ASSERT(0);
8067 return;
8068 }
8069
8070 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8071 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
8072 pEnterBmpsRspParams->status = wdiStatus;
8073
8074 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8075 {
8076 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8077 vos_mem_free(pWdaParams);
8078 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
8079 }
8080
8081 return;
8082}
8083/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008084 * FUNCTION: WDA_ProcessEnterBmpsReq
8085 * Request to WDI to Enter BMPS power state.
8086 */
8087VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
8088 tEnterBmpsParams *pEnterBmpsReqParams)
8089{
8090 WDI_Status status = WDI_STATUS_SUCCESS;
8091 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
8092 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008094 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008095 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
8096 {
8097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008098 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008099 VOS_ASSERT(0);
8100 return VOS_STATUS_E_FAILURE;
8101 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008102 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
8103 if (NULL == wdiEnterBmpsReqParams)
8104 {
8105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008106 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008107 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008108 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
8109 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008110 return VOS_STATUS_E_NOMEM;
8111 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008112 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
8113 if (NULL == pWdaParams)
8114 {
8115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008116 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008117 VOS_ASSERT(0);
8118 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008119 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
8120 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008121 return VOS_STATUS_E_NOMEM;
8122 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008123 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
8124 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
8125 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
8126 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08008127 // For ESE and 11R Roaming
Jeff Johnson295189b2012-06-20 16:38:30 -07008128 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
8129 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
8130 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008131 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
8132 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008133
Jeff Johnson295189b2012-06-20 16:38:30 -07008134 /* Store param pointer as passed in by caller */
8135 /* store Params pass it to WDI */
8136 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008137 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008138 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008139 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008140 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008141 if (IS_WDI_STATUS_FAILURE(status))
8142 {
8143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8144 "Failure in Enter BMPS REQ WDI API, free all the memory" );
8145 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008146 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07008147 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008148 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008149 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008150 return CONVERT_WDI2VOS_STATUS(status);
8151}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008152
8153
8154static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
8155 WDI_Status wdiStatus,
8156 tExitBmpsParams *pExitBmpsReqParams)
8157{
8158 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
8159
8160 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
8161}
8162
8163
Jeff Johnson295189b2012-06-20 16:38:30 -07008164/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008165 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008166 * send Exit BMPS RSP back to PE
8167 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008168void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008169{
8170 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8171 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008172 tExitBmpsParams *pExitBmpsRspParams;
8173
Jeff Johnson295189b2012-06-20 16:38:30 -07008174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008175 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008176 if(NULL == pWdaParams)
8177 {
8178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008179 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008180 VOS_ASSERT(0) ;
8181 return ;
8182 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008183
8184 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8185 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
8186
8187 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008188 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008189
Jeff Johnson295189b2012-06-20 16:38:30 -07008190 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8191 vos_mem_free(pWdaParams) ;
8192
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008193 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008194 return ;
8195}
Jeff Johnson295189b2012-06-20 16:38:30 -07008196/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008197 * FUNCTION: WDA_ExitBmpsReqCallback
8198 * Free memory and send Exit BMPS RSP back to PE.
8199 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
8200 */
8201void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
8202{
8203 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8204 tWDA_CbContext *pWDA;
8205 tExitBmpsParams *pExitBmpsRspParams;
8206
8207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8208 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8209
8210 if(NULL == pWdaParams)
8211 {
8212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8213 "%s: pWdaParams received NULL", __func__);
8214 VOS_ASSERT(0);
8215 return;
8216 }
8217
8218 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8219 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
8220 pExitBmpsRspParams->status = wdiStatus;
8221
8222 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8223 {
8224 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8225 vos_mem_free(pWdaParams);
8226 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
8227 }
8228
8229 return;
8230}
8231/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008232 * FUNCTION: WDA_ProcessExitBmpsReq
8233 * Request to WDI to Exit BMPS power state.
8234 */
8235VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
8236 tExitBmpsParams *pExitBmpsReqParams)
8237{
8238 WDI_Status status = WDI_STATUS_SUCCESS ;
8239 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
8240 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
8241 sizeof(WDI_ExitBmpsReqParamsType)) ;
8242 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008244 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008245 if(NULL == wdiExitBmpsReqParams)
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);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008250 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008251 return VOS_STATUS_E_NOMEM;
8252 }
8253 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8254 if(NULL == pWdaParams)
8255 {
8256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008257 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008258 VOS_ASSERT(0);
8259 vos_mem_free(wdiExitBmpsReqParams);
8260 return VOS_STATUS_E_NOMEM;
8261 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008262 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07008263
8264 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
8265
Yue Ma7f44bbe2013-04-12 11:47:39 -07008266 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
8267 wdiExitBmpsReqParams->pUserData = pWdaParams;
8268
Jeff Johnson295189b2012-06-20 16:38:30 -07008269 /* Store param pointer as passed in by caller */
8270 /* store Params pass it to WDI */
8271 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
8272 pWdaParams->pWdaContext = pWDA;
8273 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008274 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008275 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008276 if(IS_WDI_STATUS_FAILURE(status))
8277 {
8278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8279 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008280 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8281 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07008282 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008283 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008284 return CONVERT_WDI2VOS_STATUS(status) ;
8285}
Jeff Johnson295189b2012-06-20 16:38:30 -07008286/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008287 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008288 * send Enter UAPSD RSP back to PE
8289 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008290void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008291{
8292 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8293 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008294 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008296 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008297 if(NULL == pWdaParams)
8298 {
8299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008300 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008301 VOS_ASSERT(0) ;
8302 return ;
8303 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008304
8305 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8306 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
8307
8308 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008309 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008310
Jeff Johnson295189b2012-06-20 16:38:30 -07008311 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8312 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008313 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008314 return ;
8315}
Jeff Johnson295189b2012-06-20 16:38:30 -07008316/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008317 * FUNCTION: WDA_EnterUapsdReqCallback
8318 * Free memory and send Enter UAPSD RSP back to PE.
8319 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
8320 */
8321void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
8322{
8323 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8324 tWDA_CbContext *pWDA;
8325 tUapsdParams *pEnterUapsdRsqParams;
8326
8327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8328 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8329
8330 if(NULL == pWdaParams)
8331 {
8332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8333 "%s: pWdaParams received NULL", __func__);
8334 VOS_ASSERT(0);
8335 return;
8336 }
8337
8338 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8339 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
8340 pEnterUapsdRsqParams->status = wdiStatus;
8341
8342 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8343 {
8344 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8345 vos_mem_free(pWdaParams);
8346 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
8347 }
8348
8349 return;
8350}
8351/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008352 * FUNCTION: WDA_ProcessEnterUapsdReq
8353 * Request to WDI to Enter UAPSD power state.
8354 */
8355VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
8356 tUapsdParams *pEnterUapsdReqParams)
8357{
8358 WDI_Status status = WDI_STATUS_SUCCESS ;
8359 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
8360 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
8361 sizeof(WDI_EnterUapsdReqParamsType)) ;
8362 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008364 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008365 if(NULL == wdiEnterUapsdReqParams)
8366 {
8367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008368 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008369 VOS_ASSERT(0);
8370 return VOS_STATUS_E_NOMEM;
8371 }
8372 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8373 if(NULL == pWdaParams)
8374 {
8375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008376 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008377 VOS_ASSERT(0);
8378 vos_mem_free(wdiEnterUapsdReqParams);
8379 return VOS_STATUS_E_NOMEM;
8380 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008381 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
8382 pEnterUapsdReqParams->beDeliveryEnabled;
8383 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
8384 pEnterUapsdReqParams->beTriggerEnabled;
8385 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
8386 pEnterUapsdReqParams->bkDeliveryEnabled;
8387 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
8388 pEnterUapsdReqParams->bkTriggerEnabled;
8389 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
8390 pEnterUapsdReqParams->viDeliveryEnabled;
8391 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
8392 pEnterUapsdReqParams->viTriggerEnabled;
8393 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
8394 pEnterUapsdReqParams->voDeliveryEnabled;
8395 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
8396 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07008397 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008398
Yue Ma7f44bbe2013-04-12 11:47:39 -07008399 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
8400 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008401
Jeff Johnson295189b2012-06-20 16:38:30 -07008402 /* Store param pointer as passed in by caller */
8403 /* store Params pass it to WDI */
8404 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
8405 pWdaParams->pWdaContext = pWDA;
8406 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008407 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008408 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008409 if(IS_WDI_STATUS_FAILURE(status))
8410 {
8411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8412 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
8413 vos_mem_free(pWdaParams->wdaMsgParam) ;
8414 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8415 vos_mem_free(pWdaParams) ;
8416 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008417 return CONVERT_WDI2VOS_STATUS(status) ;
8418}
Jeff Johnson295189b2012-06-20 16:38:30 -07008419/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008420 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008421 * send Exit UAPSD RSP back to PE
8422 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008423void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008424{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008425
8426 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8427 tWDA_CbContext *pWDA;
8428 tExitUapsdParams *pExitUapsdRspParams;
8429
Jeff Johnson295189b2012-06-20 16:38:30 -07008430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008431 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008432 if(NULL == pWdaParams)
8433 {
8434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008435 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008436 VOS_ASSERT(0);
8437 return;
8438 }
8439
8440 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8441 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
8442
8443 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008444 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008445
8446 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8447 vos_mem_free(pWdaParams) ;
8448
8449 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008450 return ;
8451}
Jeff Johnson295189b2012-06-20 16:38:30 -07008452/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008453 * FUNCTION: WDA_ExitUapsdReqCallback
8454 * Free memory and send Exit UAPSD RSP back to PE.
8455 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
8456 */
8457void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
8458{
8459 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8460 tWDA_CbContext *pWDA;
8461 tExitUapsdParams *pExitUapsdRspParams;
8462
8463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8464 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8465
8466 if(NULL == pWdaParams)
8467 {
8468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8469 "%s: pWdaParams received NULL", __func__);
8470 VOS_ASSERT(0);
8471 return;
8472 }
8473
8474 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8475 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
8476 pExitUapsdRspParams->status = wdiStatus;
8477
8478 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8479 {
8480 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8481 vos_mem_free(pWdaParams);
8482 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
8483 }
8484
8485 return;
8486}
8487/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008488 * FUNCTION: WDA_ProcessExitUapsdReq
8489 * Request to WDI to Exit UAPSD power state.
8490 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008491VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
8492 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008493{
8494 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008495 tWDA_ReqParams *pWdaParams ;
8496 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
8497 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
8498 sizeof(WDI_ExitUapsdReqParamsType)) ;
8499
Jeff Johnson295189b2012-06-20 16:38:30 -07008500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008501 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008502
8503 if(NULL == wdiExitUapsdReqParams)
8504 {
8505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008506 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008507 VOS_ASSERT(0);
8508 return VOS_STATUS_E_NOMEM;
8509 }
8510 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8511 if(NULL == pWdaParams)
8512 {
8513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008514 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008515 VOS_ASSERT(0);
8516 vos_mem_free(wdiExitUapsdReqParams);
8517 return VOS_STATUS_E_NOMEM;
8518 }
8519
8520 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008521 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
8522 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008523
8524 /* Store param pointer as passed in by caller */
8525 /* store Params pass it to WDI */
8526 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
8527 pWdaParams->pWdaContext = pWDA;
8528 pWdaParams->wdaMsgParam = pExitUapsdParams;
8529
Yue Ma7f44bbe2013-04-12 11:47:39 -07008530 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008531 if(IS_WDI_STATUS_FAILURE(status))
8532 {
8533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8534 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008535 vos_mem_free(pWdaParams->wdaMsgParam) ;
8536 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8537 vos_mem_free(pWdaParams) ;
8538
Jeff Johnson295189b2012-06-20 16:38:30 -07008539 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008540 return CONVERT_WDI2VOS_STATUS(status) ;
8541}
8542
Jeff Johnson295189b2012-06-20 16:38:30 -07008543/*
8544 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
8545 *
8546 */
8547void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
8548{
8549 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008551 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008552 if(NULL == pWdaParams)
8553 {
8554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008555 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008556 VOS_ASSERT(0) ;
8557 return ;
8558 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008559 if( pWdaParams != NULL )
8560 {
8561 if( pWdaParams->wdaWdiApiMsgParam != NULL )
8562 {
8563 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8564 }
8565 if( pWdaParams->wdaMsgParam != NULL )
8566 {
8567 vos_mem_free(pWdaParams->wdaMsgParam) ;
8568 }
8569 vos_mem_free(pWdaParams) ;
8570 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008571 return ;
8572}
Jeff Johnson295189b2012-06-20 16:38:30 -07008573/*
8574 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
8575 * Request to WDI to set the power save params at start.
8576 */
8577VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
8578 tSirPowerSaveCfg *pPowerSaveCfg)
8579{
8580 WDI_Status status = WDI_STATUS_SUCCESS ;
8581 tHalCfg *tlvStruct = NULL ;
8582 tANI_U8 *tlvStructStart = NULL ;
8583 v_PVOID_t *configParam;
8584 tANI_U32 configParamSize;
8585 tANI_U32 *configDataValue;
8586 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
8587 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008589 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008590 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
8591 {
8592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008593 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008594 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008595 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008596 return VOS_STATUS_E_FAILURE;
8597 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008598 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
8599 if (NULL == wdiPowerSaveCfg)
8600 {
8601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008602 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008603 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008604 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008605 return VOS_STATUS_E_NOMEM;
8606 }
8607 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8608 if(NULL == pWdaParams)
8609 {
8610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008611 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008612 VOS_ASSERT(0);
8613 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008614 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008615 return VOS_STATUS_E_NOMEM;
8616 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008617 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
8618 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07008619 if(NULL == configParam)
8620 {
8621 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08008622 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008623 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07008624 vos_mem_free(pWdaParams);
8625 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008626 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008627 return VOS_STATUS_E_NOMEM;
8628 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008629 vos_mem_set(configParam, configParamSize, 0);
8630 wdiPowerSaveCfg->pConfigBuffer = configParam;
8631 tlvStruct = (tHalCfg *)configParam;
8632 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008633 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
8634 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
8635 tlvStruct->length = sizeof(tANI_U32);
8636 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8637 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07008638 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8639 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008640 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
8641 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
8642 tlvStruct->length = sizeof(tANI_U32);
8643 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8644 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07008645 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8646 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008647 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
8648 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
8649 tlvStruct->length = sizeof(tANI_U32);
8650 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8651 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07008652 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8653 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008654 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
8655 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
8656 tlvStruct->length = sizeof(tANI_U32);
8657 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8658 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07008659 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8660 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008661 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
8662 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
8663 tlvStruct->length = sizeof(tANI_U32);
8664 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8665 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07008666 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8667 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008668 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
8669 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
8670 tlvStruct->length = sizeof(tANI_U32);
8671 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8672 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07008673 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8674 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008675 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
8676 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
8677 tlvStruct->length = sizeof(tANI_U32);
8678 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8679 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07008680 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8681 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008682 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
8683 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
8684 tlvStruct->length = sizeof(tANI_U32);
8685 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8686 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
8687 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8688 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008689 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
8690 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
8691 tlvStruct->length = sizeof(tANI_U32);
8692 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8693 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
8694 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8695 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008696 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
8697 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
8698 tlvStruct->length = sizeof(tANI_U32);
8699 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8700 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07008701 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8702 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008703 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
8704 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
8705 tlvStruct->length = sizeof(tANI_U32);
8706 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8707 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07008708 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8709 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008710 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008711 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008712 /* store Params pass it to WDI */
8713 pWdaParams->wdaMsgParam = configParam;
8714 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
8715 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008716 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
8717 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008718 if(IS_WDI_STATUS_FAILURE(status))
8719 {
8720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8721 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
8722 vos_mem_free(pWdaParams->wdaMsgParam);
8723 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8724 vos_mem_free(pWdaParams);
8725 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008726 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008727 return CONVERT_WDI2VOS_STATUS(status);
8728}
Jeff Johnson295189b2012-06-20 16:38:30 -07008729/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008730 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008731 *
8732 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008733void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008734{
Yue Ma7f44bbe2013-04-12 11:47:39 -07008735 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8736
Jeff Johnson295189b2012-06-20 16:38:30 -07008737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008738 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008739
8740 if(NULL == pWdaParams)
8741 {
8742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8743 "%s: pWdaParams received NULL", __func__);
8744 VOS_ASSERT(0);
8745 return ;
8746 }
8747
8748 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07008749 vos_mem_free(pWdaParams);
8750
Jeff Johnson295189b2012-06-20 16:38:30 -07008751 return ;
8752}
Jeff Johnson295189b2012-06-20 16:38:30 -07008753/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008754 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
8755 * Free memory.
8756 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
8757 */
8758void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
8759{
8760 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8761
8762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8763 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8764
8765 if(NULL == pWdaParams)
8766 {
8767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8768 "%s: pWdaParams received NULL", __func__);
8769 VOS_ASSERT(0);
8770 return;
8771 }
8772
8773 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8774 {
8775 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8776 vos_mem_free(pWdaParams);
8777 }
8778
8779 return;
8780}
8781/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008782 * FUNCTION: WDA_SetUapsdAcParamsReq
8783 * Request to WDI to set the UAPSD params for an ac (sta mode).
8784 */
8785VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
8786 tUapsdInfo *pUapsdInfo)
8787{
8788 WDI_Status status = WDI_STATUS_SUCCESS;
8789 tWDA_CbContext *pWDA = NULL ;
8790 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
8791 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
8792 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
8793 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008795 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008796 if(NULL == wdiUapsdParams)
8797 {
8798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008799 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008800 VOS_ASSERT(0);
8801 return VOS_STATUS_E_NOMEM;
8802 }
8803 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8804 if(NULL == pWdaParams)
8805 {
8806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008807 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008808 VOS_ASSERT(0);
8809 vos_mem_free(wdiUapsdParams);
8810 return VOS_STATUS_E_NOMEM;
8811 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008812 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
8813 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
8814 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
8815 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
8816 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
8817 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008818 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
8819 wdiUapsdParams->pUserData = pWdaParams;
8820
Jeff Johnson295189b2012-06-20 16:38:30 -07008821 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07008822 pWdaParams->pWdaContext = pWDA;
8823 /* Store param pointer as passed in by caller */
8824 pWdaParams->wdaMsgParam = pUapsdInfo;
8825 /* store Params pass it to WDI */
8826 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008827 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008828 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07008829 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008830 if(IS_WDI_STATUS_FAILURE(status))
8831 {
8832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8833 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
8834 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8835 vos_mem_free(pWdaParams);
8836 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008837 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
8838 return VOS_STATUS_SUCCESS;
8839 else
8840 return VOS_STATUS_E_FAILURE;
8841
Jeff Johnson295189b2012-06-20 16:38:30 -07008842}
8843/*
8844 * FUNCTION: WDA_ClearUapsdAcParamsReq
8845 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
8846 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
8847 * and again enter the UPASD with the modified params. Hence the disable
8848 * function was kept empty.
8849 *
8850 */
8851VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
8852{
8853 /* do nothing */
8854 return VOS_STATUS_SUCCESS;
8855}
Jeff Johnson295189b2012-06-20 16:38:30 -07008856/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008857 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008858 *
8859 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008860void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008861{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008862 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8863
Jeff Johnson295189b2012-06-20 16:38:30 -07008864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008865 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008866
8867 if(NULL == pWdaParams)
8868 {
8869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008870 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008871 VOS_ASSERT(0) ;
8872 return ;
8873 }
8874
8875 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8876 vos_mem_free(pWdaParams->wdaMsgParam);
8877 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008878
Jeff Johnson295189b2012-06-20 16:38:30 -07008879 //print a msg, nothing else to do
8880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008881 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008882 return ;
8883}
Jeff Johnson295189b2012-06-20 16:38:30 -07008884/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008885 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
8886 * Free memory.
8887 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
8888 */
8889void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
8890{
8891 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8892
8893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8894 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8895
8896 if(NULL == pWdaParams)
8897 {
8898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8899 "%s: pWdaParams received NULL", __func__);
8900 VOS_ASSERT(0);
8901 return;
8902 }
8903
8904 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8905 {
8906 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8907 vos_mem_free(pWdaParams->wdaMsgParam);
8908 vos_mem_free(pWdaParams);
8909 }
8910
8911 return;
8912}
8913/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008914 * FUNCTION: WDA_UpdateUapsdParamsReq
8915 * Request to WDI to update UAPSD params (in softAP mode) for a station.
8916 */
8917VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
8918 tUpdateUapsdParams* pUpdateUapsdInfo)
8919{
8920 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008921 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008922 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
8923 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
8924 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008925 tWDA_ReqParams *pWdaParams = NULL;
8926
Jeff Johnson295189b2012-06-20 16:38:30 -07008927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008928 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008929 if(NULL == wdiUpdateUapsdParams)
8930 {
8931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008932 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008933 VOS_ASSERT(0);
8934 return VOS_STATUS_E_NOMEM;
8935 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008936 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
8937 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
8938 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008939 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
8940 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008941
8942 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8943 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008944 {
8945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008946 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008947 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008948 vos_mem_free(pUpdateUapsdInfo);
8949 vos_mem_free(wdiUpdateUapsdParams);
8950 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07008951 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008952 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008953 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07008954 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008955 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
8956 pWdaParams->pWdaContext = pWDA;
8957
Jeff Johnson43971f52012-07-17 12:26:56 -07008958 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008959 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008960 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008961
Jeff Johnson43971f52012-07-17 12:26:56 -07008962 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008963 {
8964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8965 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008966 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
8967 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8968 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008969 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008970 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008971 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008972}
Jeff Johnson295189b2012-06-20 16:38:30 -07008973/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008974 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008975 *
8976 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008977void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008978{
8979 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008981 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008982 if(WDI_STATUS_SUCCESS != wdiStatus)
8983 {
8984 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08008985 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008986 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008987 if(NULL == pWdaParams)
8988 {
8989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008990 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008991 VOS_ASSERT(0) ;
8992 return ;
8993 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008994 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8995 vos_mem_free(pWdaParams->wdaMsgParam);
8996 vos_mem_free(pWdaParams);
8997 return ;
8998}
Jeff Johnson295189b2012-06-20 16:38:30 -07008999/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009000 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
9001 * Free memory.
9002 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
9003 */
9004void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9005{
9006 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9007
9008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9009 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9010
9011 if(NULL == pWdaParams)
9012 {
9013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9014 "%s: pWdaParams received NULL", __func__);
9015 VOS_ASSERT(0);
9016 return;
9017 }
9018
9019 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9020 {
9021 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9022 vos_mem_free(pWdaParams->wdaMsgParam);
9023 vos_mem_free(pWdaParams);
9024 }
9025
9026 return;
9027}
9028/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009029 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
9030 *
9031 */
9032VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
9033 tSirWlanSetRxpFilters *pWlanSuspendParam)
9034{
Jeff Johnson295189b2012-06-20 16:38:30 -07009035 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009036 WDI_Status wstatus;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +05309037 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009038 tWDA_ReqParams *pWdaParams ;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +05309039 /* Sanity Check
9040 * This is very unlikely and add assert to collect more info next time */
9041 if(NULL == pWlanSuspendParam)
9042 {
9043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9044 "%s: pWlanSuspendParam received NULL", __func__);
9045 VOS_ASSERT(0) ;
9046 return VOS_STATUS_E_FAULT;
9047 }
9048 wdiRxpFilterParams = (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
9049 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009051 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009052 if(NULL == wdiRxpFilterParams)
9053 {
9054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009055 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009056 VOS_ASSERT(0);
9057 vos_mem_free(pWlanSuspendParam);
9058 return VOS_STATUS_E_NOMEM;
9059 }
9060 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9061 if(NULL == pWdaParams)
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 vos_mem_free(wdiRxpFilterParams);
9067 vos_mem_free(pWlanSuspendParam);
9068 return VOS_STATUS_E_NOMEM;
9069 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009070 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
9071 pWlanSuspendParam->setMcstBcstFilter;
9072 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
9073 pWlanSuspendParam->configuredMcstBcstFilterSetting;
9074
Yue Ma7f44bbe2013-04-12 11:47:39 -07009075 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
9076 wdiRxpFilterParams->pUserData = pWdaParams;
9077
Jeff Johnson295189b2012-06-20 16:38:30 -07009078 pWdaParams->pWdaContext = pWDA;
9079 pWdaParams->wdaMsgParam = pWlanSuspendParam;
9080 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009081 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009082 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07009083 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009084 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009085 {
9086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9087 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009088 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009089 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9090 vos_mem_free(pWdaParams->wdaMsgParam);
9091 vos_mem_free(pWdaParams);
9092 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009093 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009094}
Jeff Johnson295189b2012-06-20 16:38:30 -07009095/*
9096 * FUNCTION: WDA_WdiIndicationCallback
9097 *
9098 */
9099void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
9100 void* pUserData)
9101{
9102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009103 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009104}
Jeff Johnson295189b2012-06-20 16:38:30 -07009105/*
9106 * FUNCTION: WDA_ProcessWlanSuspendInd
9107 *
9108 */
9109VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
9110 tSirWlanSuspendParam *pWlanSuspendParam)
9111{
9112 WDI_Status wdiStatus;
9113 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009115 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009116 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
9117 pWlanSuspendParam->configuredMcstBcstFilterSetting;
9118 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
9119 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07009121 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
9122 if(WDI_STATUS_PENDING == wdiStatus)
9123 {
9124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009125 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009126 }
9127 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
9128 {
9129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009130 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009131 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009132 vos_mem_free(pWlanSuspendParam);
9133 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9134}
9135
Chet Lanctot186b5732013-03-18 10:26:30 -07009136#ifdef WLAN_FEATURE_11W
9137/*
9138 * FUNCTION: WDA_ProcessExcludeUnecryptInd
9139 *
9140 */
9141VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
9142 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
9143{
9144 WDI_Status wdiStatus;
9145 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
9146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9147 "------> %s ", __func__);
9148
9149 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
9150 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
9151 sizeof(tSirMacAddr));
9152
9153 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
9154 wdiExclUnencryptParams.pUserData = pWDA;
9155
9156 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
9157 if(WDI_STATUS_PENDING == wdiStatus)
9158 {
9159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9160 "Pending received for %s:%d ", __func__, __LINE__ );
9161 }
9162 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
9163 {
9164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9165 "Failure in %s:%d ", __func__, __LINE__ );
9166 }
9167 vos_mem_free(pExclUnencryptParam);
9168 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9169}
9170#endif
9171
Jeff Johnson295189b2012-06-20 16:38:30 -07009172/*
9173 * FUNCTION: WDA_ProcessWlanResumeCallback
9174 *
9175 */
9176void WDA_ProcessWlanResumeCallback(
9177 WDI_SuspendResumeRspParamsType *resumeRspParams,
9178 void* pUserData)
9179{
9180 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009182 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009183 if(NULL == pWdaParams)
9184 {
9185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009186 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009187 VOS_ASSERT(0) ;
9188 return ;
9189 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009190 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
9191 {
9192 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08009193 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07009194 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009195 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9196 vos_mem_free(pWdaParams->wdaMsgParam);
9197 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009198 return ;
9199}
Jeff Johnson295189b2012-06-20 16:38:30 -07009200/*
9201 * FUNCTION: WDA_ProcessWlanResumeReq
9202 *
9203 */
9204VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
9205 tSirWlanResumeParam *pWlanResumeParam)
9206{
9207 WDI_Status wdiStatus;
9208 WDI_ResumeParamsType *wdiResumeParams =
9209 (WDI_ResumeParamsType *)vos_mem_malloc(
9210 sizeof(WDI_ResumeParamsType) ) ;
9211 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009213 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009214 if(NULL == wdiResumeParams)
9215 {
9216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009217 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009218 VOS_ASSERT(0);
9219 return VOS_STATUS_E_NOMEM;
9220 }
9221 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9222 if(NULL == pWdaParams)
9223 {
9224 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009225 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009226 VOS_ASSERT(0);
9227 vos_mem_free(wdiResumeParams);
9228 return VOS_STATUS_E_NOMEM;
9229 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009230 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
9231 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07009233 wdiResumeParams->wdiReqStatusCB = NULL;
9234 pWdaParams->wdaMsgParam = pWlanResumeParam;
9235 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
9236 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07009237 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
9238 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
9239 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009240 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9241 {
9242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9243 "Failure in Host Resume REQ WDI API, free all the memory " );
9244 VOS_ASSERT(0);
9245 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9246 vos_mem_free(pWdaParams->wdaMsgParam);
9247 vos_mem_free(pWdaParams);
9248 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009249 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
9250}
9251
Jeff Johnson295189b2012-06-20 16:38:30 -07009252/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009253 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009254 *
9255 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009256void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009257{
9258 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009260 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009261 if(NULL == pWdaParams)
9262 {
9263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009264 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009265 VOS_ASSERT(0) ;
9266 return ;
9267 }
9268
9269 vos_mem_free(pWdaParams->wdaMsgParam) ;
9270 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9271 vos_mem_free(pWdaParams) ;
9272 /*
9273 * No respone required for SetBeaconFilter req so just free the request
9274 * param here
9275 */
9276
Jeff Johnson295189b2012-06-20 16:38:30 -07009277 return ;
9278}
Jeff Johnson295189b2012-06-20 16:38:30 -07009279/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009280 * FUNCTION: WDA_SetBeaconFilterReqCallback
9281 * Free memory.
9282 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
9283 */
9284void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9285{
9286 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9287
9288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9289 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9290
9291 if(NULL == pWdaParams)
9292 {
9293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9294 "%s: pWdaParams received NULL", __func__);
9295 VOS_ASSERT(0);
9296 return;
9297 }
9298
9299 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9300 {
9301 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9302 vos_mem_free(pWdaParams->wdaMsgParam);
9303 vos_mem_free(pWdaParams);
9304 }
9305
9306 return;
9307}
9308/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009309 * FUNCTION: WDA_SetBeaconFilterReq
9310 * Request to WDI to send the beacon filtering related information.
9311 */
9312VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
9313 tBeaconFilterMsg* pBeaconFilterInfo)
9314{
9315 WDI_Status status = WDI_STATUS_SUCCESS;
9316 tANI_U8 *dstPtr, *srcPtr;
9317 tANI_U8 filterLength;
9318 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
9319 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
9320 sizeof(WDI_BeaconFilterReqParamsType) ) ;
9321 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009323 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009324 if(NULL == wdiBeaconFilterInfo)
9325 {
9326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009327 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009328 VOS_ASSERT(0);
9329 return VOS_STATUS_E_NOMEM;
9330 }
9331 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9332 if(NULL == pWdaParams)
9333 {
9334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009335 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009336 VOS_ASSERT(0);
9337 vos_mem_free(wdiBeaconFilterInfo);
9338 return VOS_STATUS_E_NOMEM;
9339 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009340 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
9341 pBeaconFilterInfo->beaconInterval;
9342 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
9343 pBeaconFilterInfo->capabilityInfo;
9344 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
9345 pBeaconFilterInfo->capabilityMask;
9346 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07009347
9348 //Fill the BssIdx
9349 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
9350
Jeff Johnson295189b2012-06-20 16:38:30 -07009351 //Fill structure with info contained in the beaconFilterTable
9352 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
9353 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
9354 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
9355 if(WDI_BEACON_FILTER_LEN < filterLength)
9356 {
9357 filterLength = WDI_BEACON_FILTER_LEN;
9358 }
9359 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009360 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
9361 wdiBeaconFilterInfo->pUserData = pWdaParams;
9362
Jeff Johnson295189b2012-06-20 16:38:30 -07009363 /* Store param pointer as passed in by caller */
9364 /* store Params pass it to WDI */
9365 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
9366 pWdaParams->pWdaContext = pWDA;
9367 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
9368
Jeff Johnson295189b2012-06-20 16:38:30 -07009369 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009370 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009371 if(IS_WDI_STATUS_FAILURE(status))
9372 {
9373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9374 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
9375 vos_mem_free(pWdaParams->wdaMsgParam) ;
9376 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9377 vos_mem_free(pWdaParams) ;
9378 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009379 return CONVERT_WDI2VOS_STATUS(status) ;
9380}
Jeff Johnson295189b2012-06-20 16:38:30 -07009381/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009382 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009383 *
9384 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009385void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009386{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009387 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9388
Jeff Johnson295189b2012-06-20 16:38:30 -07009389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009390 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009391
9392 if(NULL == pWdaParams)
9393 {
9394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009395 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009396 VOS_ASSERT(0) ;
9397 return ;
9398 }
9399
9400 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9401 vos_mem_free(pWdaParams->wdaMsgParam);
9402 vos_mem_free(pWdaParams);
9403
Jeff Johnson295189b2012-06-20 16:38:30 -07009404 //print a msg, nothing else to do
9405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009406 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009407 return ;
9408}
Yue Ma7f44bbe2013-04-12 11:47:39 -07009409/*
9410 * FUNCTION: WDA_RemBeaconFilterReqCallback
9411 * Free memory.
9412 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
9413 */
9414void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9415{
9416 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9417
9418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9419 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9420
9421 if(NULL == pWdaParams)
9422 {
9423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9424 "%s: pWdaParams received NULL", __func__);
9425 VOS_ASSERT(0);
9426 return;
9427 }
9428
9429 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9430 {
9431 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9432 vos_mem_free(pWdaParams->wdaMsgParam);
9433 vos_mem_free(pWdaParams);
9434 }
9435
9436 return;
9437}
Jeff Johnson295189b2012-06-20 16:38:30 -07009438 // TODO: PE does not have this feature for now implemented,
9439 // but the support for removing beacon filter exists between
9440 // HAL and FW. This function can be called whenever PE defines
9441 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07009442/*
9443 * FUNCTION: WDA_RemBeaconFilterReq
9444 * Request to WDI to send the removal of beacon filtering related information.
9445 */
9446VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
9447 tRemBeaconFilterMsg* pBeaconFilterInfo)
9448{
9449 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009450 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009451 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
9452 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
9453 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009454 tWDA_ReqParams *pWdaParams ;
9455
Jeff Johnson295189b2012-06-20 16:38:30 -07009456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009457 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009458 if(NULL == wdiBeaconFilterInfo)
9459 {
9460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009461 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009462 VOS_ASSERT(0);
9463 return VOS_STATUS_E_NOMEM;
9464 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009465 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9466 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009467 {
9468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009469 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009470 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009471 vos_mem_free(wdiBeaconFilterInfo);
9472 vos_mem_free(pBeaconFilterInfo);
9473 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07009474 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009475
9476 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
9477 pBeaconFilterInfo->ucIeCount;
9478 //Fill structure with info contained in the ucRemIeId
9479 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
9480 pBeaconFilterInfo->ucRemIeId,
9481 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
9482 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
9483 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009484
9485 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009486 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07009487 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009488 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
9489
9490 pWdaParams->pWdaContext = pWDA;
9491
Jeff Johnson43971f52012-07-17 12:26:56 -07009492 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009493 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009494 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009495 {
9496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9497 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009498 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009499 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9500 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009501 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009502 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009503 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009504}
Jeff Johnson295189b2012-06-20 16:38:30 -07009505/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009506 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009507 *
9508 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009509void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009510{
9511 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009513 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009514 if(NULL == pWdaParams)
9515 {
9516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009517 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009518 VOS_ASSERT(0) ;
9519 return ;
9520 }
9521
9522 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9523 vos_mem_free(pWdaParams) ;
9524
Jeff Johnson295189b2012-06-20 16:38:30 -07009525 return ;
9526}
Jeff Johnson295189b2012-06-20 16:38:30 -07009527/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009528 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
9529 * Free memory.
9530 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
9531 */
9532void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
9533{
9534 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9535
9536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9537 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9538
9539 if(NULL == pWdaParams)
9540 {
9541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9542 "%s: pWdaParams received NULL", __func__);
9543 VOS_ASSERT(0);
9544 return;
9545 }
9546
9547 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9548 {
9549 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9550 vos_mem_free(pWdaParams);
9551 }
9552
9553 return;
9554}
9555/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009556 * FUNCTION: WDA_SetRSSIThresholdsReq
9557 * Request to WDI to set the RSSI thresholds (sta mode).
9558 */
9559VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
9560{
9561 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009562 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009563 tWDA_CbContext *pWDA = NULL ;
9564 v_PVOID_t pVosContext = NULL;
9565 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
9566 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
9567 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
9568 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009570 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009571 if(NULL == wdiRSSIThresholdsInfo)
9572 {
9573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009574 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009575 VOS_ASSERT(0);
9576 return VOS_STATUS_E_NOMEM;
9577 }
9578 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9579 if(NULL == pWdaParams)
9580 {
9581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009582 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009583 VOS_ASSERT(0);
9584 vos_mem_free(wdiRSSIThresholdsInfo);
9585 return VOS_STATUS_E_NOMEM;
9586 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009587 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07009588 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
9589 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
9590 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07009591 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
9592 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
9593 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07009594 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
9595 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
9596 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009597 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
9598 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009599 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
9600 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
9601
Jeff Johnson295189b2012-06-20 16:38:30 -07009602 /* Store param pointer as passed in by caller */
9603 /* store Params pass it to WDI */
9604 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
9605 pWdaParams->pWdaContext = pWDA;
9606 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07009607 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009608 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009609 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009610 {
9611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9612 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009613 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009614 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9615 vos_mem_free(pWdaParams) ;
9616 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009617 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009618
9619}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009620/*
Yue Madb90ac12013-04-04 13:39:13 -07009621 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009622 *
9623 */
Yue Madb90ac12013-04-04 13:39:13 -07009624void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009625{
9626 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9627
9628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009629 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009630 if(NULL == pWdaParams)
9631 {
9632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009633 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009634 VOS_ASSERT(0) ;
9635 return ;
9636 }
9637
9638 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9639 vos_mem_free(pWdaParams->wdaMsgParam);
9640 vos_mem_free(pWdaParams) ;
9641
9642 //print a msg, nothing else to do
9643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -07009644 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009645 return ;
9646}
Jeff Johnson295189b2012-06-20 16:38:30 -07009647/*
Yue Madb90ac12013-04-04 13:39:13 -07009648 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -07009649 * Free memory.
9650 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -07009651 */
9652void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
9653{
9654 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9655
9656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9657 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9658
9659 if(NULL == pWdaParams)
9660 {
9661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9662 "%s: Invalid pWdaParams pointer", __func__);
9663 VOS_ASSERT(0);
9664 return;
9665 }
9666
9667 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9668 {
9669 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9670 vos_mem_free(pWdaParams->wdaMsgParam);
9671 vos_mem_free(pWdaParams);
9672 }
9673
9674 return;
9675}
9676/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009677 * FUNCTION: WDA_ProcessHostOffloadReq
9678 * Request to WDI to set the filter to minimize unnecessary host wakeup due
9679 * to broadcast traffic (sta mode).
9680 */
9681VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
9682 tSirHostOffloadReq *pHostOffloadParams)
9683{
9684 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009685 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009686 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
9687 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
9688 sizeof(WDI_HostOffloadReqParamsType)) ;
9689 tWDA_ReqParams *pWdaParams ;
9690
9691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009692 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07009693
9694 if(NULL == wdiHostOffloadInfo)
9695 {
9696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009697 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009698 VOS_ASSERT(0);
9699 return VOS_STATUS_E_NOMEM;
9700 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009701 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9702 if(NULL == pWdaParams)
9703 {
9704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009705 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009706 VOS_ASSERT(0);
9707 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009708 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009709 return VOS_STATUS_E_NOMEM;
9710 }
9711
9712 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
9713 pHostOffloadParams->offloadType;
9714 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
9715 pHostOffloadParams->enableOrDisable;
9716
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009717 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
9718 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
9719
Jeff Johnson295189b2012-06-20 16:38:30 -07009720 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
9721 {
9722 case SIR_IPV4_ARP_REPLY_OFFLOAD:
9723 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
9724 pHostOffloadParams->params.hostIpv4Addr,
9725 4);
9726 break;
9727 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
9728 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
9729 pHostOffloadParams->params.hostIpv6Addr,
9730 16);
9731 break;
9732 case SIR_IPV6_NS_OFFLOAD:
9733 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
9734 pHostOffloadParams->params.hostIpv6Addr,
9735 16);
9736
9737#ifdef WLAN_NS_OFFLOAD
9738 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
9739 {
9740 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
9741 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
9742 16);
9743 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
9744 }
9745 else
9746 {
9747 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
9748 }
9749
9750 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
9751 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
9752 16);
9753 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
9754 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
9755 6);
9756
9757 //Only two are supported so let's go through them without a loop
9758 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
9759 {
9760 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
9761 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
9762 16);
9763 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
9764 }
9765 else
9766 {
9767 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
9768 }
9769
9770 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
9771 {
9772 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
9773 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
9774 16);
9775 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
9776 }
9777 else
9778 {
9779 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
9780 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +05309781 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
9782 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07009783 break;
9784#endif //WLAN_NS_OFFLOAD
9785 default:
9786 {
9787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9788 "No Handling for Offload Type %x in WDA "
9789 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
9790 //WDA_VOS_ASSERT(0) ;
9791 }
9792 }
Yue Madb90ac12013-04-04 13:39:13 -07009793 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
9794 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009795
Jeff Johnson295189b2012-06-20 16:38:30 -07009796 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009797 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009798 /* store Params pass it to WDI */
9799 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
9800 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009801
Jeff Johnson295189b2012-06-20 16:38:30 -07009802
Jeff Johnson43971f52012-07-17 12:26:56 -07009803 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -07009804 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009805
Jeff Johnson43971f52012-07-17 12:26:56 -07009806 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009807 {
9808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9809 "Failure in host offload REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009810 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009811 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9812 vos_mem_free(pWdaParams->wdaMsgParam);
9813 vos_mem_free(pWdaParams) ;
9814 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009815 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009816
9817}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009818/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009819 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009820 *
9821 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009822void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009823{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009824 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9825
Jeff Johnson295189b2012-06-20 16:38:30 -07009826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009827 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009828
9829 if(NULL == pWdaParams)
9830 {
9831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009832 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009833 VOS_ASSERT(0) ;
9834 return ;
9835 }
9836
9837 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9838 vos_mem_free(pWdaParams->wdaMsgParam);
9839 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009840
Jeff Johnson295189b2012-06-20 16:38:30 -07009841 //print a msg, nothing else to do
9842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009843 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009844 return ;
9845}
Jeff Johnson295189b2012-06-20 16:38:30 -07009846/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009847 * FUNCTION: WDA_KeepAliveReqCallback
9848 * Free memory.
9849 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
9850 */
9851void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
9852{
9853 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9854
9855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9856 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9857
9858 if(NULL == pWdaParams)
9859 {
9860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9861 "%s: pWdaParams received NULL", __func__);
9862 VOS_ASSERT(0);
9863 return;
9864 }
9865
9866 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9867 {
9868 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9869 vos_mem_free(pWdaParams->wdaMsgParam);
9870 vos_mem_free(pWdaParams);
9871 }
9872
9873 return;
9874}
9875/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009876 * FUNCTION: WDA_ProcessKeepAliveReq
9877 * Request to WDI to send Keep Alive packets to minimize unnecessary host
9878 * wakeup due to broadcast traffic (sta mode).
9879 */
9880VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
9881 tSirKeepAliveReq *pKeepAliveParams)
9882{
9883 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009884 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009885 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
9886 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
9887 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009888 tWDA_ReqParams *pWdaParams;
9889
Jeff Johnson295189b2012-06-20 16:38:30 -07009890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009891 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009892 if(NULL == wdiKeepAliveInfo)
9893 {
9894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009895 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009896 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009897 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009898 return VOS_STATUS_E_NOMEM;
9899 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009900
9901 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9902 if(NULL == pWdaParams)
9903 {
9904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009905 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009906 VOS_ASSERT(0);
9907 vos_mem_free(wdiKeepAliveInfo);
9908 vos_mem_free(pKeepAliveParams);
9909 return VOS_STATUS_E_NOMEM;
9910 }
9911
Jeff Johnson295189b2012-06-20 16:38:30 -07009912 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
9913 pKeepAliveParams->packetType;
9914 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
9915 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009916
9917 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
9918 pKeepAliveParams->bssId,
9919 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07009920
9921 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
9922 {
9923 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
9924 pKeepAliveParams->hostIpv4Addr,
9925 SIR_IPV4_ADDR_LEN);
9926 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
9927 pKeepAliveParams->destIpv4Addr,
9928 SIR_IPV4_ADDR_LEN);
9929 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
9930 pKeepAliveParams->destMacAddr,
9931 SIR_MAC_ADDR_LEN);
9932 }
9933 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
9934 {
9935 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
9936 SIR_IPV4_ADDR_LEN,
9937 0);
9938 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
9939 SIR_IPV4_ADDR_LEN,
9940 0);
9941 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
9942 SIR_MAC_ADDR_LEN,
9943 0);
9944 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009945 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
9946 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009947
Jeff Johnson295189b2012-06-20 16:38:30 -07009948 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009949 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009950 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009951 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
9952 pWdaParams->pWdaContext = pWDA;
9953
Jeff Johnson295189b2012-06-20 16:38:30 -07009954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
9955 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
9956 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
9957 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
9958 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
9959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
9960 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
9961 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
9962 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
9963 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
9964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9965 "WDA DMAC : %d:%d:%d:%d:%d:%d",
9966 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
9967 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
9968 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
9969 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
9970 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
9971 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
9972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9973 "TimePeriod %d PacketType %d",
9974 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
9975 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -07009976 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009977 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009978
Jeff Johnson43971f52012-07-17 12:26:56 -07009979 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009980 {
9981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9982 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009983 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009984 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9985 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009986 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009987 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009988 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009989
9990}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009991/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009992 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009993 *
9994 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009995void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009996 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
9997 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009998{
9999 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010001 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010002 if(NULL == pWdaParams)
10003 {
10004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010005 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010006 VOS_ASSERT(0) ;
10007 return ;
10008 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010009 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10010 vos_mem_free(pWdaParams->wdaMsgParam);
10011 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010012 return ;
10013}
Jeff Johnson295189b2012-06-20 16:38:30 -070010014/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010015 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
10016 * Free memory.
10017 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
10018 */
10019void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
10020{
10021 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10022
10023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10024 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10025
10026 if(NULL == pWdaParams)
10027 {
10028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10029 "%s: pWdaParams received NULL", __func__);
10030 VOS_ASSERT(0);
10031 return;
10032 }
10033
10034 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10035 {
10036 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10037 vos_mem_free(pWdaParams->wdaMsgParam);
10038 vos_mem_free(pWdaParams);
10039 }
10040
10041 return;
10042}
10043
10044/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010045 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
10046 * Request to WDI to add WOWL Bcast pattern
10047 */
10048VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
10049 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
10050{
10051 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010052 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010053 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
10054 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
10055 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
10056 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010058 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010059 if(NULL == wdiWowlAddBcPtrnInfo)
10060 {
10061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010062 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010063 VOS_ASSERT(0);
10064 return VOS_STATUS_E_NOMEM;
10065 }
10066 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10067 if(NULL == pWdaParams)
10068 {
10069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010070 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010071 VOS_ASSERT(0);
10072 vos_mem_free(wdiWowlAddBcPtrnInfo);
10073 return VOS_STATUS_E_NOMEM;
10074 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010075 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
10076 pWowlAddBcPtrnParams->ucPatternId;
10077 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
10078 pWowlAddBcPtrnParams->ucPatternByteOffset;
10079 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
10080 pWowlAddBcPtrnParams->ucPatternMaskSize;
10081 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
10082 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -070010083 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
10084 {
10085 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
10086 pWowlAddBcPtrnParams->ucPattern,
10087 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
10088 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
10089 pWowlAddBcPtrnParams->ucPatternMask,
10090 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
10091 }
10092 else
10093 {
10094 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
10095 pWowlAddBcPtrnParams->ucPattern,
10096 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10097 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
10098 pWowlAddBcPtrnParams->ucPatternMask,
10099 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10100
10101 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
10102 pWowlAddBcPtrnParams->ucPatternExt,
10103 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10104 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
10105 pWowlAddBcPtrnParams->ucPatternMaskExt,
10106 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10107 }
10108
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010109 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
10110 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
10111
Yue Ma7f44bbe2013-04-12 11:47:39 -070010112 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
10113 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010114 /* Store param pointer as passed in by caller */
10115 /* store Params pass it to WDI */
10116 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
10117 pWdaParams->pWdaContext = pWDA;
10118 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010119 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010120 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010121 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010122 {
10123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10124 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010125 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010126 vos_mem_free(pWdaParams->wdaMsgParam) ;
10127 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10128 vos_mem_free(pWdaParams) ;
10129 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010130 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010131
10132}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010133/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010134 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010135 *
10136 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010137void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010138 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
10139 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010140{
10141 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010143 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010144 if(NULL == pWdaParams)
10145 {
10146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010147 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010148 VOS_ASSERT(0) ;
10149 return ;
10150 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010151 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10152 vos_mem_free(pWdaParams->wdaMsgParam);
10153 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010154 return ;
10155}
Jeff Johnson295189b2012-06-20 16:38:30 -070010156/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010157 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
10158 * Free memory.
10159 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
10160 */
10161void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
10162{
10163 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10164
10165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10166 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10167
10168 if(NULL == pWdaParams)
10169 {
10170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10171 "%s: pWdaParams received NULL", __func__);
10172 VOS_ASSERT(0);
10173 return;
10174 }
10175
10176 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10177 {
10178 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10179 vos_mem_free(pWdaParams->wdaMsgParam);
10180 vos_mem_free(pWdaParams);
10181 }
10182
10183 return;
10184}
10185/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010186 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
10187 * Request to WDI to delete WOWL Bcast pattern
10188 */
10189VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
10190 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
10191{
10192 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010193 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010194 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
10195 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
10196 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
10197 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010199 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010200 if(NULL == wdiWowlDelBcPtrnInfo)
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 return VOS_STATUS_E_NOMEM;
10206 }
10207 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10208 if(NULL == pWdaParams)
10209 {
10210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010211 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010212 VOS_ASSERT(0);
10213 vos_mem_free(wdiWowlDelBcPtrnInfo);
10214 return VOS_STATUS_E_NOMEM;
10215 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010216 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
10217 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010218
10219 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
10220 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
10221
Yue Ma7f44bbe2013-04-12 11:47:39 -070010222 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
10223 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010224 /* Store param pointer as passed in by caller */
10225 /* store Params pass it to WDI */
10226 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
10227 pWdaParams->pWdaContext = pWDA;
10228 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010229 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010230 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010231 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010232 {
10233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10234 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010235 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010236 vos_mem_free(pWdaParams->wdaMsgParam) ;
10237 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10238 vos_mem_free(pWdaParams) ;
10239 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010240 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010241
10242}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010243/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010244 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010245 *
10246 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010247void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010248{
10249 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10250 tWDA_CbContext *pWDA;
10251 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010253 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010254 if(NULL == pWdaParams)
10255 {
10256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010257 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010258 VOS_ASSERT(0) ;
10259 return ;
10260 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010261 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
10262 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
10263
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010264 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
10265
Jeff Johnson295189b2012-06-20 16:38:30 -070010266 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10267 vos_mem_free(pWdaParams) ;
10268
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010269 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010270 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -070010271 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010272 return ;
10273}
Jeff Johnson295189b2012-06-20 16:38:30 -070010274/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010275 * FUNCTION: WDA_WowlEnterReqCallback
10276 * Free memory and send WOWL Enter RSP back to PE.
10277 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
10278 */
10279void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
10280{
10281 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10282 tWDA_CbContext *pWDA;
10283 tSirHalWowlEnterParams *pWowlEnterParams;
10284
10285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10286 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10287
10288 if(NULL == pWdaParams)
10289 {
10290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10291 "%s: pWdaParams received NULL", __func__);
10292 VOS_ASSERT(0);
10293 return;
10294 }
10295
10296 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10297 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
10298 pWowlEnterParams->status = wdiStatus;
10299
10300 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10301 {
10302 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10303 vos_mem_free(pWdaParams);
10304 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
10305 }
10306
10307 return;
10308}
10309/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010310 * FUNCTION: WDA_ProcessWowlEnterReq
10311 * Request to WDI to enter WOWL
10312 */
10313VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
10314 tSirHalWowlEnterParams *pWowlEnterParams)
10315{
10316 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010317 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010318 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
10319 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
10320 sizeof(WDI_WowlEnterReqParamsType)) ;
10321 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010323 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010324 if(NULL == wdiWowlEnterInfo)
10325 {
10326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010327 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010328 VOS_ASSERT(0);
10329 return VOS_STATUS_E_NOMEM;
10330 }
10331 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10332 if(NULL == pWdaParams)
10333 {
10334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010335 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010336 VOS_ASSERT(0);
10337 vos_mem_free(wdiWowlEnterInfo);
10338 return VOS_STATUS_E_NOMEM;
10339 }
Kumar Anandaca924e2013-07-22 14:35:34 -070010340
10341 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
10342
Jeff Johnson295189b2012-06-20 16:38:30 -070010343 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
10344 pWowlEnterParams->magicPtrn,
10345 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010346 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
10347 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010348 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
10349 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010350 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
10351 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010352 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
10353 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010354 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
10355 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010356 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
10357 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010358 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
10359 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -070010360 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
10361 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -070010362#ifdef WLAN_WAKEUP_EVENTS
10363 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
10364 pWowlEnterParams->ucWoWEAPIDRequestEnable;
10365
10366 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
10367 pWowlEnterParams->ucWoWEAPOL4WayEnable;
10368
10369 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
10370 pWowlEnterParams->ucWowNetScanOffloadMatch;
10371
10372 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
10373 pWowlEnterParams->ucWowGTKRekeyError;
10374
10375 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
10376 pWowlEnterParams->ucWoWBSSConnLoss;
10377#endif // WLAN_WAKEUP_EVENTS
10378
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010379 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
10380 pWowlEnterParams->bssIdx;
10381
Yue Ma7f44bbe2013-04-12 11:47:39 -070010382 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
10383 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010384 /* Store param pointer as passed in by caller */
10385 /* store Params pass it to WDI */
10386 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
10387 pWdaParams->pWdaContext = pWDA;
10388 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010389 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010390 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010391 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010392 {
10393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10394 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010395 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010396 vos_mem_free(pWdaParams->wdaMsgParam) ;
10397 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10398 vos_mem_free(pWdaParams) ;
10399 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010400 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010401
10402}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010403/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010404 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010405 *
10406 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010407void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010408{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010409 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10410 tWDA_CbContext *pWDA;
10411 tSirHalWowlExitParams *pWowlExitParams;
10412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010413 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010414 if(NULL == pWdaParams)
10415 {
10416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010417 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010418 VOS_ASSERT(0) ;
10419 return ;
10420 }
10421 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
10422 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
10423
10424 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010425 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010426
10427 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10428 vos_mem_free(pWdaParams) ;
10429
Jeff Johnson295189b2012-06-20 16:38:30 -070010430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010431 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010432 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010433 return ;
10434}
Jeff Johnson295189b2012-06-20 16:38:30 -070010435/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010436 * FUNCTION: WDA_WowlExitReqCallback
10437 * Free memory and send WOWL Exit RSP back to PE.
10438 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
10439 */
10440void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
10441{
10442 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10443 tWDA_CbContext *pWDA;
10444 tSirHalWowlExitParams *pWowlExitParams;
10445
10446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10447 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10448
10449 if(NULL == pWdaParams)
10450 {
10451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10452 "%s: pWdaParams received NULL", __func__);
10453 VOS_ASSERT(0);
10454 return;
10455 }
10456
10457 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10458 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
10459 pWowlExitParams->status = wdiStatus;
10460
10461 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10462 {
10463 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10464 vos_mem_free(pWdaParams);
10465 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
10466 }
10467
10468 return;
10469}
10470/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010471 * FUNCTION: WDA_ProcessWowlExitReq
10472 * Request to WDI to add WOWL Bcast pattern
10473 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010474VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
10475 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010476{
10477 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010478 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010479 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
10480 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
10481 sizeof(WDI_WowlExitReqParamsType)) ;
10482 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010484 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010485 if(NULL == wdiWowlExitInfo)
10486 {
10487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010488 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010489 VOS_ASSERT(0);
10490 return VOS_STATUS_E_NOMEM;
10491 }
10492 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10493 if(NULL == pWdaParams)
10494 {
10495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010496 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010497 VOS_ASSERT(0);
10498 vos_mem_free(wdiWowlExitInfo);
10499 return VOS_STATUS_E_NOMEM;
10500 }
10501
10502 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
10503 pWowlExitParams->bssIdx;
10504
Yue Ma7f44bbe2013-04-12 11:47:39 -070010505 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
10506 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010507
10508 /* Store param pointer as passed in by caller */
10509 /* store Params pass it to WDI */
10510 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
10511 pWdaParams->pWdaContext = pWDA;
10512 pWdaParams->wdaMsgParam = pWowlExitParams;
10513
10514 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010515 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010516
Jeff Johnson43971f52012-07-17 12:26:56 -070010517 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010518 {
10519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10520 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010521 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010522 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10523 vos_mem_free(pWdaParams->wdaMsgParam);
10524 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010525 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010526 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010527}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010528/*
10529 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
10530 * Request to WDI to determine whether a given station is capable of
10531 * using HW-based frame translation
10532 */
10533v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
10534 tANI_U8 staIdx)
10535{
10536 return WDI_IsHwFrameTxTranslationCapable(staIdx);
10537}
Katya Nigam6201c3e2014-05-27 17:51:42 +053010538
10539/*
10540 * FUNCTION: WDA_IsSelfSTA
10541 * Request to WDI to determine whether a given STAID is self station
10542 * index.
10543 */
10544v_BOOL_t WDA_IsSelfSTA(v_PVOID_t pVosContext, tANI_U8 ucSTAIdx)
10545{
10546
10547 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
10548
Girish Gowli05cf44e2014-06-12 21:53:37 +053010549 if (NULL != pWDA)
10550 return WDI_IsSelfSTA(pWDA->pWdiContext,ucSTAIdx);
10551 else
10552 return VOS_TRUE;
Katya Nigam6201c3e2014-05-27 17:51:42 +053010553}
Jeff Johnson295189b2012-06-20 16:38:30 -070010554/*
10555 * FUNCTION: WDA_NvDownloadReqCallback
10556 * send NV Download RSP back to PE
10557 */
10558void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
10559 void* pUserData)
10560{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010561
10562 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
10563 tWDA_CbContext *pWDA;
10564
Jeff Johnson295189b2012-06-20 16:38:30 -070010565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010566 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010567
10568 if(NULL == pWdaParams)
10569 {
10570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010571 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010572 VOS_ASSERT(0) ;
10573 return ;
10574 }
10575
10576 pWDA = pWdaParams->pWdaContext;
10577
Jeff Johnson295189b2012-06-20 16:38:30 -070010578 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010579 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10580 vos_mem_free(pWdaParams);
10581
Jeff Johnson295189b2012-06-20 16:38:30 -070010582 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070010583 return ;
10584}
Jeff Johnson295189b2012-06-20 16:38:30 -070010585/*
10586 * FUNCTION: WDA_ProcessNvDownloadReq
10587 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
10588 */
10589VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
10590{
10591 /* Initialize the local Variables*/
10592 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
10593 v_VOID_t *pNvBuffer=NULL;
10594 v_SIZE_t bufferSize = 0;
10595 WDI_Status status = WDI_STATUS_E_FAILURE;
10596 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010597 tWDA_ReqParams *pWdaParams ;
10598
Jeff Johnson295189b2012-06-20 16:38:30 -070010599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010600 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010601 if(NULL == pWDA)
10602 {
10603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010604 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010605 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070010606 return VOS_STATUS_E_FAILURE;
10607 }
10608
10609 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -070010610 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
10611
Jeff Johnson295189b2012-06-20 16:38:30 -070010612 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
10613 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010614 if(NULL == wdiNvDownloadReqParam)
10615 {
10616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010617 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010618 VOS_ASSERT(0);
10619 return VOS_STATUS_E_NOMEM;
10620 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010621 /* Copy Params to wdiNvDownloadReqParam*/
10622 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
10623 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010624
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 Koyyalamudida61e7e2012-10-30 18:08:14 -070010630 VOS_ASSERT(0);
10631 vos_mem_free(wdiNvDownloadReqParam);
10632 return VOS_STATUS_E_NOMEM;
10633 }
10634
Jeff Johnson295189b2012-06-20 16:38:30 -070010635 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010636 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
10637 pWdaParams->wdaMsgParam = NULL;
10638 pWdaParams->pWdaContext = pWDA;
10639
10640
Jeff Johnson295189b2012-06-20 16:38:30 -070010641 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010642
Jeff Johnson295189b2012-06-20 16:38:30 -070010643 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010644 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
10645
Jeff Johnson295189b2012-06-20 16:38:30 -070010646 if(IS_WDI_STATUS_FAILURE(status))
10647 {
10648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10649 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010650 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10651 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010652 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010653 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010654}
10655/*
10656 * FUNCTION: WDA_FlushAcReqCallback
10657 * send Flush AC RSP back to TL
10658 */
10659void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
10660{
10661 vos_msg_t wdaMsg = {0} ;
10662 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10663 tFlushACReq *pFlushACReqParams;
10664 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010666 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010667 if(NULL == pWdaParams)
10668 {
10669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010670 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010671 VOS_ASSERT(0) ;
10672 return ;
10673 }
10674
10675 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
10676 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
10677 if(NULL == pFlushACRspParams)
10678 {
10679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010680 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010681 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010682 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010683 return ;
10684 }
10685 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
10686 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
10687 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
10688 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
10689 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010690 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010691 vos_mem_free(pWdaParams->wdaMsgParam) ;
10692 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10693 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010694 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
10695 wdaMsg.bodyptr = (void *)pFlushACRspParams;
10696 // POST message to TL
10697 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
10698
Jeff Johnson295189b2012-06-20 16:38:30 -070010699 return ;
10700}
Jeff Johnson295189b2012-06-20 16:38:30 -070010701/*
10702 * FUNCTION: WDA_ProcessFlushAcReq
10703 * Request to WDI to Update the DELBA REQ params.
10704 */
10705VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
10706 tFlushACReq *pFlushAcReqParams)
10707{
10708 WDI_Status status = WDI_STATUS_SUCCESS ;
10709 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
10710 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
10711 sizeof(WDI_FlushAcReqParamsType)) ;
10712 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010713 if(NULL == wdiFlushAcReqParam)
10714 {
10715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010716 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010717 VOS_ASSERT(0);
10718 return VOS_STATUS_E_NOMEM;
10719 }
10720 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10721 if(NULL == pWdaParams)
10722 {
10723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010724 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010725 VOS_ASSERT(0);
10726 vos_mem_free(wdiFlushAcReqParam);
10727 return VOS_STATUS_E_NOMEM;
10728 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010730 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010731 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
10732 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
10733 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
10734 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -070010735 /* Store Flush AC pointer, as this will be used for response */
10736 /* store Params pass it to WDI */
10737 pWdaParams->pWdaContext = pWDA;
10738 pWdaParams->wdaMsgParam = pFlushAcReqParams;
10739 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010740 status = WDI_FlushAcReq(wdiFlushAcReqParam,
10741 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010742 if(IS_WDI_STATUS_FAILURE(status))
10743 {
10744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10745 "Failure in Flush AC REQ Params WDI API, free all the memory " );
10746 vos_mem_free(pWdaParams->wdaMsgParam) ;
10747 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10748 vos_mem_free(pWdaParams) ;
10749 //TODO: respond to TL with failure
10750 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010751 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010752}
Jeff Johnson295189b2012-06-20 16:38:30 -070010753/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010754 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010755 *
10756 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010757void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010758{
10759 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10760 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -070010761 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010762
10763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010764 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010765 if(NULL == pWdaParams)
10766 {
10767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010768 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010769 VOS_ASSERT(0) ;
10770 return ;
10771 }
10772 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10773 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
10774 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
10775 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10776 {
10777 pWDA->wdaAmpSessionOn = VOS_FALSE;
10778 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010779 vos_mem_free(pWdaParams->wdaMsgParam) ;
10780 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10781 vos_mem_free(pWdaParams) ;
10782 /*
10783 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
10784 * param here
10785 */
Jeff Johnson295189b2012-06-20 16:38:30 -070010786 return ;
10787}
Yue Ma7f44bbe2013-04-12 11:47:39 -070010788/*
10789 * FUNCTION: WDA_BtAmpEventReqCallback
10790 * Free memory.
10791 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
10792 */
10793void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
10794{
10795 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10796 tWDA_CbContext *pWDA;
10797 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010798
Yue Ma7f44bbe2013-04-12 11:47:39 -070010799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10800 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10801
10802 if(NULL == pWdaParams)
10803 {
10804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10805 "%s: pWdaParams received NULL", __func__);
10806 VOS_ASSERT(0);
10807 return;
10808 }
10809
10810 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10811 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
10812
10813 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
10814 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10815 {
10816 pWDA->wdaAmpSessionOn = VOS_FALSE;
10817 }
10818
10819 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10820 {
10821 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10822 vos_mem_free(pWdaParams->wdaMsgParam);
10823 vos_mem_free(pWdaParams);
10824 }
10825
10826 return;
10827}
Jeff Johnson295189b2012-06-20 16:38:30 -070010828/*
10829 * FUNCTION: WDA_ProcessBtAmpEventReq
10830 * Request to WDI to Update with BT AMP events.
10831 */
10832VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
10833 tSmeBtAmpEvent *pBtAmpEventParams)
10834{
10835 WDI_Status status = WDI_STATUS_SUCCESS ;
10836 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
10837 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
10838 sizeof(WDI_BtAmpEventParamsType)) ;
10839 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010841 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010842 if(NULL == wdiBtAmpEventParam)
10843 {
10844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010845 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010846 VOS_ASSERT(0);
10847 return VOS_STATUS_E_NOMEM;
10848 }
10849 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10850 if(NULL == pWdaParams)
10851 {
10852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010853 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010854 VOS_ASSERT(0);
10855 vos_mem_free(wdiBtAmpEventParam);
10856 return VOS_STATUS_E_NOMEM;
10857 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010858 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
10859 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010860 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
10861 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010862 /* Store BT AMP event pointer, as this will be used for response */
10863 /* store Params pass it to WDI */
10864 pWdaParams->pWdaContext = pWDA;
10865 pWdaParams->wdaMsgParam = pBtAmpEventParams;
10866 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010867 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010868 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010869 if(IS_WDI_STATUS_FAILURE(status))
10870 {
10871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10872 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
10873 vos_mem_free(pWdaParams->wdaMsgParam) ;
10874 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10875 vos_mem_free(pWdaParams) ;
10876 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010877 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10878 {
10879 pWDA->wdaAmpSessionOn = VOS_TRUE;
10880 }
10881 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010882}
10883
Jeff Johnson295189b2012-06-20 16:38:30 -070010884/*
10885 * FUNCTION: WDA_FTMCommandReqCallback
10886 * Handle FTM CMD response came from HAL
10887 * Route responce to HDD FTM
10888 */
10889void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
10890 void *usrData)
10891{
10892 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010893 if((NULL == pWDA) || (NULL == ftmCmdRspData))
10894 {
10895 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010896 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010897 return;
10898 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010899 /* Release Current FTM Command Request */
10900 vos_mem_free(pWDA->wdaFTMCmdReq);
10901 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010902 /* Post FTM Responce to HDD FTM */
10903 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010904 return;
10905}
Jeff Johnson295189b2012-06-20 16:38:30 -070010906/*
10907 * FUNCTION: WDA_ProcessFTMCommand
10908 * Send FTM command to WDI
10909 */
10910VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
10911 tPttMsgbuffer *pPTTFtmCmd)
10912{
10913 WDI_Status status = WDI_STATUS_SUCCESS;
10914 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010915 ftmCMDReq = (WDI_FTMCommandReqType *)
10916 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
10917 if(NULL == ftmCMDReq)
10918 {
10919 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10920 "WDA FTM Command buffer alloc fail");
10921 return VOS_STATUS_E_NOMEM;
10922 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010923 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
10924 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070010925 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070010926 /* Send command to WDI */
10927 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070010928 return status;
10929}
Jeff Johnsone7245742012-09-05 17:12:55 -070010930#ifdef FEATURE_OEM_DATA_SUPPORT
10931/*
10932 * FUNCTION: WDA_StartOemDataReqCallback
10933 *
10934 */
10935void WDA_StartOemDataReqCallback(
10936 WDI_oemDataRspParamsType *wdiOemDataRspParams,
10937 void* pUserData)
10938{
10939 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010940 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10941 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -070010942 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010943
Jeff Johnsone7245742012-09-05 17:12:55 -070010944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010945 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010946
10947 if(NULL == pWdaParams)
10948 {
10949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010950 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010951 VOS_ASSERT(0) ;
10952 return ;
10953 }
10954 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10955
Jeff Johnsone7245742012-09-05 17:12:55 -070010956 if(NULL == pWDA)
10957 {
10958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010959 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010960 VOS_ASSERT(0);
10961 return ;
10962 }
10963
10964 /*
10965 * Allocate memory for response params sent to PE
10966 */
10967 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
10968
10969 // Check if memory is allocated for OemdataMeasRsp Params.
10970 if(NULL == pOemDataRspParams)
10971 {
10972 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10973 "OEM DATA WDA callback alloc fail");
10974 VOS_ASSERT(0) ;
10975 return;
10976 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010977
Jeff Johnsone7245742012-09-05 17:12:55 -070010978 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010979 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10980 vos_mem_free(pWdaParams->wdaMsgParam);
10981 vos_mem_free(pWdaParams) ;
10982
Jeff Johnsone7245742012-09-05 17:12:55 -070010983 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080010984 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070010985 * Also, here success always means that we have atleast one BSSID.
10986 */
10987 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
10988
10989 //enable Tx
10990 status = WDA_ResumeDataTx(pWDA);
10991 if(status != VOS_STATUS_SUCCESS)
10992 {
10993 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
10994 }
10995 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
10996 return ;
10997}
10998/*
10999 * FUNCTION: WDA_ProcessStartOemDataReq
11000 * Send Start Oem Data Req to WDI
11001 */
11002VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
11003 tStartOemDataReq *pOemDataReqParams)
11004{
11005 WDI_Status status = WDI_STATUS_SUCCESS;
11006 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011007 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070011008
11009 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
11010
11011 if(NULL == wdiOemDataReqParams)
11012 {
11013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011014 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011015 VOS_ASSERT(0);
11016 return VOS_STATUS_E_NOMEM;
11017 }
11018
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011019 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
11020 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
11021 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
11022 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070011023
11024 wdiOemDataReqParams->wdiReqStatusCB = NULL;
11025
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011026 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11027 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070011028 {
11029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011030 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011031 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011032 vos_mem_free(pOemDataReqParams);
11033 VOS_ASSERT(0);
11034 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070011035 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011036
Bernald44a1ae2013-01-09 08:30:39 -080011037 pWdaParams->pWdaContext = (void*)pWDA;
11038 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
11039 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011040
11041 status = WDI_StartOemDataReq(wdiOemDataReqParams,
11042 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011043
11044 if(IS_WDI_STATUS_FAILURE(status))
11045 {
11046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11047 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011048 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11049 vos_mem_free(pWdaParams->wdaMsgParam);
11050 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011051 }
11052 return CONVERT_WDI2VOS_STATUS(status) ;
11053}
11054#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070011055/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011056 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011057 *
11058 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011059void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011060{
11061 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011063 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011064 if(NULL == pWdaParams)
11065 {
11066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011067 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011068 VOS_ASSERT(0) ;
11069 return ;
11070 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011071
11072 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11073 vos_mem_free(pWdaParams->wdaMsgParam);
11074 vos_mem_free(pWdaParams);
11075
11076 return ;
11077}
11078/*
11079 * FUNCTION: WDA_SetTxPerTrackingReqCallback
11080 * Free memory.
11081 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
11082 */
11083void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
11084{
11085 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11086
11087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11088 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11089
11090 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070011091 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070011092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11093 "%s: pWdaParams received NULL", __func__);
11094 VOS_ASSERT(0);
11095 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011096 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011097
11098 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011099 {
11100 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011101 vos_mem_free(pWdaParams->wdaMsgParam);
11102 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011103 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011104
11105 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011106}
Jeff Johnson295189b2012-06-20 16:38:30 -070011107#ifdef WLAN_FEATURE_GTK_OFFLOAD
11108/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011109 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011110 *
11111 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011112void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011113 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011114{
11115 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11116
11117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011118 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080011119 if(NULL == pWdaParams)
11120 {
11121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11122 "%s: pWdaParams received NULL", __func__);
11123 VOS_ASSERT(0);
11124 return;
11125 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011126
Jeff Johnson295189b2012-06-20 16:38:30 -070011127 vos_mem_free(pWdaParams->wdaMsgParam) ;
11128 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11129 vos_mem_free(pWdaParams) ;
11130
11131 //print a msg, nothing else to do
11132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011133 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011134
11135 return ;
11136}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011137/*
11138 * FUNCTION: WDA_GTKOffloadReqCallback
11139 * Free memory.
11140 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
11141 */
11142void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
11143{
11144 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011145
Yue Ma7f44bbe2013-04-12 11:47:39 -070011146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11147 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11148
11149 if(NULL == pWdaParams)
11150 {
11151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11152 "%s: pWdaParams received NULL", __func__);
11153 VOS_ASSERT(0);
11154 return;
11155 }
11156
11157 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11158 {
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053011159 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
11160 sizeof(WDI_GtkOffloadReqMsg));
11161 vos_mem_zero(pWdaParams->wdaMsgParam,
11162 sizeof(tSirGtkOffloadParams));
Yue Ma7f44bbe2013-04-12 11:47:39 -070011163 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11164 vos_mem_free(pWdaParams->wdaMsgParam);
11165 vos_mem_free(pWdaParams);
11166 }
11167
11168 return;
11169}
Jeff Johnson295189b2012-06-20 16:38:30 -070011170/*
11171 * FUNCTION: WDA_ProcessGTKOffloadReq
11172 * Request to WDI to set the filter to minimize unnecessary host wakeup due
11173 * to broadcast traffic (sta mode).
11174 */
11175VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
11176 tpSirGtkOffloadParams pGtkOffloadParams)
11177{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011178 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011179 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
11180 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
11181 sizeof(WDI_GtkOffloadReqMsg)) ;
11182 tWDA_ReqParams *pWdaParams ;
11183
11184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011185 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011186
11187 if(NULL == wdiGtkOffloadReqMsg)
11188 {
11189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011190 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011191 VOS_ASSERT(0);
11192 return VOS_STATUS_E_NOMEM;
11193 }
11194
11195 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11196 if(NULL == pWdaParams)
11197 {
11198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011199 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011200 VOS_ASSERT(0);
11201 vos_mem_free(wdiGtkOffloadReqMsg);
11202 return VOS_STATUS_E_NOMEM;
11203 }
11204
11205 //
11206 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
11207 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011208
11209 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011210 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011211
Jeff Johnson295189b2012-06-20 16:38:30 -070011212 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
11213 // Copy KCK
11214 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
11215 // Copy KEK
11216 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
11217 // Copy KeyReplayCounter
11218 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
11219 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
11220
Yue Ma7f44bbe2013-04-12 11:47:39 -070011221 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
11222 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011223
Jeff Johnson295189b2012-06-20 16:38:30 -070011224
11225 /* Store Params pass it to WDI */
11226 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
11227 pWdaParams->pWdaContext = pWDA;
11228 /* Store param pointer as passed in by caller */
11229 pWdaParams->wdaMsgParam = pGtkOffloadParams;
11230
Yue Ma7f44bbe2013-04-12 11:47:39 -070011231 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011232
11233 if(IS_WDI_STATUS_FAILURE(status))
11234 {
11235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11236 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053011237 vos_mem_zero(wdiGtkOffloadReqMsg, sizeof(WDI_GtkOffloadReqMsg));
11238 vos_mem_zero(pGtkOffloadParams, sizeof(tSirGtkOffloadParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070011239 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11240 vos_mem_free(pWdaParams->wdaMsgParam);
11241 vos_mem_free(pWdaParams);
11242 }
11243
11244 return CONVERT_WDI2VOS_STATUS(status) ;
11245}
11246
11247/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011248 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011249 *
11250 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011251void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011252 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011253{
11254 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11255 tWDA_CbContext *pWDA;
11256 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Nirav Shah374de6e2014-02-13 16:40:01 +053011257 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070011258 vos_msg_t vosMsg;
11259
11260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011261 "<------ %s " ,__func__);
Nirav Shah374de6e2014-02-13 16:40:01 +053011262
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080011263 if(NULL == pWdaParams)
11264 {
11265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11266 "%s: pWdaParams received NULL", __func__);
11267 VOS_ASSERT(0);
11268 return;
11269 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011270
Nirav Shah374de6e2014-02-13 16:40:01 +053011271 pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams));
11272 if(NULL == pGtkOffloadGetInfoRsp)
11273 {
11274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11275 "%s: vos_mem_malloc failed ", __func__);
11276 VOS_ASSERT(0);
11277 return;
11278 }
11279
Jeff Johnson295189b2012-06-20 16:38:30 -070011280 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
11281 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
11282
11283 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
11284 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
11285
11286 /* Message Header */
11287 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070011288 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011289
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011290 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
11291 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
11292 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
11293 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
11294 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070011295
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011296 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
11297 pwdiGtkOffloadGetInfoRsparams->bssId,
11298 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011299 /* VOS message wrapper */
11300 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
11301 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
11302 vosMsg.bodyval = 0;
11303
11304 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11305 {
11306 /* free the mem and return */
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053011307 vos_mem_zero(pGtkOffloadGetInfoRsp,
11308 sizeof(tSirGtkOffloadGetInfoRspParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070011309 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
11310 }
11311
11312 vos_mem_free(pWdaParams->wdaMsgParam) ;
11313 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11314 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011315
11316 return;
11317}
11318/*
11319 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
11320 * Free memory and send RSP back to SME.
11321 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
11322 */
11323void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
11324{
11325 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11326 vos_msg_t vosMsg;
11327
11328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11329 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11330
11331 if(NULL == pWdaParams)
11332 {
11333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11334 "%s: pWdaParams received NULL", __func__);
11335 VOS_ASSERT(0);
11336 return;
11337 }
11338
11339 /* VOS message wrapper */
11340 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
11341 vosMsg.bodyptr = NULL;
11342 vosMsg.bodyval = 0;
11343
11344 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11345 {
11346 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11347 vos_mem_free(pWdaParams->wdaMsgParam);
11348 vos_mem_free(pWdaParams);
11349 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
11350 }
11351
11352 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011353}
11354#endif
11355
11356/*
11357 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
11358 * Request to WDI to set Tx Per Tracking configurations
11359 */
11360VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
11361{
11362 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011363 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011364 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
11365 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
11366 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
11367 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011369 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011370 if(NULL == pwdiSetTxPerTrackingReqParams)
11371 {
11372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011373 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011374 vos_mem_free(pTxPerTrackingParams);
11375 VOS_ASSERT(0);
11376 return VOS_STATUS_E_NOMEM;
11377 }
11378 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11379 if(NULL == pWdaParams)
11380 {
11381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011382 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011383 vos_mem_free(pwdiSetTxPerTrackingReqParams);
11384 vos_mem_free(pTxPerTrackingParams);
11385 VOS_ASSERT(0);
11386 return VOS_STATUS_E_NOMEM;
11387 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011388 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
11389 pTxPerTrackingParams->ucTxPerTrackingEnable;
11390 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
11391 pTxPerTrackingParams->ucTxPerTrackingPeriod;
11392 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
11393 pTxPerTrackingParams->ucTxPerTrackingRatio;
11394 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
11395 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011396 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
11397 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011398 /* Store param pointer as passed in by caller */
11399 /* store Params pass it to WDI
11400 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
11401 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
11402 pWdaParams->pWdaContext = pWDA;
11403 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011404 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011405 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011406 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011407 {
11408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11409 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011410 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011411 vos_mem_free(pWdaParams->wdaMsgParam) ;
11412 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11413 vos_mem_free(pWdaParams) ;
11414 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011415 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011416
11417}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011418/*
11419 * FUNCTION: WDA_HALDumpCmdCallback
11420 * Send the VOS complete .
11421 */
11422void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
11423 void* pUserData)
11424{
11425 tANI_U8 *buffer = NULL;
11426 tWDA_CbContext *pWDA = NULL;
11427 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011428 if(NULL == pWdaParams)
11429 {
11430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011431 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011432 VOS_ASSERT(0) ;
11433 return ;
11434 }
11435
11436 pWDA = pWdaParams->pWdaContext;
11437 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011438 if(wdiRspParams->usBufferLen > 0)
11439 {
11440 /*Copy the Resp data to UMAC supplied buffer*/
11441 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
11442 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011443 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11444 vos_mem_free(pWdaParams);
11445
11446 /* Indicate VOSS about the start complete */
11447 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070011448 return ;
11449}
11450
Jeff Johnson295189b2012-06-20 16:38:30 -070011451/*
11452 * FUNCTION: WDA_ProcessHALDumpCmdReq
11453 * Send Dump command to WDI
11454 */
11455VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
11456 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
11457 tANI_U32 arg4, tANI_U8 *pBuffer)
11458{
11459 WDI_Status status = WDI_STATUS_SUCCESS;
11460 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
11461 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
11462 tWDA_ReqParams *pWdaParams ;
11463 pVosContextType pVosContext = NULL;
11464 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011465 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
11466 (void *)pMac);
Katya Nigame4bafe02014-02-28 15:37:57 +053011467 if(pVosContext)
11468 {
11469 if (pVosContext->isLogpInProgress)
11470 {
11471 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
11472 "%s:LOGP in Progress. Ignore!!!", __func__);
11473 return VOS_STATUS_E_BUSY;
11474 }
11475 }
11476 else
11477 {
11478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11479 "%s: VOS Context Null", __func__);
11480 return VOS_STATUS_E_RESOURCES;
11481 }
11482
Jeff Johnson295189b2012-06-20 16:38:30 -070011483 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11484 if(NULL == pWdaParams)
11485 {
11486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011487 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011488 return VOS_STATUS_E_NOMEM;
11489 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011490 /* Allocate memory WDI request structure*/
11491 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
11492 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
11493 if(NULL == wdiHALDumpCmdReqParam)
11494 {
11495 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11496 "WDA HAL DUMP Command buffer alloc fail");
11497 vos_mem_free(pWdaParams);
11498 return WDI_STATUS_E_FAILURE;
11499 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011500 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070011501 /* Extract the arguments */
11502 wdiHalDumpCmdInfo->command = cmd;
11503 wdiHalDumpCmdInfo->argument1 = arg1;
11504 wdiHalDumpCmdInfo->argument2 = arg2;
11505 wdiHalDumpCmdInfo->argument3 = arg3;
11506 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070011507 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011508 pWdaParams->pWdaContext = pVosContext->pWDAContext;
11509
11510 /* Response message will be passed through the buffer */
11511 pWdaParams->wdaMsgParam = (void *)pBuffer;
11512
11513 /* store Params pass it to WDI */
11514 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011515 /* Send command to WDI */
11516 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -080011517 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), WDA_DUMPCMD_WAIT_TIMEOUT );
Jeff Johnson295189b2012-06-20 16:38:30 -070011518 if ( vStatus != VOS_STATUS_SUCCESS )
11519 {
11520 if ( vStatus == VOS_STATUS_E_TIMEOUT )
11521 {
11522 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011523 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011524 }
11525 else
11526 {
11527 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011528 "%s: WDA_HALDUMP reporting other error",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011529 }
11530 VOS_ASSERT(0);
11531 }
11532 return status;
11533}
Jeff Johnson295189b2012-06-20 16:38:30 -070011534#ifdef WLAN_FEATURE_GTK_OFFLOAD
11535/*
11536 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
11537 * Request to WDI to get GTK Offload Information
11538 */
11539VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
11540 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
11541{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011542 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011543 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
11544 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
11545 tWDA_ReqParams *pWdaParams ;
11546
11547 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
11548 {
11549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011550 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011551 VOS_ASSERT(0);
11552 return VOS_STATUS_E_NOMEM;
11553 }
11554
11555 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11556 if(NULL == pWdaParams)
11557 {
11558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011559 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011560 VOS_ASSERT(0);
11561 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
11562 return VOS_STATUS_E_NOMEM;
11563 }
11564
Yue Ma7f44bbe2013-04-12 11:47:39 -070011565 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
11566 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011567
Jeff Johnson295189b2012-06-20 16:38:30 -070011568 /* Store Params pass it to WDI */
11569 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
11570 pWdaParams->pWdaContext = pWDA;
11571 /* Store param pointer as passed in by caller */
11572 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
11573
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011574 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011575 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011576
Yue Ma7f44bbe2013-04-12 11:47:39 -070011577 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011578
11579 if(IS_WDI_STATUS_FAILURE(status))
11580 {
11581 /* failure returned by WDI API */
11582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11583 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
11584 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11585 vos_mem_free(pWdaParams) ;
11586 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
11587 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
11588 }
11589
11590 return CONVERT_WDI2VOS_STATUS(status) ;
11591}
11592#endif // WLAN_FEATURE_GTK_OFFLOAD
11593
11594/*
Yue Mab9c86f42013-08-14 15:59:08 -070011595 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
11596 *
11597 */
11598VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
11599 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
11600{
11601 WDI_Status wdiStatus;
11602 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
11603
11604 addPeriodicTxPtrnParams =
11605 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
11606
11607 if (NULL == addPeriodicTxPtrnParams)
11608 {
11609 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11610 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
11611 __func__);
11612
11613 return VOS_STATUS_E_NOMEM;
11614 }
11615
11616 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
11617 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
11618
11619 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
11620 addPeriodicTxPtrnParams->pUserData = pWDA;
11621
11622 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
11623
11624 if (WDI_STATUS_PENDING == wdiStatus)
11625 {
11626 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11627 "Pending received for %s:%d", __func__, __LINE__ );
11628 }
11629 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11630 {
11631 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11632 "Failure in %s:%d", __func__, __LINE__ );
11633 }
11634
11635 vos_mem_free(addPeriodicTxPtrnParams);
11636
11637 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11638}
11639
11640/*
11641 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
11642 *
11643 */
11644VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
11645 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
11646{
11647 WDI_Status wdiStatus;
11648 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
11649
11650 delPeriodicTxPtrnParams =
11651 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
11652
11653 if (NULL == delPeriodicTxPtrnParams)
11654 {
11655 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11656 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
11657 __func__);
11658
11659 return VOS_STATUS_E_NOMEM;
11660 }
11661
11662 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
11663 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
11664
11665 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
11666 delPeriodicTxPtrnParams->pUserData = pWDA;
11667
11668 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
11669
11670 if (WDI_STATUS_PENDING == wdiStatus)
11671 {
11672 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11673 "Pending received for %s:%d", __func__, __LINE__ );
11674 }
11675 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11676 {
11677 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11678 "Failure in %s:%d", __func__, __LINE__ );
11679 }
11680
11681 vos_mem_free(delPeriodicTxPtrnParams);
11682
11683 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11684}
11685
Rajeev79dbe4c2013-10-05 11:03:42 +053011686#ifdef FEATURE_WLAN_BATCH_SCAN
11687/*
11688 * FUNCTION: WDA_ProcessStopBatchScanInd
11689 *
11690 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
11691 *
11692 * PARAM:
11693 * pWDA: pointer to WDA context
11694 * pReq: pointer to stop batch scan request
11695 */
11696VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
11697 tSirStopBatchScanInd *pReq)
11698{
11699 WDI_Status wdiStatus;
11700 WDI_StopBatchScanIndType wdiReq;
11701
11702 wdiReq.param = pReq->param;
11703
11704 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
11705
11706 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11707 {
11708 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11709 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
11710 }
11711
11712 vos_mem_free(pReq);
11713
11714 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11715}
11716/*==========================================================================
11717 FUNCTION WDA_ProcessTriggerBatchScanResultInd
11718
11719 DESCRIPTION
11720 API to pull batch scan result from FW
11721
11722 PARAMETERS
11723 pWDA: Pointer to WDA context
11724 pGetBatchScanReq: Pointer to get batch scan result indication
11725
11726 RETURN VALUE
11727 NONE
11728
11729===========================================================================*/
11730VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
11731 tSirTriggerBatchScanResultInd *pReq)
11732{
11733 WDI_Status wdiStatus;
11734 WDI_TriggerBatchScanResultIndType wdiReq;
11735
11736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11737 "------> %s " ,__func__);
11738
11739 wdiReq.param = pReq->param;
11740
11741 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
11742
11743 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11744 {
11745 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11746 "Trigger batch scan result ind failed %s:%d",
11747 __func__, wdiStatus);
11748 }
11749
11750 vos_mem_free(pReq);
11751
11752 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11753}
11754
11755/*==========================================================================
11756 FUNCTION WDA_SetBatchScanRespCallback
11757
11758 DESCRIPTION
11759 API to process set batch scan response from FW
11760
11761 PARAMETERS
11762 pRsp: Pointer to set batch scan response
11763 pUserData: Pointer to user data
11764
11765 RETURN VALUE
11766 NONE
11767
11768===========================================================================*/
11769void WDA_SetBatchScanRespCallback
11770(
11771 WDI_SetBatchScanRspType *pRsp,
11772 void* pUserData
11773)
11774{
11775 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
11776 tpAniSirGlobal pMac;
11777 void *pCallbackContext;
11778 tWDA_CbContext *pWDA = NULL ;
11779 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11780
11781
11782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11783 "<------ %s " ,__func__);
11784 if (NULL == pWdaParams)
11785 {
11786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11787 "%s: pWdaParams received NULL", __func__);
11788 VOS_ASSERT(0) ;
11789 return ;
11790 }
11791
11792 /*extract WDA context*/
11793 pWDA = pWdaParams->pWdaContext;
11794 if (NULL == pWDA)
11795 {
11796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11797 "%s:pWDA is NULL can't invole HDD callback",
11798 __func__);
11799 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11800 vos_mem_free(pWdaParams->wdaMsgParam);
11801 vos_mem_free(pWdaParams);
11802 VOS_ASSERT(0);
11803 return;
11804 }
11805
11806 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11807 vos_mem_free(pWdaParams->wdaMsgParam);
11808 vos_mem_free(pWdaParams);
11809
11810 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
11811 if (NULL == pMac)
11812 {
11813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11814 "%s:pMac is NULL", __func__);
11815 VOS_ASSERT(0);
11816 return;
11817 }
11818
11819 pHddSetBatchScanRsp =
11820 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
11821 if (NULL == pHddSetBatchScanRsp)
11822 {
11823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11824 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
11825 VOS_ASSERT(0);
11826 return;
11827 }
11828
11829 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
11830
11831 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
11832 /*call hdd callback with set batch scan response data*/
11833 if(pMac->pmc.setBatchScanReqCallback)
11834 {
11835 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
11836 }
11837 else
11838 {
11839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11840 "%s:HDD callback is null", __func__);
11841 VOS_ASSERT(0);
11842 }
11843
11844 vos_mem_free(pHddSetBatchScanRsp);
11845 return ;
11846}
11847
11848/*==========================================================================
11849 FUNCTION WDA_ProcessSetBatchScanReq
11850
11851 DESCRIPTION
11852 API to send set batch scan request to WDI
11853
11854 PARAMETERS
11855 pWDA: Pointer to WDA context
11856 pSetBatchScanReq: Pointer to set batch scan req
11857
11858 RETURN VALUE
11859 NONE
11860
11861===========================================================================*/
11862VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
11863 tSirSetBatchScanReq *pSetBatchScanReq)
11864{
11865 WDI_Status status;
11866 tWDA_ReqParams *pWdaParams ;
11867 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
11868
11869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11870 "------> %s " ,__func__);
11871
11872 pWdiSetBatchScanReq =
11873 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
11874 if (NULL == pWdiSetBatchScanReq)
11875 {
11876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11877 "%s: VOS MEM Alloc Failure", __func__);
11878 vos_mem_free(pSetBatchScanReq);
11879 VOS_ASSERT(0);
11880 return VOS_STATUS_E_NOMEM;
11881 }
11882
11883 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
11884 if (NULL == pWdaParams)
11885 {
11886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11887 "%s: VOS MEM Alloc Failure", __func__);
11888 VOS_ASSERT(0);
11889 vos_mem_free(pSetBatchScanReq);
11890 vos_mem_free(pWdiSetBatchScanReq);
11891 return VOS_STATUS_E_NOMEM;
11892 }
11893
11894 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
11895 pWdiSetBatchScanReq->numberOfScansToBatch =
11896 pSetBatchScanReq->numberOfScansToBatch;
11897 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
11898 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
11899 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
11900
11901 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
11902 pWdaParams->pWdaContext = pWDA;
11903 pWdaParams->wdaMsgParam = pSetBatchScanReq;
11904
11905 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
11906 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
11907 if (IS_WDI_STATUS_FAILURE(status))
11908 {
11909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11910 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
11911 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11912 vos_mem_free(pWdaParams->wdaMsgParam);
11913 vos_mem_free(pWdaParams);
11914 }
11915 return CONVERT_WDI2VOS_STATUS(status);
11916}
11917
11918#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053011919/*
11920 * FUNCTION: WDA_ProcessHT40OBSSScanInd
11921 *
11922 * DESCRIPTION: This function sends start/update OBSS scan
11923 * inidcation message to WDI
11924 *
11925 * PARAM:
11926 * pWDA: pointer to WDA context
11927 * pReq: pointer to start OBSS scan request
11928 */
11929VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
11930 tSirHT40OBSSScanInd *pReq)
11931{
11932 WDI_Status status;
11933 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
11934 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053011935
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053011936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11937 "------> %s " ,__func__);
11938 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
11939 wdiOBSSScanParams.pUserData = pWDA;
11940
11941 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
11942 pWdiOBSSScanInd->cmdType = pReq->cmdType;
11943 pWdiOBSSScanInd->scanType = pReq->scanType;
11944 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
11945 pReq->OBSSScanActiveDwellTime;
11946 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
11947 pReq->OBSSScanPassiveDwellTime;
11948 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
11949 pReq->BSSChannelWidthTriggerScanInterval;
11950 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
11951 pReq->BSSWidthChannelTransitionDelayFactor;
11952 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
11953 pReq->OBSSScanActiveTotalPerChannel;
11954 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
11955 pReq->OBSSScanPassiveTotalPerChannel;
11956 pWdiOBSSScanInd->OBSSScanActivityThreshold =
11957 pReq->OBSSScanActivityThreshold;
11958 pWdiOBSSScanInd->channelCount = pReq->channelCount;
11959 vos_mem_copy(pWdiOBSSScanInd->channels,
11960 pReq->channels,
11961 pReq->channelCount);
11962 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
11963 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
11964 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
11965 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
11966 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
11967
11968 vos_mem_copy(pWdiOBSSScanInd->ieField,
11969 pReq->ieField,
11970 pReq->ieFieldLen);
11971
11972 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
11973 if (WDI_STATUS_PENDING == status)
11974 {
11975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11976 "Pending received for %s:%d ",__func__,__LINE__ );
11977 }
11978 else if (WDI_STATUS_SUCCESS_SYNC != status)
11979 {
11980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11981 "Failure in %s:%d ",__func__,__LINE__ );
11982 }
11983 return CONVERT_WDI2VOS_STATUS(status) ;
11984}
11985/*
11986 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
11987 *
11988 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
11989 *
11990 * PARAM:
11991 * pWDA: pointer to WDA context
11992 * pReq: pointer to stop batch scan request
11993 */
11994VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
11995 tANI_U8 *bssIdx)
11996{
11997 WDI_Status status;
11998
11999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12000 "------> %s " ,__func__);
12001
12002 status = WDI_HT40OBSSStopScanInd(*bssIdx);
12003 if (WDI_STATUS_PENDING == status)
12004 {
12005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12006 "Pending received for %s:%d ",__func__,__LINE__ );
12007 }
12008 else if (WDI_STATUS_SUCCESS_SYNC != status)
12009 {
12010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12011 "Failure in %s:%d ",__func__,__LINE__ );
12012 }
12013 return CONVERT_WDI2VOS_STATUS(status) ;
12014}
Yue Mab9c86f42013-08-14 15:59:08 -070012015/*
Chittajit Mitraf5413a42013-10-18 14:20:08 -070012016 * FUNCTION: WDA_ProcessRateUpdateInd
12017 *
12018 */
12019VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
12020 tSirRateUpdateInd *pRateUpdateParams)
12021{
12022 WDI_Status wdiStatus;
12023 WDI_RateUpdateIndParams rateUpdateParams;
12024
12025 vos_mem_copy(rateUpdateParams.bssid,
12026 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
12027
12028 rateUpdateParams.ucastDataRateTxFlag =
12029 pRateUpdateParams->ucastDataRateTxFlag;
12030 rateUpdateParams.reliableMcastDataRateTxFlag =
12031 pRateUpdateParams->reliableMcastDataRateTxFlag;
12032 rateUpdateParams.mcastDataRate24GHzTxFlag =
12033 pRateUpdateParams->mcastDataRate24GHzTxFlag;
12034 rateUpdateParams.mcastDataRate5GHzTxFlag =
12035 pRateUpdateParams->mcastDataRate5GHzTxFlag;
12036
12037 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
12038 rateUpdateParams.reliableMcastDataRate =
12039 pRateUpdateParams->reliableMcastDataRate;
12040 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
12041 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
12042
12043 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
12044 rateUpdateParams.pUserData = pWDA;
12045
12046 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
12047
12048 if (WDI_STATUS_PENDING == wdiStatus)
12049 {
12050 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12051 "Pending received for %s:%d", __func__, __LINE__ );
12052 }
12053 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12054 {
12055 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12056 "Failure in %s:%d", __func__, __LINE__ );
12057 }
12058
12059 vos_mem_free(pRateUpdateParams);
12060
12061 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12062}
12063
12064/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012065 * -------------------------------------------------------------------------
12066 * DATA interface with WDI for Mgmt Frames
12067 * -------------------------------------------------------------------------
12068 */
Jeff Johnson295189b2012-06-20 16:38:30 -070012069/*
12070 * FUNCTION: WDA_TxComplete
12071 * Callback function for the WDA_TxPacket
12072 */
12073VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
12074 VOS_STATUS status )
12075{
12076
12077 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
12078 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012079 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012080
12081 if(NULL == wdaContext)
12082 {
12083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12084 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012085 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012086 VOS_ASSERT(0);
12087 return VOS_STATUS_E_FAILURE;
12088 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012089
12090 /*Check if frame was timed out or not*/
12091 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
12092 (v_PVOID_t)&uUserData);
12093
12094 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
12095 {
12096 /*Discard frame - no further processing is needed*/
12097 vos_pkt_return_packet(pData);
12098 return VOS_STATUS_SUCCESS;
12099 }
12100
Jeff Johnson295189b2012-06-20 16:38:30 -070012101 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
12102 if( NULL!=wdaContext->pTxCbFunc)
12103 {
12104 /*check if packet is freed already*/
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012105 if(vos_atomic_set((uintptr_t*)&wdaContext->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (uintptr_t)pData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012106 {
12107 wdaContext->pTxCbFunc(pMac, pData);
12108 }
12109 else
12110 {
12111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012112 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012113 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012114 //Return from here since we reaching here because the packet already timeout
12115 return status;
12116 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012117 }
12118
12119 /*
12120 * Trigger the event to bring the HAL TL Tx complete function to come
12121 * out of wait
12122 * Let the coe above to complete the packet first. When this event is set,
12123 * the thread waiting for the event may run and set Vospacket_freed causing the original
12124 * packet not being freed.
12125 */
12126 status = vos_event_set(&wdaContext->txFrameEvent);
12127 if(!VOS_IS_STATUS_SUCCESS(status))
12128 {
12129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012130 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012131 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012132 return status;
12133}
Jeff Johnson295189b2012-06-20 16:38:30 -070012134/*
12135 * FUNCTION: WDA_TxPacket
12136 * Forward TX management frame to WDI
12137 */
12138VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
12139 void *pFrmBuf,
12140 tANI_U16 frmLen,
12141 eFrameType frmType,
12142 eFrameTxDir txDir,
12143 tANI_U8 tid,
12144 pWDATxRxCompFunc pCompFunc,
12145 void *pData,
12146 pWDAAckFnTxComp pAckTxComp,
Kanchanapally, Vidyullathaf9426e52013-12-24 17:28:54 +053012147 tANI_U32 txFlag)
Jeff Johnson295189b2012-06-20 16:38:30 -070012148{
12149 VOS_STATUS status = VOS_STATUS_SUCCESS ;
12150 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
12151 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
12152 tANI_U8 eventIdx = 0;
12153 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
12154 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -070012155 if((NULL == pWDA)||(NULL == pFrmBuf))
12156 {
12157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012158 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012159 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070012160 VOS_ASSERT(0);
12161 return VOS_STATUS_E_FAILURE;
12162 }
12163
12164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012165 "Tx Mgmt Frame Subtype: %d alloc(%p)", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070012166 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12167 if(NULL == pMac)
12168 {
12169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012170 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012171 VOS_ASSERT(0);
12172 return VOS_STATUS_E_FAILURE;
12173 }
12174
12175
12176
12177 /* store the call back function in WDA context */
12178 pWDA->pTxCbFunc = pCompFunc;
12179 /* store the call back for the function of ackTxComplete */
12180 if( pAckTxComp )
12181 {
Jeff Johnsone7245742012-09-05 17:12:55 -070012182 if( NULL != pWDA->pAckTxCbFunc )
12183 {
12184 /* Already TxComp is active no need to active again */
12185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012186 "There is already one request pending for tx complete");
Jeff Johnsone7245742012-09-05 17:12:55 -070012187 pWDA->pAckTxCbFunc( pMac, 0);
12188 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012189
Jeff Johnsone7245742012-09-05 17:12:55 -070012190 if( VOS_STATUS_SUCCESS !=
12191 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12192 {
12193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12194 "Tx Complete timeout Timer Stop Failed ");
12195 }
12196 else
12197 {
12198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080012199 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070012200 }
12201 }
12202
12203 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
12204 pWDA->pAckTxCbFunc = pAckTxComp;
12205 if( VOS_STATUS_SUCCESS !=
12206 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
12207 {
12208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12209 "Tx Complete Timer Start Failed ");
12210 pWDA->pAckTxCbFunc = NULL;
12211 return eHAL_STATUS_FAILURE;
12212 }
12213 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012214 /* Reset the event to be not signalled */
12215 status = vos_event_reset(&pWDA->txFrameEvent);
12216 if(!VOS_IS_STATUS_SUCCESS(status))
12217 {
12218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012219 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012220 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
12221 if( pAckTxComp )
12222 {
12223 pWDA->pAckTxCbFunc = NULL;
12224 if( VOS_STATUS_SUCCESS !=
12225 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12226 {
12227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12228 "Tx Complete timeout Timer Stop Failed ");
12229 }
12230 }
12231 return VOS_STATUS_E_FAILURE;
12232 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012233
12234 /* If Peer Sta mask is set don't overwrite to self sta */
12235 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070012236 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012237 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070012238 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012239 else
12240 {
Ganesh K08bce952012-12-13 15:04:41 -080012241 /* Get system role, use the self station if in unknown role or STA role */
12242 systemRole = wdaGetGlobalSystemRole(pMac);
12243 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
12244 (( eSYSTEM_STA_ROLE == systemRole )
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012245#if defined FEATURE_WLAN_ESE || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080012246 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012247#endif
Ganesh K08bce952012-12-13 15:04:41 -080012248 ))
12249 {
12250 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
12251 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080012252 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012253
Jeff Johnsone7245742012-09-05 17:12:55 -070012254 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
12255 disassoc frame reaches the HW, HAL has already deleted the peer station */
12256 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070012257 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080012258 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070012259 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070012260 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012261 /*Send Probe request frames on self sta idx*/
12262 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070012263 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012264 /* Since we donot want probe responses to be retried, send probe responses
12265 through the NO_ACK queues */
12266 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
12267 {
12268 //probe response is sent out using self station and no retries options.
12269 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
12270 }
12271 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
12272 {
12273 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
12274 }
12275 }
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012276 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012277
12278 /*Set frame tag to 0
12279 We will use the WDA user data in order to tag a frame as expired*/
12280 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
12281 (v_PVOID_t)0);
12282
12283
12284 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
12285 frmLen, ucTypeSubType, tid,
12286 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
12287 {
12288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012289 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012290 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012291 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 -070012292 if( pAckTxComp )
12293 {
12294 pWDA->pAckTxCbFunc = NULL;
12295 if( VOS_STATUS_SUCCESS !=
12296 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12297 {
12298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12299 "Tx Complete timeout Timer Stop Failed ");
12300 }
12301 }
12302 return VOS_STATUS_E_FAILURE;
12303 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012304 /*
12305 * Wait for the event to be set by the TL, to get the response of TX
12306 * complete, this event should be set by the Callback function called by TL
12307 */
12308 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
12309 &eventIdx);
12310 if(!VOS_IS_STATUS_SUCCESS(status))
12311 {
12312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12313 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012314 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012315 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
12316 after the packet gets completed(packet freed once)*/
12317
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070012318 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Katya Nigam53677462014-08-04 11:37:28 +053012319 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070012320
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012321 /*Tag Frame as timed out for later deletion*/
12322 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
12323 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
12324
Jeff Johnson295189b2012-06-20 16:38:30 -070012325 /* check whether the packet was freed already,so need not free again when
12326 * TL calls the WDA_Txcomplete routine
12327 */
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012328 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED);
12329 /*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 -070012330 {
12331 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012332 } */
12333
Jeff Johnson295189b2012-06-20 16:38:30 -070012334 if( pAckTxComp )
12335 {
12336 pWDA->pAckTxCbFunc = NULL;
12337 if( VOS_STATUS_SUCCESS !=
12338 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12339 {
12340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12341 "Tx Complete timeout Timer Stop Failed ");
12342 }
12343 }
12344 status = VOS_STATUS_E_FAILURE;
12345 }
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053012346#ifdef WLAN_DUMP_MGMTFRAMES
12347 if (VOS_IS_STATUS_SUCCESS(status))
12348 {
12349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12350 "%s() TX packet : SubType %d", __func__,pFc->subType);
12351 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12352 pData, frmLen);
12353 }
12354#endif
12355
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080012356 if (VOS_IS_STATUS_SUCCESS(status))
12357 {
12358 if (pMac->fEnableDebugLog & 0x1)
12359 {
12360 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
12361 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
12362 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
12363 {
12364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
12365 pFc->type, pFc->subType);
12366 }
12367 }
12368 }
12369
12370
Jeff Johnson295189b2012-06-20 16:38:30 -070012371 return status;
12372}
Jeff Johnson295189b2012-06-20 16:38:30 -070012373/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012374 * FUNCTION: WDA_ProcessDHCPStartInd
12375 * Forward DHCP Start to WDI
12376 */
12377static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
12378 tAniDHCPInd *dhcpStartInd)
12379{
12380 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053012381 WDI_DHCPInd wdiDHCPInd;
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012382
c_hpothu0b0cab72014-02-13 21:52:40 +053012383 wdiDHCPInd.device_mode = dhcpStartInd->device_mode;
12384 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStartInd->macAddr,
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012385 sizeof(tSirMacAddr));
12386
c_hpothu0b0cab72014-02-13 21:52:40 +053012387 status = WDI_dhcpStartInd(&wdiDHCPInd);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012388
c_hpothu0b0cab72014-02-13 21:52:40 +053012389 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012390 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12392 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012393 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012394 else if (WDI_STATUS_SUCCESS_SYNC != status)
12395 {
12396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12397 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
12398 }
12399
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012400 vos_mem_free(dhcpStartInd);
12401 return CONVERT_WDI2VOS_STATUS(status) ;
12402}
12403
12404 /*
12405 * FUNCTION: WDA_ProcessDHCPStopInd
12406 * Forward DHCP Stop to WDI
12407 */
12408 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
12409 tAniDHCPInd *dhcpStopInd)
12410 {
12411 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053012412 WDI_DHCPInd wdiDHCPInd;
12413
12414 wdiDHCPInd.device_mode = dhcpStopInd->device_mode;
12415 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
12416
12417 status = WDI_dhcpStopInd(&wdiDHCPInd);
12418
12419 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012420 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12422 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012423 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012424 else if (WDI_STATUS_SUCCESS_SYNC != status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012425 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12427 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012428 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012429
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012430 vos_mem_free(dhcpStopInd);
c_hpothu0b0cab72014-02-13 21:52:40 +053012431
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012432 return CONVERT_WDI2VOS_STATUS(status) ;
12433 }
12434
12435/*
Siddharth Bhal171788a2014-09-29 21:02:40 +053012436 * FUNCTION: WDA_ProcessSetSpoofMacAddrReq
12437 *
12438 * DESCRIPTION: This function sends Spoof Mac Addr Req to WDI
12439 *
12440 * PARAM:
12441 * pWDA: pointer to WDA context
12442 * pReq: pointer to stop batch scan request
12443 */
12444VOS_STATUS WDA_ProcessSetSpoofMacAddrReq(tWDA_CbContext *pWDA,
12445 tpSpoofMacAddrReqParams pReq)
12446{
12447 WDI_Status wdiStatus;
12448 WDI_SpoofMacAddrInfoType *WDI_SpoofMacAddrInfoParams;
12449 tWDA_ReqParams *pWdaParams;
12450
12451 WDI_SpoofMacAddrInfoParams = (WDI_SpoofMacAddrInfoType *)vos_mem_malloc(
12452 sizeof(WDI_SpoofMacAddrInfoType));
12453 if(NULL == WDI_SpoofMacAddrInfoParams) {
12454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12455 "%s: VOS MEM Alloc Failure in Spoof Req", __func__);
12456 VOS_ASSERT(0);
12457 return VOS_STATUS_E_NOMEM;
12458 }
12459 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12460 if(NULL == pWdaParams) {
12461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12462 "%s: VOS MEM Alloc Failure", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +053012463 vos_mem_free(WDI_SpoofMacAddrInfoParams);
Siddharth Bhal171788a2014-09-29 21:02:40 +053012464 VOS_ASSERT(0);
12465 return VOS_STATUS_E_NOMEM;
12466 }
12467
12468 vos_mem_copy(WDI_SpoofMacAddrInfoParams->macAddr,
12469 pReq->macAddr, VOS_MAC_ADDRESS_LEN);
12470
12471 pWdaParams->pWdaContext = pWDA;
12472 /* Store Upper layer req pointer, as this will be used for response */
Siddharth Bhal029d6732014-10-09 21:31:23 +053012473 pWdaParams->wdaMsgParam = (void *)pReq;
12474
12475 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, WDA_MAC_ADDRESS_STR,
12476 WDA_MAC_ADDR_ARRAY(WDI_SpoofMacAddrInfoParams->macAddr));
12477
Siddharth Bhal171788a2014-09-29 21:02:40 +053012478 /* store Params pass it to WDI */
12479 pWdaParams->wdaWdiApiMsgParam = (void *)WDI_SpoofMacAddrInfoParams ;
12480
12481 wdiStatus = WDI_SetSpoofMacAddrReq(WDI_SpoofMacAddrInfoParams,
Siddharth Bhal029d6732014-10-09 21:31:23 +053012482 (WDI_SetSpoofMacAddrRspCb) WDA_SpoofMacAddrRspCallback,
12483 pWdaParams );
Siddharth Bhal171788a2014-09-29 21:02:40 +053012484
12485 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12486 {
12487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12488 "Failure in SetSpoofMacAddrReq Params WDI API, free all the memory " );
12489 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12490 vos_mem_free(pWdaParams->wdaMsgParam);
12491 vos_mem_free(pWdaParams);
12492 }
12493
12494 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
12495}
12496
12497/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012498 * FUNCTION: WDA_McProcessMsg
12499 * Trigger DAL-AL to start CFG download
12500 */
12501VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
12502{
12503 VOS_STATUS status = VOS_STATUS_SUCCESS;
12504 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012505 if(NULL == pMsg)
12506 {
12507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012508 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012509 VOS_ASSERT(0);
12510 return VOS_STATUS_E_FAILURE;
12511 }
12512
12513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012514 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070012515
12516 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
12517 if(NULL == pWDA )
12518 {
12519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012520 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012521 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070012522 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012523 return VOS_STATUS_E_FAILURE;
12524 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012525 /* Process all the WDA messages.. */
12526 switch( pMsg->type )
12527 {
12528 case WNI_CFG_DNLD_REQ:
12529 {
12530 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070012531 /* call WDA complete event if config download success */
12532 if( VOS_IS_STATUS_SUCCESS(status) )
12533 {
12534 vos_WDAComplete_cback(pVosContext);
12535 }
12536 else
12537 {
12538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12539 "WDA Config Download failure" );
12540 }
12541 break ;
12542 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012543 /*
12544 * Init SCAN request from PE, convert it into DAL format
12545 * and send it to DAL
12546 */
12547 case WDA_INIT_SCAN_REQ:
12548 {
12549 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
12550 break ;
12551 }
12552 /* start SCAN request from PE */
12553 case WDA_START_SCAN_REQ:
12554 {
12555 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
12556 break ;
12557 }
12558 /* end SCAN request from PE */
12559 case WDA_END_SCAN_REQ:
12560 {
12561 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
12562 break ;
12563 }
12564 /* end SCAN request from PE */
12565 case WDA_FINISH_SCAN_REQ:
12566 {
12567 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
12568 break ;
12569 }
12570 /* join request from PE */
12571 case WDA_CHNL_SWITCH_REQ:
12572 {
12573 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
12574 {
12575 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
12576 }
12577 else
12578 {
Kalikinkar dhara1e83b772014-02-06 12:59:22 -080012579 if (IS_FEATURE_SUPPORTED_BY_FW(CH_SWITCH_V1) &&
12580 eHAL_CHANNEL_SWITCH_SOURCE_CSA ==
12581 ((tSwitchChannelParams*)pMsg->bodyptr)->channelSwitchSrc )
12582 {
12583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12584 "call ProcessChannelSwitchReq_V1" );
12585 WDA_ProcessChannelSwitchReq_V1(pWDA,
12586 (tSwitchChannelParams*)pMsg->bodyptr) ;
12587 }
12588 else
12589 {
12590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12591 "call ProcessChannelSwitchReq" );
12592 WDA_ProcessChannelSwitchReq(pWDA,
12593 (tSwitchChannelParams*)pMsg->bodyptr) ;
12594 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012595 }
12596 break ;
12597 }
12598 /* ADD BSS request from PE */
12599 case WDA_ADD_BSS_REQ:
12600 {
12601 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
12602 break ;
12603 }
12604 case WDA_ADD_STA_REQ:
12605 {
12606 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
12607 break ;
12608 }
12609 case WDA_DELETE_BSS_REQ:
12610 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012611 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
12612 break ;
12613 }
12614 case WDA_DELETE_STA_REQ:
12615 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012616 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
12617 break ;
12618 }
12619 case WDA_CONFIG_PARAM_UPDATE_REQ:
12620 {
12621 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
12622 break ;
12623 }
12624 case WDA_SET_BSSKEY_REQ:
12625 {
12626 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
12627 break ;
12628 }
12629 case WDA_SET_STAKEY_REQ:
12630 {
12631 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
12632 break ;
12633 }
12634 case WDA_SET_STA_BCASTKEY_REQ:
12635 {
12636 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
12637 break ;
12638 }
12639 case WDA_REMOVE_BSSKEY_REQ:
12640 {
12641 WDA_ProcessRemoveBssKeyReq(pWDA,
12642 (tRemoveBssKeyParams *)pMsg->bodyptr);
12643 break ;
12644 }
12645 case WDA_REMOVE_STAKEY_REQ:
12646 {
12647 WDA_ProcessRemoveStaKeyReq(pWDA,
12648 (tRemoveStaKeyParams *)pMsg->bodyptr);
12649 break ;
12650 }
12651 case WDA_REMOVE_STA_BCASTKEY_REQ:
12652 {
12653 /* TODO: currently UMAC is not sending this request, Add the code for
12654 handling this request when UMAC supports */
12655 break;
12656 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012657#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -070012658 case WDA_TSM_STATS_REQ:
12659 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070012660 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012661 break;
12662 }
12663#endif
12664 case WDA_UPDATE_EDCA_PROFILE_IND:
12665 {
12666 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
12667 break;
12668 }
12669 case WDA_ADD_TS_REQ:
12670 {
12671 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
12672 break;
12673 }
12674 case WDA_DEL_TS_REQ:
12675 {
12676 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
12677 break;
12678 }
12679 case WDA_ADDBA_REQ:
12680 {
12681 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
12682 break;
12683 }
12684 case WDA_DELBA_IND:
12685 {
12686 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
12687 break;
12688 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080012689 case WDA_UPDATE_CHAN_LIST_REQ:
12690 {
12691 WDA_ProcessUpdateChannelList(pWDA,
12692 (tSirUpdateChanList *)pMsg->bodyptr);
12693 break;
12694 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012695 case WDA_SET_LINK_STATE:
12696 {
12697 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
12698 break;
12699 }
12700 case WDA_GET_STATISTICS_REQ:
12701 {
12702 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
12703 break;
12704 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012705#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080012706 case WDA_GET_ROAM_RSSI_REQ:
12707 {
12708 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
12709 break;
12710 }
12711#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012712 case WDA_PWR_SAVE_CFG:
12713 {
12714 if(pWDA->wdaState == WDA_READY_STATE)
12715 {
12716 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
12717 }
12718 else
12719 {
12720 if(NULL != pMsg->bodyptr)
12721 {
12722 vos_mem_free(pMsg->bodyptr);
12723 }
12724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12725 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
12726 }
12727 break;
12728 }
12729 case WDA_ENTER_IMPS_REQ:
12730 {
12731 if(pWDA->wdaState == WDA_READY_STATE)
12732 {
12733 WDA_ProcessEnterImpsReq(pWDA);
12734 }
12735 else
12736 {
12737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12738 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
12739 }
12740 break;
12741 }
12742 case WDA_EXIT_IMPS_REQ:
12743 {
12744 if(pWDA->wdaState == WDA_READY_STATE)
12745 {
12746 WDA_ProcessExitImpsReq(pWDA);
12747 }
12748 else
12749 {
12750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12751 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
12752 }
12753 break;
12754 }
12755 case WDA_ENTER_BMPS_REQ:
12756 {
12757 if(pWDA->wdaState == WDA_READY_STATE)
12758 {
12759 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
12760 }
12761 else
12762 {
12763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12764 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
12765 }
12766 break;
12767 }
12768 case WDA_EXIT_BMPS_REQ:
12769 {
12770 if(pWDA->wdaState == WDA_READY_STATE)
12771 {
12772 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
12773 }
12774 else
12775 {
12776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12777 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
12778 }
12779 break;
12780 }
12781 case WDA_ENTER_UAPSD_REQ:
12782 {
12783 if(pWDA->wdaState == WDA_READY_STATE)
12784 {
12785 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
12786 }
12787 else
12788 {
12789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12790 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
12791 }
12792 break;
12793 }
12794 case WDA_EXIT_UAPSD_REQ:
12795 {
12796 if(pWDA->wdaState == WDA_READY_STATE)
12797 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012798 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012799 }
12800 else
12801 {
12802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12803 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
12804 }
12805 break;
12806 }
12807 case WDA_UPDATE_UAPSD_IND:
12808 {
12809 if(pWDA->wdaState == WDA_READY_STATE)
12810 {
12811 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
12812 }
12813 else
12814 {
12815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12816 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
12817 }
12818 break;
12819 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012820 case WDA_REGISTER_PE_CALLBACK :
12821 {
12822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12823 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
12824 /*TODO: store the PE callback */
12825 /* Do Nothing? MSG Body should be freed at here */
12826 if(NULL != pMsg->bodyptr)
12827 {
12828 vos_mem_free(pMsg->bodyptr);
12829 }
12830 break;
12831 }
12832 case WDA_SYS_READY_IND :
12833 {
12834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12835 "Handling msg type WDA_SYS_READY_IND " );
12836 pWDA->wdaState = WDA_READY_STATE;
12837 if(NULL != pMsg->bodyptr)
12838 {
12839 vos_mem_free(pMsg->bodyptr);
12840 }
12841 break;
12842 }
12843 case WDA_BEACON_FILTER_IND :
12844 {
12845 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
12846 break;
12847 }
12848 case WDA_BTC_SET_CFG:
12849 {
12850 /*TODO: handle this while dealing with BTC */
12851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12852 "Handling msg type WDA_BTC_SET_CFG " );
12853 /* Do Nothing? MSG Body should be freed at here */
12854 if(NULL != pMsg->bodyptr)
12855 {
12856 vos_mem_free(pMsg->bodyptr);
12857 }
12858 break;
12859 }
12860 case WDA_SIGNAL_BT_EVENT:
12861 {
12862 /*TODO: handle this while dealing with BTC */
12863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12864 "Handling msg type WDA_SIGNAL_BT_EVENT " );
12865 /* Do Nothing? MSG Body should be freed at here */
12866 if(NULL != pMsg->bodyptr)
12867 {
12868 vos_mem_free(pMsg->bodyptr);
12869 }
12870 break;
12871 }
12872 case WDA_CFG_RXP_FILTER_REQ:
12873 {
12874 WDA_ProcessConfigureRxpFilterReq(pWDA,
12875 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
12876 break;
12877 }
12878 case WDA_SET_HOST_OFFLOAD:
12879 {
12880 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
12881 break;
12882 }
12883 case WDA_SET_KEEP_ALIVE:
12884 {
12885 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
12886 break;
12887 }
12888#ifdef WLAN_NS_OFFLOAD
12889 case WDA_SET_NS_OFFLOAD:
12890 {
12891 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
12892 break;
12893 }
12894#endif //WLAN_NS_OFFLOAD
12895 case WDA_ADD_STA_SELF_REQ:
12896 {
12897 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
12898 break;
12899 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012900 case WDA_DEL_STA_SELF_REQ:
12901 {
12902 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
12903 break;
12904 }
12905 case WDA_WOWL_ADD_BCAST_PTRN:
12906 {
12907 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
12908 break;
12909 }
12910 case WDA_WOWL_DEL_BCAST_PTRN:
12911 {
12912 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
12913 break;
12914 }
12915 case WDA_WOWL_ENTER_REQ:
12916 {
12917 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
12918 break;
12919 }
12920 case WDA_WOWL_EXIT_REQ:
12921 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012922 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012923 break;
12924 }
12925 case WDA_TL_FLUSH_AC_REQ:
12926 {
12927 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
12928 break;
12929 }
12930 case WDA_SIGNAL_BTAMP_EVENT:
12931 {
12932 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
12933 break;
12934 }
Sunil Duttbd736ed2014-05-26 21:19:41 +053012935#ifdef WLAN_FEATURE_LINK_LAYER_STATS
12936 case WDA_LINK_LAYER_STATS_SET_REQ:
12937 {
12938 WDA_ProcessLLStatsSetReq(pWDA, (tSirLLStatsSetReq *)pMsg->bodyptr);
12939 break;
12940 }
12941 case WDA_LINK_LAYER_STATS_GET_REQ:
12942 {
12943 WDA_ProcessLLStatsGetReq(pWDA, (tSirLLStatsGetReq *)pMsg->bodyptr);
12944 break;
12945 }
12946 case WDA_LINK_LAYER_STATS_CLEAR_REQ:
12947 {
12948 WDA_ProcessLLStatsClearReq(pWDA, (tSirLLStatsClearReq *)pMsg->bodyptr);
12949 break;
12950 }
12951#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Dino Mycle41bdc942014-06-10 11:30:24 +053012952#ifdef WLAN_FEATURE_EXTSCAN
12953 case WDA_EXTSCAN_GET_CAPABILITIES_REQ:
12954 {
12955 WDA_ProcessEXTScanGetCapabilitiesReq(pWDA,
12956 (tSirGetEXTScanCapabilitiesReqParams *)pMsg->bodyptr);
12957 break;
12958 }
12959 case WDA_EXTSCAN_START_REQ:
12960 {
12961 WDA_ProcessEXTScanStartReq(pWDA,
12962 (tSirEXTScanStartReqParams *)pMsg->bodyptr);
12963 break;
12964 }
12965 case WDA_EXTSCAN_STOP_REQ:
12966 {
12967 WDA_ProcessEXTScanStopReq(pWDA,
12968 (tSirEXTScanStopReqParams *)pMsg->bodyptr);
12969 break;
12970 }
12971 case WDA_EXTSCAN_GET_CACHED_RESULTS_REQ:
12972 {
12973 WDA_ProcessEXTScanGetCachedResultsReq(pWDA,
12974 (tSirEXTScanGetCachedResultsReqParams *)pMsg->bodyptr);
12975 break;
12976 }
12977 case WDA_EXTSCAN_SET_BSSID_HOTLIST_REQ:
12978 {
12979 WDA_ProcessEXTScanSetBSSIDHotlistReq(pWDA,
12980 (tSirEXTScanSetBssidHotListReqParams *)pMsg->bodyptr);
12981 break;
12982 }
12983 case WDA_EXTSCAN_RESET_BSSID_HOTLIST_REQ:
12984 {
12985 WDA_ProcessEXTScanResetBSSIDHotlistReq(pWDA,
12986 (tSirEXTScanResetBssidHotlistReqParams *)pMsg->bodyptr);
12987 break;
12988 }
12989 case WDA_EXTSCAN_SET_SIGNF_RSSI_CHANGE_REQ:
12990 {
12991 WDA_ProcessEXTScanSetSignfRSSIChangeReq(pWDA,
12992 (tSirEXTScanSetSignificantChangeReqParams *)pMsg->bodyptr);
12993 break;
12994 }
12995 case WDA_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_REQ:
12996 {
12997 WDA_ProcessEXTScanResetSignfRSSIChangeReq(pWDA,
12998 (tSirEXTScanResetSignificantChangeReqParams *)pMsg->bodyptr);
12999 break;
13000 }
13001#endif /* WLAN_FEATURE_EXTSCAN */
Jeff Johnson295189b2012-06-20 16:38:30 -070013002#ifdef WDA_UT
13003 case WDA_WDI_EVENT_MSG:
13004 {
13005 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
13006 break ;
13007 }
13008#endif
13009 case WDA_UPDATE_BEACON_IND:
13010 {
13011 WDA_ProcessUpdateBeaconParams(pWDA,
13012 (tUpdateBeaconParams *)pMsg->bodyptr);
13013 break;
13014 }
13015 case WDA_SEND_BEACON_REQ:
13016 {
13017 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
13018 break;
13019 }
13020 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
13021 {
13022 WDA_ProcessUpdateProbeRspTemplate(pWDA,
13023 (tSendProbeRespParams *)pMsg->bodyptr);
13024 break;
13025 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013026#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -070013027 case WDA_SET_MAX_TX_POWER_REQ:
13028 {
13029 WDA_ProcessSetMaxTxPowerReq(pWDA,
13030 (tMaxTxPowerParams *)pMsg->bodyptr);
13031 break;
13032 }
13033#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070013034 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
13035 {
13036 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
13037 pMsg->bodyptr);
13038 break;
13039 }
schang86c22c42013-03-13 18:41:24 -070013040 case WDA_SET_TX_POWER_REQ:
13041 {
13042 WDA_ProcessSetTxPowerReq(pWDA,
13043 (tSirSetTxPowerReq *)pMsg->bodyptr);
13044 break;
13045 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013046 case WDA_SET_P2P_GO_NOA_REQ:
13047 {
13048 WDA_ProcessSetP2PGONOAReq(pWDA,
13049 (tP2pPsParams *)pMsg->bodyptr);
13050 break;
13051 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013052 /* timer related messages */
13053 case WDA_TIMER_BA_ACTIVITY_REQ:
13054 {
13055 WDA_BaCheckActivity(pWDA) ;
13056 break ;
13057 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013058
13059 /* timer related messages */
13060 case WDA_TIMER_TRAFFIC_STATS_IND:
13061 {
13062 WDA_TimerTrafficStatsInd(pWDA);
13063 break;
13064 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013065#ifdef WLAN_FEATURE_VOWIFI_11R
13066 case WDA_AGGR_QOS_REQ:
13067 {
13068 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
13069 break;
13070 }
13071#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070013072 case WDA_FTM_CMD_REQ:
13073 {
13074 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
13075 break ;
13076 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013077#ifdef FEATURE_OEM_DATA_SUPPORT
13078 case WDA_START_OEM_DATA_REQ:
13079 {
13080 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
13081 break;
13082 }
13083#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070013084 /* Tx Complete Time out Indication */
13085 case WDA_TX_COMPLETE_TIMEOUT_IND:
13086 {
13087 WDA_ProcessTxCompleteTimeOutInd(pWDA);
13088 break;
13089 }
13090 case WDA_WLAN_SUSPEND_IND:
13091 {
13092 WDA_ProcessWlanSuspendInd(pWDA,
13093 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
13094 break;
13095 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013096 case WDA_WLAN_RESUME_REQ:
13097 {
13098 WDA_ProcessWlanResumeReq(pWDA,
13099 (tSirWlanResumeParam *)pMsg->bodyptr) ;
13100 break;
13101 }
13102
13103 case WDA_UPDATE_CF_IND:
13104 {
13105 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
13106 pMsg->bodyptr = NULL;
13107 break;
13108 }
13109#ifdef FEATURE_WLAN_SCAN_PNO
13110 case WDA_SET_PNO_REQ:
13111 {
13112 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
13113 break;
13114 }
13115 case WDA_UPDATE_SCAN_PARAMS_REQ:
13116 {
13117 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
13118 break;
13119 }
13120 case WDA_SET_RSSI_FILTER_REQ:
13121 {
13122 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
13123 break;
13124 }
13125#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013126#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013127 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013128 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013129 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013130 break;
13131 }
13132#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013133 case WDA_SET_TX_PER_TRACKING_REQ:
13134 {
13135 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
13136 break;
13137 }
13138
13139#ifdef WLAN_FEATURE_PACKET_FILTERING
13140 case WDA_8023_MULTICAST_LIST_REQ:
13141 {
13142 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
13143 break;
13144 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013145 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
13146 {
13147 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
13148 break;
13149 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013150 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
13151 {
13152 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
13153 break;
13154 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013155 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
13156 {
13157 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
13158 break;
13159 }
13160#endif // WLAN_FEATURE_PACKET_FILTERING
13161
13162
13163 case WDA_TRANSMISSION_CONTROL_IND:
13164 {
13165 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
13166 break;
13167 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013168 case WDA_SET_POWER_PARAMS_REQ:
13169 {
13170 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
13171 break;
13172 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013173#ifdef WLAN_FEATURE_GTK_OFFLOAD
13174 case WDA_GTK_OFFLOAD_REQ:
13175 {
13176 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
13177 break;
13178 }
13179
13180 case WDA_GTK_OFFLOAD_GETINFO_REQ:
13181 {
13182 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
13183 break;
13184 }
13185#endif //WLAN_FEATURE_GTK_OFFLOAD
13186
13187 case WDA_SET_TM_LEVEL_REQ:
13188 {
13189 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
13190 break;
13191 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053013192
Mohit Khanna4a70d262012-09-11 16:30:12 -070013193 case WDA_UPDATE_OP_MODE:
13194 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053013195 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
13196 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
13197 {
13198 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
13199 }
13200 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070013201 {
13202 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
13203 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
13204 else
13205 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013206 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070013207 }
13208 else
13209 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013210 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070013211 break;
13212 }
Chet Lanctot186b5732013-03-18 10:26:30 -070013213#ifdef WLAN_FEATURE_11W
13214 case WDA_EXCLUDE_UNENCRYPTED_IND:
13215 {
13216 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
13217 break;
13218 }
13219#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053013220#ifdef FEATURE_WLAN_TDLS
13221 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
13222 {
13223 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
13224 break;
13225 }
13226#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013227 case WDA_DHCP_START_IND:
13228 {
13229 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
13230 break;
13231 }
13232 case WDA_DHCP_STOP_IND:
13233 {
13234 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
13235 break;
13236 }
Leo Chang9056f462013-08-01 19:21:11 -070013237#ifdef FEATURE_WLAN_LPHB
13238 case WDA_LPHB_CONF_REQ:
13239 {
13240 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
13241 break;
13242 }
13243#endif
Yue Mab9c86f42013-08-14 15:59:08 -070013244 case WDA_ADD_PERIODIC_TX_PTRN_IND:
13245 {
13246 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
13247 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
13248 break;
13249 }
13250 case WDA_DEL_PERIODIC_TX_PTRN_IND:
13251 {
13252 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
13253 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
13254 break;
13255 }
13256
Rajeev79dbe4c2013-10-05 11:03:42 +053013257#ifdef FEATURE_WLAN_BATCH_SCAN
13258 case WDA_SET_BATCH_SCAN_REQ:
13259 {
13260 WDA_ProcessSetBatchScanReq(pWDA,
13261 (tSirSetBatchScanReq *)pMsg->bodyptr);
13262 break;
13263 }
Chittajit Mitraf5413a42013-10-18 14:20:08 -070013264 case WDA_RATE_UPDATE_IND:
13265 {
13266 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
13267 break;
13268 }
Rajeev79dbe4c2013-10-05 11:03:42 +053013269 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
13270 {
13271 WDA_ProcessTriggerBatchScanResultInd(pWDA,
13272 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
13273 break;
13274 }
13275 case WDA_STOP_BATCH_SCAN_IND:
13276 {
13277 WDA_ProcessStopBatchScanInd(pWDA,
13278 (tSirStopBatchScanInd *)pMsg->bodyptr);
13279 break;
13280 }
c_hpothu92367912014-05-01 15:18:17 +053013281 case WDA_GET_BCN_MISS_RATE_REQ:
13282 WDA_ProcessGetBcnMissRateReq(pWDA,
13283 (tSirBcnMissRateReq *)pMsg->bodyptr);
13284 break;
Rajeev79dbe4c2013-10-05 11:03:42 +053013285#endif
13286
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053013287 case WDA_HT40_OBSS_SCAN_IND:
13288 {
13289 WDA_ProcessHT40OBSSScanInd(pWDA,
13290 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
13291 break;
13292 }
13293 case WDA_HT40_OBSS_STOP_SCAN_IND:
13294 {
13295 WDA_ProcessHT40OBSSStopScanInd(pWDA,
13296 (tANI_U8*)pMsg->bodyptr);
13297 break;
13298 }
Atul Mittalc0f739f2014-07-31 13:47:47 +053013299// tdlsoffchan
13300#ifdef FEATURE_WLAN_TDLS
13301 case WDA_SET_TDLS_CHAN_SWITCH_REQ:
13302 {
13303 WDA_ProcessSetTdlsChanSwitchReq(pWDA, (tTdlsChanSwitchParams *)pMsg->bodyptr);
13304 break;
13305 }
13306#endif
Siddharth Bhal171788a2014-09-29 21:02:40 +053013307 case WDA_SPOOF_MAC_ADDR_REQ:
13308 {
13309 WDA_ProcessSetSpoofMacAddrReq(pWDA, (tpSpoofMacAddrReqParams)pMsg->bodyptr);
13310 break;
13311 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013312 default:
13313 {
Agarwal Ashishbf98caf2014-03-25 13:29:11 +053013314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070013315 "No Handling for msg type %x in WDA "
13316 ,pMsg->type);
13317 /* Do Nothing? MSG Body should be freed at here */
13318 if(NULL != pMsg->bodyptr)
13319 {
13320 vos_mem_free(pMsg->bodyptr);
13321 }
13322 //WDA_VOS_ASSERT(0) ;
13323 }
13324 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013325 return status ;
13326}
13327
Jeff Johnson295189b2012-06-20 16:38:30 -070013328/*
13329 * FUNCTION: WDA_LowLevelIndCallback
13330 * IND API callback from WDI, send Ind to PE
13331 */
13332void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
13333 void* pUserData )
13334{
13335 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
13336#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
13337 tSirRSSINotification rssiNotification;
13338#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013339 if(NULL == pWDA)
13340 {
13341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013342 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013343 VOS_ASSERT(0);
13344 return ;
13345 }
13346
13347 switch(wdiLowLevelInd->wdiIndicationType)
13348 {
13349 case WDI_RSSI_NOTIFICATION_IND:
13350 {
13351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13352 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013353#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
13354 rssiNotification.bReserved =
13355 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
13356 rssiNotification.bRssiThres1NegCross =
13357 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
13358 rssiNotification.bRssiThres1PosCross =
13359 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
13360 rssiNotification.bRssiThres2NegCross =
13361 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
13362 rssiNotification.bRssiThres2PosCross =
13363 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
13364 rssiNotification.bRssiThres3NegCross =
13365 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
13366 rssiNotification.bRssiThres3PosCross =
13367 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080013368 rssiNotification.avgRssi = (v_S7_t)
13369 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070013370 WLANTL_BMPSRSSIRegionChangedNotification(
13371 pWDA->pVosContext,
13372 &rssiNotification);
13373#endif
13374 break ;
13375 }
13376 case WDI_MISSED_BEACON_IND:
13377 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080013378 tpSirSmeMissedBeaconInd pMissBeacInd =
13379 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070013380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13381 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013382 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080013383 if(NULL == pMissBeacInd)
13384 {
13385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13386 "%s: VOS MEM Alloc Failure", __func__);
13387 break;
13388 }
13389 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
13390 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
13391 pMissBeacInd->bssIdx =
13392 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
13393 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013394 break ;
13395 }
13396 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
13397 {
13398 /* TODO: Decode Ind and send Ind to PE */
13399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13400 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
13401 break ;
13402 }
13403
13404 case WDI_MIC_FAILURE_IND:
13405 {
13406 tpSirSmeMicFailureInd pMicInd =
13407 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
13408
13409 if(NULL == pMicInd)
13410 {
13411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013412 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013413 break;
13414 }
13415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13416 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013417 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
13418 pMicInd->length = sizeof(tSirSmeMicFailureInd);
13419 vos_mem_copy(pMicInd->bssId,
13420 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
13421 sizeof(tSirMacAddr));
13422 vos_mem_copy(pMicInd->info.srcMacAddr,
13423 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
13424 sizeof(tSirMacAddr));
13425 vos_mem_copy(pMicInd->info.taMacAddr,
13426 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
13427 sizeof(tSirMacAddr));
13428 vos_mem_copy(pMicInd->info.dstMacAddr,
13429 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
13430 sizeof(tSirMacAddr));
13431 vos_mem_copy(pMicInd->info.rxMacAddr,
13432 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
13433 sizeof(tSirMacAddr));
13434 pMicInd->info.multicast =
13435 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
13436 pMicInd->info.keyId=
13437 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
13438 pMicInd->info.IV1=
13439 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
13440 vos_mem_copy(pMicInd->info.TSC,
13441 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070013442 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
13443 (void *)pMicInd , 0) ;
13444 break ;
13445 }
13446 case WDI_FATAL_ERROR_IND:
13447 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070013448 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070013449 /* TODO: Decode Ind and send Ind to PE */
13450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13451 "Received WDI_FATAL_ERROR_IND from WDI ");
13452 break ;
13453 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013454 case WDI_DEL_STA_IND:
13455 {
Jeff Johnson295189b2012-06-20 16:38:30 -070013456 tpDeleteStaContext pDelSTACtx =
13457 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
13458
13459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13460 "Received WDI_DEL_STA_IND from WDI ");
13461 if(NULL == pDelSTACtx)
13462 {
13463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013464 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013465 break;
13466 }
13467 vos_mem_copy(pDelSTACtx->addr2,
13468 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
13469 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013470 vos_mem_copy(pDelSTACtx->bssId,
13471 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
13472 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013473 pDelSTACtx->assocId =
13474 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
13475 pDelSTACtx->reasonCode =
13476 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
13477 pDelSTACtx->staId =
13478 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070013479 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
13480 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013481 break ;
13482 }
13483 case WDI_COEX_IND:
13484 {
13485 tANI_U32 index;
13486 vos_msg_t vosMsg;
13487 tSirSmeCoexInd *pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
13488 if(NULL == pSmeCoexInd)
13489 {
13490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013491 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013492 break;
13493 }
13494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13495 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013496 /* Message Header */
13497 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
13498 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070013499 /* Info from WDI Indication */
13500 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
13501 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
13502 {
13503 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
13504 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013505 /* VOS message wrapper */
13506 vosMsg.type = eWNI_SME_COEX_IND;
13507 vosMsg.bodyptr = (void *)pSmeCoexInd;
13508 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013509 /* Send message to SME */
13510 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13511 {
13512 /* free the mem and return */
13513 vos_mem_free((v_VOID_t *)pSmeCoexInd);
13514 }
13515 else
13516 {
13517 /* DEBUG */
13518 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13519 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
13520 pSmeCoexInd->coexIndType,
13521 pSmeCoexInd->coexIndData[0],
13522 pSmeCoexInd->coexIndData[1],
13523 pSmeCoexInd->coexIndData[2],
13524 pSmeCoexInd->coexIndData[3]);
13525 }
13526 break;
13527 }
13528 case WDI_TX_COMPLETE_IND:
13529 {
13530 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
13531 /* Calling TxCompleteAck Indication from wda context*/
13532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13533 "Complete Indication received from HAL");
13534 if( pWDA->pAckTxCbFunc )
13535 {
13536 if( VOS_STATUS_SUCCESS !=
13537 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
13538 {
13539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13540 "Tx Complete timeout Timer Stop Failed ");
13541 }
13542 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
13543 pWDA->pAckTxCbFunc = NULL;
13544 }
13545 else
13546 {
13547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13548 "Tx Complete Indication is received after timeout ");
13549 }
13550 break;
13551 }
Viral Modid86bde22012-12-10 13:09:21 -080013552 case WDI_P2P_NOA_START_IND :
13553 {
13554 tSirP2PNoaStart *pP2pNoaStart =
13555 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
13556
13557 if (NULL == pP2pNoaStart)
13558 {
13559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13560 "Memory allocation failure, "
13561 "WDI_P2P_NOA_START_IND not forwarded");
13562 break;
13563 }
13564 pP2pNoaStart->status =
13565 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
13566 pP2pNoaStart->bssIdx =
13567 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
13568 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
13569 (void *)pP2pNoaStart , 0) ;
13570 break;
13571 }
13572
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053013573#ifdef FEATURE_WLAN_TDLS
13574 case WDI_TDLS_IND :
13575 {
13576 tSirTdlsInd *pTdlsInd =
13577 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
13578
13579 if (NULL == pTdlsInd)
13580 {
13581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13582 "Memory allocation failure, "
13583 "WDI_TDLS_IND not forwarded");
13584 break;
13585 }
13586 pTdlsInd->status =
13587 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
13588 pTdlsInd->assocId =
13589 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
13590 pTdlsInd->staIdx =
13591 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
13592 pTdlsInd->reasonCode =
13593 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
13594 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
13595 (void *)pTdlsInd , 0) ;
13596 break;
13597 }
13598#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013599 case WDI_P2P_NOA_ATTR_IND :
13600 {
13601 tSirP2PNoaAttr *pP2pNoaAttr =
13602 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13604 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070013605 if (NULL == pP2pNoaAttr)
13606 {
13607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13608 "Memory allocation failure, "
13609 "WDI_P2P_NOA_ATTR_IND not forwarded");
13610 break;
13611 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013612 pP2pNoaAttr->index =
13613 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
13614 pP2pNoaAttr->oppPsFlag =
13615 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
13616 pP2pNoaAttr->ctWin =
13617 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
13618
13619 pP2pNoaAttr->uNoa1IntervalCnt =
13620 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
13621 pP2pNoaAttr->uNoa1Duration =
13622 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
13623 pP2pNoaAttr->uNoa1Interval =
13624 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
13625 pP2pNoaAttr->uNoa1StartTime =
13626 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070013627 pP2pNoaAttr->uNoa2IntervalCnt =
13628 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
13629 pP2pNoaAttr->uNoa2Duration =
13630 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
13631 pP2pNoaAttr->uNoa2Interval =
13632 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
13633 pP2pNoaAttr->uNoa2StartTime =
13634 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070013635 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
13636 (void *)pP2pNoaAttr , 0) ;
13637 break;
13638 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013639#ifdef FEATURE_WLAN_SCAN_PNO
13640 case WDI_PREF_NETWORK_FOUND_IND:
13641 {
13642 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070013643 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
13644 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
13645 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
13646 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
13647
Jeff Johnson295189b2012-06-20 16:38:30 -070013648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13649 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070013650 if (NULL == pPrefNetworkFoundInd)
13651 {
13652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13653 "Memory allocation failure, "
13654 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053013655 if (NULL !=
13656 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
13657 {
13658 wpalMemoryFree(
13659 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
13660 );
13661 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
13662 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013663 break;
13664 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013665 /* Message Header */
13666 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070013667 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070013668
13669 /* Info from WDI Indication */
13670 pPrefNetworkFoundInd->ssId.length =
13671 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070013672 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070013673 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
13674 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
13675 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070013676 if (NULL !=
13677 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
13678 {
13679 pPrefNetworkFoundInd->frameLength =
13680 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
13681 vos_mem_copy( pPrefNetworkFoundInd->data,
13682 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
13683 pPrefNetworkFoundInd->frameLength);
13684 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
13685 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
13686 }
13687 else
13688 {
13689 pPrefNetworkFoundInd->frameLength = 0;
13690 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013691 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070013692 /* VOS message wrapper */
13693 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
13694 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
13695 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013696 /* Send message to SME */
13697 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13698 {
13699 /* free the mem and return */
13700 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
13701 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013702 break;
13703 }
13704#endif // FEATURE_WLAN_SCAN_PNO
13705
13706#ifdef WLAN_WAKEUP_EVENTS
13707 case WDI_WAKE_REASON_IND:
13708 {
13709 vos_msg_t vosMsg;
13710 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
13711 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
13712 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
13713
13714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Sushant Kaushik1b645382014-10-13 16:39:36 +053013715 "[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 -070013716 wdiLowLevelInd->wdiIndicationType,
13717 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
13718 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
13719 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
13720
13721 if (NULL == pWakeReasonInd)
13722 {
13723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13724 "Memory allocation failure, "
13725 "WDI_WAKE_REASON_IND not forwarded");
13726 break;
13727 }
13728
13729 vos_mem_zero(pWakeReasonInd, allocSize);
13730
13731 /* Message Header */
13732 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
13733 pWakeReasonInd->mesgLen = allocSize;
13734
13735 /* Info from WDI Indication */
13736 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
13737 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
13738 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
13739 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
13740 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
13741 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
13742 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
13743 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
13744
13745 /* VOS message wrapper */
13746 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
13747 vosMsg.bodyptr = (void *) pWakeReasonInd;
13748 vosMsg.bodyval = 0;
13749
13750 /* Send message to SME */
13751 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13752 {
13753 /* free the mem and return */
13754 vos_mem_free((v_VOID_t *) pWakeReasonInd);
13755 }
13756
13757 break;
13758 }
13759#endif // WLAN_WAKEUP_EVENTS
13760
13761 case WDI_TX_PER_HIT_IND:
13762 {
13763 vos_msg_t vosMsg;
13764 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
13765 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
13766 /* VOS message wrapper */
13767 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
13768 vosMsg.bodyptr = NULL;
13769 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013770 /* Send message to SME */
13771 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13772 {
13773 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
13774 }
13775 break;
13776 }
13777
Leo Chang9056f462013-08-01 19:21:11 -070013778#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070013779 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070013780 {
Leo Changd9df8aa2013-09-26 13:32:26 -070013781 vos_msg_t vosMsg;
13782 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070013783
Leo Changd9df8aa2013-09-26 13:32:26 -070013784 lphbInd =
13785 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
13786 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070013787 {
13788 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13789 "%s: LPHB IND buffer alloc Fail", __func__);
13790 return ;
13791 }
13792
Leo Changd9df8aa2013-09-26 13:32:26 -070013793 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070013794 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070013795 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070013796 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070013797 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070013798 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
13799
13800 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070013801 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070013802 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
13803
Leo Changd9df8aa2013-09-26 13:32:26 -070013804 vosMsg.type = eWNI_SME_LPHB_IND;
13805 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070013806 vosMsg.bodyval = 0;
13807 /* Send message to SME */
13808 if (VOS_STATUS_SUCCESS !=
13809 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13810 {
13811 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13812 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070013813 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070013814 }
13815 break;
13816 }
13817#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070013818 case WDI_PERIODIC_TX_PTRN_FW_IND:
13819 {
13820 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13821 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
13822 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
13823 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
13824 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
13825 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
13826 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
13827
13828 break;
13829 }
Leo Chang9056f462013-08-01 19:21:11 -070013830
Ravi Joshid2ca7c42013-07-23 08:37:49 -070013831 case WDI_IBSS_PEER_INACTIVITY_IND:
13832 {
13833 tSirIbssPeerInactivityInd *pIbssInd =
13834 (tSirIbssPeerInactivityInd *)
13835 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
13836
13837 if (NULL == pIbssInd)
13838 {
13839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13840 "Memory allocation failure, "
13841 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
13842 break;
13843 }
13844
13845 pIbssInd->bssIdx =
13846 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
13847 pIbssInd->staIdx =
13848 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
13849 vos_mem_copy(pIbssInd->peerAddr,
13850 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
13851 sizeof(tSirMacAddr));
13852 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
13853 break;
13854 }
13855
Rajeev79dbe4c2013-10-05 11:03:42 +053013856#ifdef FEATURE_WLAN_BATCH_SCAN
13857 case WDI_BATCH_SCAN_RESULT_IND:
13858 {
13859 void *pBatchScanResult;
13860 void *pCallbackContext;
13861 tpAniSirGlobal pMac;
13862
13863 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13864 "Received WDI_BATCHSCAN_RESULT_IND from FW");
13865
13866 /*sanity check*/
Sunil Duttbd736ed2014-05-26 21:19:41 +053013867 if (NULL == pWDA)
Rajeev79dbe4c2013-10-05 11:03:42 +053013868 {
13869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13870 "%s:pWDA is NULL", __func__);
13871 VOS_ASSERT(0);
13872 return;
13873 }
13874
13875 pBatchScanResult =
13876 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
13877 if (NULL == pBatchScanResult)
13878 {
13879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13880 "%s:Batch scan result from FW is null can't invoke HDD callback",
13881 __func__);
13882 VOS_ASSERT(0);
13883 return;
13884 }
13885
13886 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13887 if (NULL == pMac)
13888 {
13889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13890 "%s:pMac is NULL", __func__);
13891 VOS_ASSERT(0);
13892 return;
13893 }
13894
13895 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
13896 /*call hdd callback with set batch scan response data*/
13897 if(pMac->pmc.batchScanResultCallback)
13898 {
13899 pMac->pmc.batchScanResultCallback(pCallbackContext,
13900 pBatchScanResult);
13901 }
13902 else
13903 {
13904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13905 "%s:HDD callback is null", __func__);
13906 VOS_ASSERT(0);
13907 }
13908 break;
13909 }
13910#endif
13911
Leo Chang0b0e45a2013-12-15 15:18:55 -080013912#ifdef FEATURE_WLAN_CH_AVOID
13913 case WDI_CH_AVOID_IND:
13914 {
13915 vos_msg_t vosMsg;
13916 tSirChAvoidIndType *chAvoidInd;
13917
13918 chAvoidInd =
13919 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
13920 if (NULL == chAvoidInd)
13921 {
13922 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13923 "%s: CH_AVOID IND buffer alloc Fail", __func__);
13924 return ;
13925 }
13926
13927 chAvoidInd->avoidRangeCount =
13928 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
13929 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
13930 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
13931 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
13932
13933 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13934 "%s : WDA CH avoid notification", __func__);
13935
13936 vosMsg.type = eWNI_SME_CH_AVOID_IND;
13937 vosMsg.bodyptr = chAvoidInd;
13938 vosMsg.bodyval = 0;
13939 /* Send message to SME */
13940 if (VOS_STATUS_SUCCESS !=
13941 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13942 {
13943 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13944 "post eWNI_SME_CH_AVOID_IND to SME Failed");
13945 vos_mem_free(chAvoidInd);
13946 }
13947 break;
13948 }
13949#endif /* FEATURE_WLAN_CH_AVOID */
13950
Sunil Duttbd736ed2014-05-26 21:19:41 +053013951#ifdef WLAN_FEATURE_LINK_LAYER_STATS
13952 case WDI_LL_STATS_RESULTS_IND:
13953 {
13954 void *pLinkLayerStatsInd;
Sunil Duttbd736ed2014-05-26 21:19:41 +053013955 tpAniSirGlobal pMac;
13956
13957 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13958 "Received WDI_LL_STATS_RESULTS_IND from FW");
13959
13960 /*sanity check*/
13961 if (NULL == pWDA)
13962 {
13963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13964 "%s:pWDA is NULL", __func__);
13965 VOS_ASSERT(0);
13966 return;
13967 }
13968
13969 pLinkLayerStatsInd =
Dino Mycled3d50022014-07-07 12:58:25 +053013970 (void *)wdiLowLevelInd->
13971 wdiIndicationData.wdiLinkLayerStatsResults.pLinkLayerStatsResults;
Sunil Duttbd736ed2014-05-26 21:19:41 +053013972 if (NULL == pLinkLayerStatsInd)
13973 {
13974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13975 "%s:Link Layer Statistics from FW is null can't invoke HDD callback",
13976 __func__);
13977 VOS_ASSERT(0);
13978 return;
13979 }
13980
13981 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13982 if (NULL == pMac)
13983 {
13984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13985 "%s:pMac is NULL", __func__);
13986 VOS_ASSERT(0);
13987 return;
13988 }
13989
Dino Mycled3d50022014-07-07 12:58:25 +053013990 /* call hdd callback with Link Layer Statistics.
13991 * vdev_id/ifacId in link_stats_results will be
13992 * used to retrieve the correct HDD context
13993 */
Sunil Duttbd736ed2014-05-26 21:19:41 +053013994 if (pMac->sme.pLinkLayerStatsIndCallback)
13995 {
Dino Mycled3d50022014-07-07 12:58:25 +053013996 pMac->sme.pLinkLayerStatsIndCallback(pMac->pAdapter,
Sunil Duttbd736ed2014-05-26 21:19:41 +053013997 WDA_LINK_LAYER_STATS_RESULTS_RSP,
Dino Mycled3d50022014-07-07 12:58:25 +053013998 pLinkLayerStatsInd,
13999 wdiLowLevelInd->
14000 wdiIndicationData.wdiLinkLayerStatsResults.macAddr);
Sunil Duttbd736ed2014-05-26 21:19:41 +053014001 }
14002 else
14003 {
14004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14005 "%s:HDD callback is null", __func__);
14006 }
14007 break;
14008 }
14009#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
14010
Dino Mycle41bdc942014-06-10 11:30:24 +053014011#ifdef WLAN_FEATURE_EXTSCAN
14012 case WDI_EXTSCAN_PROGRESS_IND:
14013 case WDI_EXTSCAN_SCAN_AVAILABLE_IND:
14014 case WDI_EXTSCAN_SCAN_RESULT_IND:
14015 case WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND:
14016 case WDI_EXTSCAN_SIGN_RSSI_RESULT_IND:
14017 {
14018 void *pEXTScanData;
14019 void *pCallbackContext;
14020 tpAniSirGlobal pMac;
14021 tANI_U16 indType;
14022
14023 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14024 "Received WDI_EXTSCAN Indications from FW");
14025 /*sanity check*/
14026 if (NULL == pWDA)
14027 {
14028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14029 "%s:pWDA is NULL", __func__);
14030 VOS_ASSERT(0);
14031 return;
14032 }
14033 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_PROGRESS_IND)
14034 {
14035 indType = WDA_EXTSCAN_PROGRESS_IND;
14036
14037 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14038 "WDI_EXTSCAN Indication is WDI_EXTSCAN_PROGRESS_IND");
14039 }
14040 if (wdiLowLevelInd->wdiIndicationType ==
14041 WDI_EXTSCAN_SCAN_AVAILABLE_IND)
14042 {
14043 indType = WDA_EXTSCAN_SCAN_AVAILABLE_IND;
14044
14045 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14046 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_AVAILABLE_IND");
14047 }
14048 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_SCAN_RESULT_IND)
14049 {
14050 indType = WDA_EXTSCAN_SCAN_RESULT_IND;
14051
14052 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14053 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_RESULT_IND");
14054 }
14055 if (wdiLowLevelInd->wdiIndicationType ==
14056 WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND)
14057 {
14058 indType = WDA_EXTSCAN_BSSID_HOTLIST_RESULT_IND;
14059
14060 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14061 "WDI_EXTSCAN Indication is WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND");
14062 }
14063 if (wdiLowLevelInd->wdiIndicationType ==
14064 WDI_EXTSCAN_SIGN_RSSI_RESULT_IND)
14065 {
14066 indType = WDA_EXTSCAN_SIGNF_RSSI_RESULT_IND;
14067
14068 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14069 "WDI_EXTSCAN Indication is WDA_EXTSCAN_SIGNF_RSSI_RESULT_IND");
14070 }
14071
14072 pEXTScanData =
14073 (void *)wdiLowLevelInd->wdiIndicationData.pEXTScanIndData;
14074 if (NULL == pEXTScanData)
14075 {
14076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14077 "%s: EXTSCAN Indication Data is null, can't invoke HDD callback",
14078 __func__);
14079 VOS_ASSERT(0);
14080 return;
14081 }
14082
14083 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14084 if (NULL == pMac)
14085 {
14086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14087 "%s:pMac is NULL", __func__);
14088 VOS_ASSERT(0);
14089 return;
14090 }
14091
14092 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
14093
14094 if(pMac->sme.pEXTScanIndCb)
14095 {
14096 pMac->sme.pEXTScanIndCb(pCallbackContext,
14097 indType,
14098 pEXTScanData);
14099 }
14100 else
14101 {
14102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14103 "%s:HDD callback is null", __func__);
14104 }
14105 break;
14106 }
14107#endif /* WLAN_FEATURE_EXTSCAN */
Abhishek Singh66c16762014-08-14 19:13:19 +053014108 case WDI_DEL_BA_IND:
14109 {
14110 tpBADeleteParams pDelBAInd =
14111 (tpBADeleteParams)vos_mem_malloc(sizeof(tpBADeleteParams));
14112
14113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14114 "Received WDI_DEL_BA_IND from WDI ");
14115 if(NULL == pDelBAInd)
14116 {
14117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14118 "%s: VOS MEM Alloc Failure", __func__);
14119 break;
14120 }
14121 vos_mem_copy(pDelBAInd->peerMacAddr,
14122 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.peerMacAddr,
14123 sizeof(tSirMacAddr));
14124 vos_mem_copy(pDelBAInd->bssId,
14125 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.bssId,
14126 sizeof(tSirMacAddr));
14127 pDelBAInd->staIdx =
14128 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.staIdx;
14129 pDelBAInd->baTID =
14130 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baTID;
14131 pDelBAInd->baDirection =
14132 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baDirection;
14133 pDelBAInd->reasonCode =
14134 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.reasonCode;
14135
14136 WDA_SendMsg(pWDA, SIR_LIM_DEL_BA_IND,
14137 (void *)pDelBAInd , 0) ;
14138 break;
14139 }
Dino Mycle41bdc942014-06-10 11:30:24 +053014140
Jeff Johnson295189b2012-06-20 16:38:30 -070014141 default:
14142 {
14143 /* TODO error */
14144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14145 "Received UNKNOWN Indication from WDI ");
14146 }
14147 }
14148 return ;
14149}
14150
Jeff Johnson295189b2012-06-20 16:38:30 -070014151/*
14152 * BA related processing in WDA.
14153 */
Jeff Johnson295189b2012-06-20 16:38:30 -070014154void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
14155 void* pUserData)
14156{
14157 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14158 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070014159 if(NULL == pWdaParams)
14160 {
14161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014162 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014163 VOS_ASSERT(0) ;
14164 return ;
14165 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014166 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070014167 vos_mem_free(pWdaParams->wdaMsgParam) ;
14168 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14169 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014171 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014172 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
14173 {
14174 tANI_U8 i = 0 ;
14175 tBaActivityInd *baActivityInd = NULL ;
14176 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
14177 tANI_U8 allocSize = sizeof(tBaActivityInd)
14178 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
14179 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
14180 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014181 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014182 if(NULL == baActivityInd)
14183 {
14184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014185 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014186 VOS_ASSERT(0) ;
14187 return;
14188 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014189 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
14190 sizeof(tSirMacAddr)) ;
14191 baActivityInd->baCandidateCnt = baCandidateCount ;
14192
14193 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
14194 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
14195
14196 for(i = 0 ; i < baCandidateCount ; i++)
14197 {
14198 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014199 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
14200 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014201 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
14202 {
14203 baCandidate->baInfo[tid].fBaEnable =
14204 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
14205 baCandidate->baInfo[tid].startingSeqNum =
14206 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
14207 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070014208 wdiBaCandidate++ ;
14209 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014210 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014211 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
14212 }
14213 else
14214 {
14215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14216 "BA Trigger RSP with Failure received ");
14217 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014218 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014219}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014220
14221
14222/*
14223 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
14224 * during MCC
14225 */
14226void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
14227{
14228 wpt_uint32 enabled;
14229 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
14230 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
14231 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
14232
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014233 if (NULL == pMac )
14234 {
14235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14236 "%s: Invoked with invalid MAC context ", __func__ );
14237 VOS_ASSERT(0);
14238 return;
14239 }
14240
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014241 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
14242 != eSIR_SUCCESS)
14243 {
14244 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14245 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
14246 return;
14247 }
14248
14249 if(!enabled)
14250 {
14251 return;
14252 }
14253
14254 if(NULL == pWDA)
14255 {
14256 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14257 "%s:WDA context is NULL", __func__);
14258 VOS_ASSERT(0);
14259 return;
14260 }
14261
14262 if(activate)
14263 {
14264 if( VOS_STATUS_SUCCESS !=
14265 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
14266 {
14267 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14268 "Traffic Stats Timer Start Failed ");
14269 return;
14270 }
14271 WDI_DS_ActivateTrafficStats();
14272 }
14273 else
14274 {
14275 WDI_DS_DeactivateTrafficStats();
14276 WDI_DS_ClearTrafficStats();
14277
14278 if( VOS_STATUS_SUCCESS !=
14279 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
14280 {
14281 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14282 "Traffic Stats Timer Stop Failed ");
14283 return;
14284 }
14285 }
14286}
14287
14288/*
14289 * Traffic Stats Timer handler
14290 */
14291void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
14292{
14293 WDI_Status wdiStatus;
14294 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
14295 WDI_TrafficStatsIndType trafficStatsIndParams;
14296 wpt_uint32 length, enabled;
14297 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14298
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014299 if (NULL == pMac )
14300 {
14301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14302 "%s: Invoked with invalid MAC context ", __func__ );
14303 VOS_ASSERT(0);
14304 return;
14305 }
14306
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014307 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
14308 != eSIR_SUCCESS)
14309 {
14310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14311 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
14312 return;
14313 }
14314
14315 if(!enabled)
14316 {
14317 WDI_DS_DeactivateTrafficStats();
14318 return;
14319 }
14320
14321 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
14322
14323 if(pWdiTrafficStats != NULL)
14324 {
14325 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
14326 trafficStatsIndParams.length = length;
14327 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080014328 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014329 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
14330 trafficStatsIndParams.pUserData = pWDA;
14331
14332 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
14333
14334 if(WDI_STATUS_PENDING == wdiStatus)
14335 {
14336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14337 "Pending received for %s:%d ",__func__,__LINE__ );
14338 }
14339 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
14340 {
14341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14342 "Failure in %s:%d ",__func__,__LINE__ );
14343 }
14344
14345 WDI_DS_ClearTrafficStats();
14346 }
14347 else
14348 {
14349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
14350 "pWdiTrafficStats is Null");
14351 }
14352
14353 if( VOS_STATUS_SUCCESS !=
14354 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
14355 {
14356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
14357 "Traffic Stats Timer Start Failed ");
14358 return;
14359 }
14360}
14361
Jeff Johnson295189b2012-06-20 16:38:30 -070014362/*
14363 * BA Activity check timer handler
14364 */
14365void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
14366{
14367 tANI_U8 curSta = 0 ;
14368 tANI_U8 tid = 0 ;
14369 tANI_U8 size = 0 ;
14370 tANI_U8 baCandidateCount = 0 ;
14371 tANI_U8 newBaCandidate = 0 ;
Abhishek Singh0644e482014-10-06 18:38:23 +053014372 tANI_U32 val;
Jeff Johnson295189b2012-06-20 16:38:30 -070014373 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
Abhishek Singh0644e482014-10-06 18:38:23 +053014374 tpAniSirGlobal pMac;
14375
Jeff Johnson295189b2012-06-20 16:38:30 -070014376 if(NULL == pWDA)
14377 {
14378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014379 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014380 VOS_ASSERT(0);
14381 return ;
14382 }
14383 if(WDA_MAX_STA < pWDA->wdaMaxSta)
14384 {
14385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14386 "Inconsistent STA entries in WDA");
14387 VOS_ASSERT(0) ;
Abhishek Singh0644e482014-10-06 18:38:23 +053014388 }
14389 if(NULL == pWDA->pVosContext)
14390 {
14391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14392 "%s: pVosContext is NULL",__func__);
14393 VOS_ASSERT(0);
14394 return ;
14395 }
14396 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Abhishek Singh68883952014-10-14 11:59:05 +053014397 if(NULL == pMac)
14398 {
14399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14400 "%s: pMac is NULL",__func__);
14401 VOS_ASSERT(0);
14402 return ;
14403 }
14404
Abhishek Singh0644e482014-10-06 18:38:23 +053014405 if (wlan_cfgGetInt(pMac,
14406 WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC, &val) !=
14407 eSIR_SUCCESS)
14408 {
14409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14410 "Unable to get WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC");
14411 val = 0;
14412 }
14413
Jeff Johnson295189b2012-06-20 16:38:30 -070014414 /* walk through all STA entries and find out TX packet count */
14415 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
14416 {
Abhishek Singh0644e482014-10-06 18:38:23 +053014417 tANI_U32 currentOperChan = pWDA->wdaStaInfo[curSta].currentOperChan;
Gopichand Nakkala976e3252013-01-03 15:45:56 -080014418#ifdef WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053014419 // We can only do BA on "hard" STAs.
14420 if (!(IS_HWSTA_IDX(curSta)))
14421 {
14422 continue;
14423 }
Gopichand Nakkala976e3252013-01-03 15:45:56 -080014424#endif //WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053014425 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
14426 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070014427 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014428 tANI_U32 txPktCount = 0 ;
14429 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014430 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070014431 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
14432 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070014433 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
14434 curSta, tid, &txPktCount)))
14435 {
14436#if 0
14437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
14438 "************* %d:%d, %d ",curSta, txPktCount,
14439 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
14440#endif
Abhishek Singh0644e482014-10-06 18:38:23 +053014441 if(val && ( (currentOperChan >= SIR_11B_CHANNEL_BEGIN) &&
14442 (currentOperChan <= SIR_11B_CHANNEL_END)))
14443 {
14444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14445 "%s: BTC disabled aggregation - dont start "
14446 "TX ADDBA req",__func__);
14447 }
14448 else if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070014449 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Jeff Johnson295189b2012-06-20 16:38:30 -070014450 && (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
14451 curSta, tid)))
14452 {
14453 /* get prepare for sending message to HAL */
14454 //baCandidate[baCandidateCount].staIdx = curSta ;
14455 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
14456 newBaCandidate = WDA_ENABLE_BA ;
14457 }
14458 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
14459 }
14460 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014461 /* fill the entry for all the sta with given TID's */
14462 if(WDA_ENABLE_BA == newBaCandidate)
14463 {
14464 /* move to next BA candidate */
14465 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
14466 size += sizeof(WDI_TriggerBAReqCandidateType) ;
14467 baCandidateCount++ ;
14468 newBaCandidate = WDA_DISABLE_BA ;
14469 }
14470 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014471 /* prepare and send message to hal */
14472 if( 0 < baCandidateCount)
14473 {
14474 WDI_Status status = WDI_STATUS_SUCCESS ;
14475 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
14476 tWDA_ReqParams *pWdaParams =
14477 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014478 if(NULL == pWdaParams)
14479 {
14480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014481 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014482 VOS_ASSERT(0) ;
14483 return;
14484 }
14485 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
14486 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
14487 if(NULL == wdiTriggerBaReq)
14488 {
14489 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014490 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014491 VOS_ASSERT(0) ;
14492 vos_mem_free(pWdaParams);
14493 return;
14494 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014495 do
14496 {
14497 WDI_TriggerBAReqinfoType *triggerBaInfo =
14498 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
14499 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
14500 /* TEMP_FIX: Need to see if WDI need check for assoc session for
14501 * for each request */
14502 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
14503 triggerBaInfo->ucBASessionID = 0;
14504 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
14505 } while(0) ;
14506 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
14507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014508 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014509 pWdaParams->pWdaContext = pWDA;
14510 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
14511 pWdaParams->wdaMsgParam = NULL;
14512 status = WDI_TriggerBAReq(wdiTriggerBaReq,
14513 WDA_TriggerBaReqCallback, pWdaParams) ;
14514 if(IS_WDI_STATUS_FAILURE(status))
14515 {
14516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14517 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
14518 vos_mem_free(pWdaParams->wdaMsgParam) ;
14519 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14520 vos_mem_free(pWdaParams) ;
14521 }
14522 }
14523 else
14524 {
14525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
14526 "There is no TID for initiating BA");
14527 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014528 if( VOS_STATUS_SUCCESS !=
14529 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
14530 {
14531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14532 "BA Activity Timer Stop Failed ");
14533 return ;
14534 }
14535 if( VOS_STATUS_SUCCESS !=
14536 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
14537 {
14538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14539 "BA Activity Timer Start Failed ");
14540 return;
14541 }
14542 return ;
14543}
Jeff Johnson295189b2012-06-20 16:38:30 -070014544/*
14545 * WDA common routine to create timer used by WDA.
14546 */
14547static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
14548{
Jeff Johnson295189b2012-06-20 16:38:30 -070014549 VOS_STATUS status = VOS_STATUS_SUCCESS ;
14550 tANI_U32 val = 0 ;
14551 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14552
14553 if(NULL == pMac)
14554 {
14555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014556 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014557 VOS_ASSERT(0);
14558 return VOS_STATUS_E_FAILURE;
14559 }
14560 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
14561 != eSIR_SUCCESS)
14562 {
14563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14564 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
14565 return VOS_STATUS_E_FAILURE;
14566 }
14567 val = SYS_MS_TO_TICKS(val) ;
14568
14569 /* BA activity check timer */
14570 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
14571 "BA Activity Check timer", WDA_TimerHandler,
14572 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
14573 if(status != TX_SUCCESS)
14574 {
14575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14576 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014577 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014578 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014579 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014580 /* Tx Complete Timeout timer */
14581 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
14582 "Tx Complete Check timer", WDA_TimerHandler,
14583 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014584 if(status != TX_SUCCESS)
14585 {
14586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14587 "Unable to create Tx Complete Timeout timer");
14588 /* Destroy timer of BA activity check timer */
14589 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
14590 if(status != TX_SUCCESS)
14591 {
14592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14593 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014594 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014595 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014596 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014597 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014598
14599 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
14600
14601 /* Traffic Stats timer */
14602 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
14603 "Traffic Stats timer", WDA_TimerHandler,
14604 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
14605 if(status != TX_SUCCESS)
14606 {
14607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14608 "Unable to create traffic stats timer");
14609 /* Destroy timer of BA activity check timer */
14610 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
14611 if(status != TX_SUCCESS)
14612 {
14613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14614 "Unable to Destroy BA activity timer");
14615 }
14616 /* Destroy timer of tx complete timer */
14617 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
14618 if(status != TX_SUCCESS)
14619 {
14620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14621 "Unable to Tx complete timer");
14622 }
14623 return VOS_STATUS_E_FAILURE ;
14624 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014625 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014626}
Jeff Johnson295189b2012-06-20 16:38:30 -070014627/*
14628 * WDA common routine to destroy timer used by WDA.
14629 */
14630static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
14631{
14632 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014633 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
14634 if(status != TX_SUCCESS)
14635 {
14636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14637 "Unable to Destroy Tx Complete Timeout timer");
14638 return eSIR_FAILURE ;
14639 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014640 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
14641 if(status != TX_SUCCESS)
14642 {
14643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14644 "Unable to Destroy BA activity timer");
14645 return eSIR_FAILURE ;
14646 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014647 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
14648 if(status != TX_SUCCESS)
14649 {
14650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14651 "Unable to Destroy traffic stats timer");
14652 return eSIR_FAILURE ;
14653 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014654 return eSIR_SUCCESS ;
14655}
Jeff Johnson295189b2012-06-20 16:38:30 -070014656/*
14657 * WDA timer handler.
14658 */
14659void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
14660{
14661 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
14662 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014663 /*
14664 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
14665 */
14666 wdaMsg.type = timerInfo ;
14667 wdaMsg.bodyptr = NULL;
14668 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070014669 /* post the message.. */
14670 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
14671 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
14672 {
14673 vosStatus = VOS_STATUS_E_BADMSG;
14674 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014675}
Jeff Johnson295189b2012-06-20 16:38:30 -070014676/*
14677 * WDA Tx Complete timeout Indication.
14678 */
14679void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
14680{
14681 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014682 if( pWDA->pAckTxCbFunc )
14683 {
14684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014685 "TxComplete timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070014686 pWDA->pAckTxCbFunc( pMac, 0);
14687 pWDA->pAckTxCbFunc = NULL;
14688 }
14689 else
14690 {
14691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014692 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070014693 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014694}
Jeff Johnson295189b2012-06-20 16:38:30 -070014695/*
14696 * WDA Set REG Domain to VOS NV
14697 */
Abhishek Singha306a442013-11-07 18:39:01 +053014698eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
14699 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070014700{
Abhishek Singha306a442013-11-07 18:39:01 +053014701 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070014702 {
14703 return eHAL_STATUS_INVALID_PARAMETER;
14704 }
14705 return eHAL_STATUS_SUCCESS;
14706}
Jeff Johnson295189b2012-06-20 16:38:30 -070014707
Jeff Johnson295189b2012-06-20 16:38:30 -070014708#ifdef FEATURE_WLAN_SCAN_PNO
14709/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014710 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014711 *
14712 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014713void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014714{
14715 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014716 tSirPNOScanReq *pPNOScanReqParams;
14717
Jeff Johnson295189b2012-06-20 16:38:30 -070014718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014719 "<------ %s, wdiStatus: %d",__func__, status);
Yue Ma7f44bbe2013-04-12 11:47:39 -070014720 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070014721 {
14722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014723 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014724 VOS_ASSERT(0) ;
14725 return ;
14726 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014727
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014728 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
14729 if(pPNOScanReqParams->statusCallback)
14730 {
14731 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
14732 (status == WDI_STATUS_SUCCESS) ?
14733 VOS_STATUS_SUCCESS : VOS_STATUS_E_FAILURE);
14734 }
14735
Yue Ma7f44bbe2013-04-12 11:47:39 -070014736 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14737 vos_mem_free(pWdaParams->wdaMsgParam);
14738 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014739
14740 return ;
14741}
Jeff Johnson295189b2012-06-20 16:38:30 -070014742/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014743 * FUNCTION: WDA_PNOScanReqCallback
14744 * Free memory.
14745 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
14746 */
14747void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014748{
Yue Ma7f44bbe2013-04-12 11:47:39 -070014749 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014750 tSirPNOScanReq *pPNOScanReqParams;
Yue Ma7f44bbe2013-04-12 11:47:39 -070014751
14752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14753 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14754
14755 if(NULL == pWdaParams)
14756 {
14757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14758 "%s: pWdaParams received NULL", __func__);
14759 VOS_ASSERT(0);
14760 return;
14761 }
14762
14763 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14764 {
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014765 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
14766 if(pPNOScanReqParams->statusCallback)
14767 {
14768 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
14769 VOS_STATUS_E_FAILURE);
14770 }
14771
Yue Ma7f44bbe2013-04-12 11:47:39 -070014772 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14773 vos_mem_free(pWdaParams->wdaMsgParam);
14774 vos_mem_free(pWdaParams);
14775 }
14776
14777 return;
14778}
14779/*
14780 * FUNCTION: WDA_UpdateScanParamsRespCallback
14781 *
14782 */
14783void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
14784{
14785 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014787 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070014788 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070014789 {
14790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014791 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014792 VOS_ASSERT(0) ;
14793 return ;
14794 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014795
14796 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14797 vos_mem_free(pWdaParams->wdaMsgParam);
14798 vos_mem_free(pWdaParams);
14799
Jeff Johnson295189b2012-06-20 16:38:30 -070014800 return ;
14801}
Jeff Johnson295189b2012-06-20 16:38:30 -070014802/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014803 * FUNCTION: WDA_UpdateScanParamsReqCallback
14804 * Free memory.
14805 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
14806 */
14807void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
14808{
14809 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14810
14811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14812 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14813
14814 if(NULL == pWdaParams)
14815 {
14816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14817 "%s: pWdaParams received NULL", __func__);
14818 VOS_ASSERT(0);
14819 return;
14820 }
14821
14822 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14823 {
14824 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14825 vos_mem_free(pWdaParams->wdaMsgParam);
14826 vos_mem_free(pWdaParams);
14827 }
14828
14829 return;
14830}
14831/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014832 * FUNCTION: WDA_ProcessSetPreferredNetworkList
14833 * Request to WDI to set Preferred Network List.Offload
14834 */
14835VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
14836 tSirPNOScanReq *pPNOScanReqParams)
14837{
Jeff Johnson43971f52012-07-17 12:26:56 -070014838 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014839 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
14840 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
14841 tWDA_ReqParams *pWdaParams ;
14842 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014844 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014845 if(NULL == pwdiPNOScanReqInfo)
14846 {
14847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014848 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014849 VOS_ASSERT(0);
14850 return VOS_STATUS_E_NOMEM;
14851 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014852 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14853 if(NULL == pWdaParams)
14854 {
14855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014856 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014857 VOS_ASSERT(0);
14858 vos_mem_free(pwdiPNOScanReqInfo);
14859 return VOS_STATUS_E_NOMEM;
14860 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014861 //
14862 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
14863 //
14864 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
14865 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070014866 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
14867 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
14868 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014869 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
14870 {
14871 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
14872 &pPNOScanReqParams->aNetworks[i],
14873 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
14874 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014875 /*Scan timer intervals*/
14876 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
14877 &pPNOScanReqParams->scanTimers,
14878 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070014879 /*Probe template for 2.4GHz band*/
14880 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
14881 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
14882 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014883 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
14884 pPNOScanReqParams->p24GProbeTemplate,
14885 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070014886 /*Probe template for 5GHz band*/
14887 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
14888 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
14889 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014890 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
14891 pPNOScanReqParams->p5GProbeTemplate,
14892 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070014893 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
14894 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014895
Jeff Johnson295189b2012-06-20 16:38:30 -070014896 /* Store Params pass it to WDI */
14897 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
14898 pWdaParams->pWdaContext = pWDA;
14899 /* Store param pointer as passed in by caller */
14900 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014901 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014902 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014903 if(IS_WDI_STATUS_FAILURE(status))
14904 {
14905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14906 "Failure in Set PNO REQ WDI API, free all the memory " );
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014907 if(pPNOScanReqParams->statusCallback)
14908 {
14909 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
14910 VOS_STATUS_E_FAILURE);
14911 }
14912
Jeff Johnson295189b2012-06-20 16:38:30 -070014913 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14914 vos_mem_free(pWdaParams->wdaMsgParam);
14915 pWdaParams->wdaWdiApiMsgParam = NULL;
14916 pWdaParams->wdaMsgParam = NULL;
14917 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014918 return CONVERT_WDI2VOS_STATUS(status) ;
14919}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014920
14921#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
14922
14923void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
14924{
14925 /*Convert the CSR Auth types to WDI Auth types */
14926 switch (csrAuthType)
14927 {
14928 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
14929 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
14930 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014931#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014932 case eCSR_AUTH_TYPE_CCKM_WPA:
14933 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
14934 break;
14935#endif
14936 case eCSR_AUTH_TYPE_WPA:
14937 *AuthType = eWDA_AUTH_TYPE_WPA;
14938 break;
14939 case eCSR_AUTH_TYPE_WPA_PSK:
14940 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
14941 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014942#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014943 case eCSR_AUTH_TYPE_CCKM_RSN:
14944 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
14945 break;
14946#endif
14947 case eCSR_AUTH_TYPE_RSN:
14948 *AuthType = eWDA_AUTH_TYPE_RSN;
14949 break;
14950 case eCSR_AUTH_TYPE_RSN_PSK:
14951 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
14952 break;
14953#if defined WLAN_FEATURE_VOWIFI_11R
14954 case eCSR_AUTH_TYPE_FT_RSN:
14955 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
14956 break;
14957 case eCSR_AUTH_TYPE_FT_RSN_PSK:
14958 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
14959 break;
14960#endif
14961#ifdef FEATURE_WLAN_WAPI
14962 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
14963 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
14964 break;
14965 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
14966 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
14967 break;
14968#endif /* FEATURE_WLAN_WAPI */
14969 case eCSR_AUTH_TYPE_SHARED_KEY:
14970 case eCSR_AUTH_TYPE_AUTOSWITCH:
14971 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
14972 break;
14973#if 0
14974 case eCSR_AUTH_TYPE_SHARED_KEY:
14975 *AuthType = eWDA_AUTH_TYPE_SHARED_KEY;
14976 break;
14977 case eCSR_AUTH_TYPE_AUTOSWITCH:
14978 *AuthType = eWDA_AUTH_TYPE_AUTOSWITCH;
14979#endif
14980 default:
14981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14982 "%s: Unknown Auth Type", __func__);
14983 break;
14984 }
14985}
14986void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
14987{
14988 switch (csrEncrType)
14989 {
14990 case eCSR_ENCRYPT_TYPE_NONE:
14991 *EncrType = WDI_ED_NONE;
14992 break;
14993 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
14994 case eCSR_ENCRYPT_TYPE_WEP40:
14995 *EncrType = WDI_ED_WEP40;
14996 break;
14997 case eCSR_ENCRYPT_TYPE_WEP104:
14998 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
14999 *EncrType = WDI_ED_WEP104;
15000 break;
15001 case eCSR_ENCRYPT_TYPE_TKIP:
15002 *EncrType = WDI_ED_TKIP;
15003 break;
15004 case eCSR_ENCRYPT_TYPE_AES:
15005 *EncrType = WDI_ED_CCMP;
15006 break;
15007#ifdef WLAN_FEATURE_11W
15008 case eCSR_ENCRYPT_TYPE_AES_CMAC:
15009 *EncrType = WDI_ED_AES_128_CMAC;
15010 break;
15011#endif
15012#ifdef FEATURE_WLAN_WAPI
15013 case eCSR_ENCRYPT_TYPE_WPI:
15014 *EncrType = WDI_ED_WPI;
15015 break;
15016#endif
15017 case eCSR_ENCRYPT_TYPE_ANY:
15018 *EncrType = WDI_ED_ANY;
15019 break;
15020
15021 default:
15022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15023 "%s: Unknown Encryption Type", __func__);
15024 break;
15025 }
15026}
15027
15028/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015029 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015030 * Request to WDI to set Roam Offload Scan
15031 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015032VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015033 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
15034{
15035 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015036 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
15037 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015038 tWDA_ReqParams *pWdaParams ;
15039 v_U8_t csrAuthType;
15040 WDI_RoamNetworkType *pwdiRoamNetworkType;
15041 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
15042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15043 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015044 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015045 {
15046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15047 "%s: VOS MEM Alloc Failure", __func__);
15048 VOS_ASSERT(0);
15049 return VOS_STATUS_E_NOMEM;
15050 }
15051 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15052 if (NULL == pWdaParams)
15053 {
15054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15055 "%s: VOS MEM Alloc Failure", __func__);
15056 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015057 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015058 return VOS_STATUS_E_NOMEM;
15059 }
15060
15061 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015062 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015063 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015064 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
15065 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015066 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
15067 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
15068 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
15069 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
15070 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
15071 sizeof(pwdiRoamNetworkType->currAPbssid));
15072 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
15073 csrAuthType);
15074 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
15075 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
15076 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
15077 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
15078 pwdiRoamOffloadScanInfo->LookupThreshold =
15079 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080015080 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
15081 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015082 pwdiRoamOffloadScanInfo->RoamRssiDiff =
15083 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080015084 pwdiRoamOffloadScanInfo->MAWCEnabled =
15085 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015086 pwdiRoamOffloadScanInfo->Command =
15087 pRoamOffloadScanReqParams->Command ;
15088 pwdiRoamOffloadScanInfo->StartScanReason =
15089 pRoamOffloadScanReqParams->StartScanReason ;
15090 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
15091 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
15092 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
15093 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
15094 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
15095 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
15096 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
15097 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
15098 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
15099 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015100 pwdiRoamOffloadScanInfo->IsESEEnabled =
15101 pRoamOffloadScanReqParams->IsESEEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015102 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
15103 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
15104 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
15105 pwdiRoamNetworkType->ssId.ucLength =
15106 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
15107 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
15108 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
15109 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
15110 pwdiRoamNetworkType->ChannelCount =
15111 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
15112 pwdiRoamOffloadScanInfo->ChannelCacheType =
15113 pRoamOffloadScanReqParams->ChannelCacheType;
15114 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
15115 pRoamOffloadScanReqParams->ValidChannelList,
15116 pRoamOffloadScanReqParams->ValidChannelCount);
15117 pwdiRoamOffloadScanInfo->ValidChannelCount =
15118 pRoamOffloadScanReqParams->ValidChannelCount;
15119 pwdiRoamOffloadScanInfo->us24GProbeSize =
15120 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15121 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
15122 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
15123 pRoamOffloadScanReqParams->p24GProbeTemplate,
15124 pwdiRoamOffloadScanInfo->us24GProbeSize);
15125 pwdiRoamOffloadScanInfo->us5GProbeSize =
15126 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15127 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
15128 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
15129 pRoamOffloadScanReqParams->p5GProbeTemplate,
15130 pwdiRoamOffloadScanInfo->us5GProbeSize);
15131 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
15132 pRoamOffloadScanReqParams->MDID.mdiePresent;
15133 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
15134 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015135 pwdiRoamOffloadScanInfo->nProbes =
15136 pRoamOffloadScanReqParams->nProbes;
15137 pwdiRoamOffloadScanInfo->HomeAwayTime =
15138 pRoamOffloadScanReqParams->HomeAwayTime;
15139 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015140 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015141 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015142 pWdaParams->pWdaContext = pWDA;
15143 /* Store param pointer as passed in by caller */
15144 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015145 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015146 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
15147 if(IS_WDI_STATUS_FAILURE(status))
15148 {
15149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15150 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
15151 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15152 vos_mem_free(pWdaParams->wdaMsgParam);
15153 pWdaParams->wdaWdiApiMsgParam = NULL;
15154 pWdaParams->wdaMsgParam = NULL;
15155 }
15156 return CONVERT_WDI2VOS_STATUS(status) ;
15157}
15158#endif
15159
Jeff Johnson295189b2012-06-20 16:38:30 -070015160/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015161 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015162 *
15163 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015164void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015165{
15166 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15167
15168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015169 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015170
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015171 if(NULL == pWdaParams)
15172 {
15173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015174 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015175 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015176 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015177 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015178
Jeff Johnson295189b2012-06-20 16:38:30 -070015179 vos_mem_free(pWdaParams->wdaMsgParam) ;
15180 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15181 vos_mem_free(pWdaParams) ;
15182
15183 return ;
15184}
15185/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015186 * FUNCTION: WDA_RssiFilterReqCallback
15187 * Free memory.
15188 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
15189 */
15190void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
15191{
15192 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15193
15194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15195 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15196
15197 if(NULL == pWdaParams)
15198 {
15199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15200 "%s: pWdaParams received NULL", __func__);
15201 VOS_ASSERT(0);
15202 return;
15203 }
15204
15205 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15206 {
15207 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15208 vos_mem_free(pWdaParams->wdaMsgParam);
15209 vos_mem_free(pWdaParams);
15210 }
15211
15212 return;
15213}
15214/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015215 * FUNCTION: WDA_ProcessSetPreferredNetworkList
15216 * Request to WDI to set Preferred Network List.Offload
15217 */
15218VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
15219 tSirSetRSSIFilterReq* pRssiFilterParams)
15220{
Jeff Johnson43971f52012-07-17 12:26:56 -070015221 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015222 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
15223 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
15224 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015226 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015227 if(NULL == pwdiSetRssiFilterReqInfo)
15228 {
15229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015230 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015231 VOS_ASSERT(0);
15232 return VOS_STATUS_E_NOMEM;
15233 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015234 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15235 if(NULL == pWdaParams)
15236 {
15237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015238 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015239 VOS_ASSERT(0);
15240 vos_mem_free(pwdiSetRssiFilterReqInfo);
15241 return VOS_STATUS_E_NOMEM;
15242 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015243 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070015244 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
15245 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015246
Jeff Johnson295189b2012-06-20 16:38:30 -070015247 /* Store Params pass it to WDI */
15248 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
15249 pWdaParams->pWdaContext = pWDA;
15250 /* Store param pointer as passed in by caller */
15251 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015252 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015253 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015254 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015255 if(IS_WDI_STATUS_FAILURE(status))
15256 {
15257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15258 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
15259 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15260 vos_mem_free(pWdaParams->wdaMsgParam);
15261 pWdaParams->wdaWdiApiMsgParam = NULL;
15262 pWdaParams->wdaMsgParam = NULL;
15263 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015264 return CONVERT_WDI2VOS_STATUS(status) ;
15265}
15266
Jeff Johnson295189b2012-06-20 16:38:30 -070015267/*
15268 * FUNCTION: WDA_ProcessUpdateScanParams
15269 * Request to WDI to update Scan Parameters
15270 */
15271VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
15272 tSirUpdateScanParams *pUpdateScanParams)
15273{
Jeff Johnson43971f52012-07-17 12:26:56 -070015274 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015275 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
15276 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
15277 sizeof(WDI_UpdateScanParamsInfoType)) ;
15278 tWDA_ReqParams *pWdaParams ;
15279 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070015280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015281 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015282 if(NULL == wdiUpdateScanParamsInfoType)
15283 {
15284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015285 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015286 VOS_ASSERT(0);
15287 return VOS_STATUS_E_NOMEM;
15288 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015289 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15290 if ( NULL == pWdaParams )
15291 {
15292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015293 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015294 VOS_ASSERT(0);
15295 vos_mem_free(wdiUpdateScanParamsInfoType);
15296 return VOS_STATUS_E_NOMEM;
15297 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015298 //
15299 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
15300 //
Jeff Johnson295189b2012-06-20 16:38:30 -070015301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15302 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
15303 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
15304 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080015305 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070015306 pUpdateScanParams->b11dEnabled,
15307 pUpdateScanParams->b11dResolved,
15308 pUpdateScanParams->ucChannelCount,
15309 pUpdateScanParams->usPassiveMinChTime,
15310 pUpdateScanParams->usPassiveMaxChTime,
15311 pUpdateScanParams->usActiveMinChTime,
15312 pUpdateScanParams->usActiveMaxChTime,
15313 sizeof(tSirUpdateScanParams),
15314 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
15315
Jeff Johnson295189b2012-06-20 16:38:30 -070015316 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
15317 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070015318 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
15319 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070015320 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
15321 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070015322 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
15323 pUpdateScanParams->usActiveMaxChTime;
15324 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
15325 pUpdateScanParams->usActiveMinChTime;
15326 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
15327 pUpdateScanParams->usPassiveMaxChTime;
15328 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
15329 pUpdateScanParams->usPassiveMinChTime;
15330
Jeff Johnson295189b2012-06-20 16:38:30 -070015331 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053015332 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
15333 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070015334
Jeff Johnson295189b2012-06-20 16:38:30 -070015335 for ( i = 0; i <
15336 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
15337 i++)
15338 {
15339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15340 "Update Scan Parameters channel: %d",
15341 pUpdateScanParams->aChannels[i]);
15342
15343 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
15344 pUpdateScanParams->aChannels[i];
15345 }
15346
Yue Ma7f44bbe2013-04-12 11:47:39 -070015347 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
15348 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015349
Jeff Johnson295189b2012-06-20 16:38:30 -070015350 /* Store Params pass it to WDI */
15351 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
15352 pWdaParams->pWdaContext = pWDA;
15353 /* Store param pointer as passed in by caller */
15354 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070015355
Jeff Johnson295189b2012-06-20 16:38:30 -070015356
15357
15358 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015359 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015360 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015361 if(IS_WDI_STATUS_FAILURE(status))
15362 {
15363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15364 "Failure in Update Scan Params EQ WDI API, free all the memory " );
15365 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15366 vos_mem_free(pWdaParams->wdaMsgParam);
15367 vos_mem_free(pWdaParams);
15368 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015369 return CONVERT_WDI2VOS_STATUS(status) ;
15370}
15371#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015372
15373#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
15374/*
15375 * FUNCTION: WDA_RoamOffloadScanReqCallback
15376 *
15377 */
15378void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
15379{
15380 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070015381 vos_msg_t vosMsg;
15382 wpt_uint8 reason = 0;
15383
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070015384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015385 "<------ %s " ,__func__);
15386 if (NULL == pWdaParams)
15387 {
15388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15389 "%s: pWdaParams received NULL", __func__);
15390 VOS_ASSERT(0) ;
15391 return ;
15392 }
15393 if ( pWdaParams != NULL )
15394 {
15395 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
15396 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070015397 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015398 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15399 }
15400 if ( pWdaParams->wdaMsgParam != NULL)
15401 {
15402 vos_mem_free(pWdaParams->wdaMsgParam);
15403 }
15404
15405 vos_mem_free(pWdaParams) ;
15406 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070015407 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
15408 vosMsg.bodyptr = NULL;
15409 if (WDI_STATUS_SUCCESS != status)
15410 {
15411 reason = 0;
15412 }
15413 vosMsg.bodyval = reason;
15414 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15415 {
15416 /* free the mem and return */
15417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070015418 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070015419 }
15420
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015421 return ;
15422}
15423#endif
15424
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015425/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015426 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015427 *
15428 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015429void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015430{
15431 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15432
15433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15434 "<------ %s " ,__func__);
15435
15436 if(NULL == pWdaParams)
15437 {
15438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15439 "%s: pWdaParams received NULL", __func__);
15440 VOS_ASSERT(0);
15441 return;
15442 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015443
15444 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15445 vos_mem_free(pWdaParams->wdaMsgParam);
15446 vos_mem_free(pWdaParams);
15447
15448 return;
15449}
15450/*
15451 * FUNCTION: WDA_SetPowerParamsReqCallback
15452 * Free memory.
15453 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
15454 */
15455void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
15456{
15457 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15458
15459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15460 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15461
15462 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015463 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070015464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15465 "%s: pWdaParams received NULL", __func__);
15466 VOS_ASSERT(0);
15467 return;
15468 }
15469
15470 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15471 {
15472 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15473 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015474 vos_mem_free(pWdaParams);
15475 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015476
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015477 return;
15478}
15479
Jeff Johnson295189b2012-06-20 16:38:30 -070015480#ifdef WLAN_FEATURE_PACKET_FILTERING
15481/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015482 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015483 *
15484 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015485void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015486 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
15487 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015488{
15489 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070015490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015491 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015492 if(NULL == pWdaParams)
15493 {
15494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015495 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015496 VOS_ASSERT(0) ;
15497 return ;
15498 }
15499
15500 vos_mem_free(pWdaParams->wdaMsgParam) ;
15501 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15502 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015503 //print a msg, nothing else to do
15504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015505 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070015506 return ;
15507}
Jeff Johnson295189b2012-06-20 16:38:30 -070015508/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015509 * FUNCTION: WDA_8023MulticastListReqCallback
15510 * Free memory.
15511 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
15512 */
15513void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
15514{
15515 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15516
15517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15518 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15519
15520 if(NULL == pWdaParams)
15521 {
15522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15523 "%s: pWdaParams received NULL", __func__);
15524 VOS_ASSERT(0);
15525 return;
15526 }
15527
15528 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15529 {
15530 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15531 vos_mem_free(pWdaParams->wdaMsgParam);
15532 vos_mem_free(pWdaParams);
15533 }
15534
15535 return;
15536}
15537/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015538 * FUNCTION: WDA_Process8023MulticastListReq
15539 * Request to WDI to add 8023 Multicast List
15540 */
15541VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
15542 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
15543{
Jeff Johnson43971f52012-07-17 12:26:56 -070015544 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015545 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
15546 tWDA_ReqParams *pWdaParams ;
15547 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070015548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015549 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015550 pwdiFltPktSetMcListReqParamsType =
15551 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
15552 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
15553 ) ;
15554 if(NULL == pwdiFltPktSetMcListReqParamsType)
15555 {
15556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015557 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015558 return VOS_STATUS_E_NOMEM;
15559 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015560 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15561 if(NULL == pWdaParams)
15562 {
15563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015564 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015565 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
15566 return VOS_STATUS_E_NOMEM;
15567 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015568
Jeff Johnson295189b2012-06-20 16:38:30 -070015569 //
15570 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
15571 //
15572 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070015573 pRcvFltMcAddrList->ulMulticastAddrCnt;
15574
15575 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
15576 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
15577 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
15578 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
15579
Jeff Johnson295189b2012-06-20 16:38:30 -070015580 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
15581 {
15582 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
15583 &(pRcvFltMcAddrList->multicastAddr[i]),
15584 sizeof(tSirMacAddr));
15585 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015586 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
15587 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015588
Jeff Johnson295189b2012-06-20 16:38:30 -070015589 /* Store Params pass it to WDI */
15590 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
15591 pWdaParams->pWdaContext = pWDA;
15592 /* Store param pointer as passed in by caller */
15593 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070015594 status = WDI_8023MulticastListReq(
15595 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015596 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015597 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015598 if(IS_WDI_STATUS_FAILURE(status))
15599 {
15600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15601 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
15602 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15603 vos_mem_free(pWdaParams->wdaMsgParam);
15604 vos_mem_free(pWdaParams);
15605 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015606 return CONVERT_WDI2VOS_STATUS(status) ;
15607}
Jeff Johnson295189b2012-06-20 16:38:30 -070015608/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015609 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015610 *
15611 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015612void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015613 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
15614 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015615{
15616 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070015617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015618 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015619 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070015620 if(NULL == pWdaParams)
15621 {
15622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015623 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015624 VOS_ASSERT(0) ;
15625 return ;
15626 }
15627
15628 vos_mem_free(pWdaParams->wdaMsgParam) ;
15629 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15630 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015631 //print a msg, nothing else to do
15632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015633 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070015634 return ;
15635}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015636
15637/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015638 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
15639 * Free memory.
15640 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015641 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015642void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015643 void* pUserData)
15644{
15645 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15646
15647 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15648 "<------ %s, wdiStatus: %d",
15649 __func__, wdiStatus);
15650
15651 if (NULL == pWdaParams)
15652 {
15653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15654 "%s: Invalid pWdaParams pointer", __func__);
15655 VOS_ASSERT(0);
15656 return;
15657 }
15658
15659 if (IS_WDI_STATUS_FAILURE(wdiStatus))
15660 {
15661 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15662 vos_mem_free(pWdaParams->wdaMsgParam);
15663 vos_mem_free(pWdaParams);
15664 }
15665
15666 return;
15667}
15668
Jeff Johnson295189b2012-06-20 16:38:30 -070015669/*
15670 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
15671 * Request to WDI to set Receive Filters
15672 */
15673VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
15674 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
15675{
Jeff Johnson43971f52012-07-17 12:26:56 -070015676 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015677 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
15678 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
15679 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
15680 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
15681 tWDA_ReqParams *pWdaParams ;
15682 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070015683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015684 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015685 if(NULL == pwdiSetRcvPktFilterReqParamsType)
15686 {
15687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015688 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015689 VOS_ASSERT(0);
15690 return VOS_STATUS_E_NOMEM;
15691 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015692 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15693 if(NULL == pWdaParams)
15694 {
15695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015696 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015697 VOS_ASSERT(0);
15698 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
15699 return VOS_STATUS_E_NOMEM;
15700 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015701 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
15702 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
15703 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
15704 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070015705 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
15706 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
15707
15708 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
15709 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070015710
15711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15712 "FID %d FT %d NParams %d CT %d",
15713 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
15714 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
15715 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
15716 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070015717 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
15718 {
15719 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
15720 &pRcvPktFilterCfg->paramsData[i],
15721 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070015722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015723 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070015724 pwdiSetRcvPktFilterReqParamsType->
15725 wdiPktFilterCfg.paramsData[i].protocolLayer,
15726 pwdiSetRcvPktFilterReqParamsType->
15727 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070015728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015729 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070015730 pwdiSetRcvPktFilterReqParamsType->
15731 wdiPktFilterCfg.paramsData[i].dataOffset,
15732 pwdiSetRcvPktFilterReqParamsType->
15733 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070015734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015735 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070015736 pwdiSetRcvPktFilterReqParamsType->
15737 wdiPktFilterCfg.paramsData[i].compareData[0],
15738 pwdiSetRcvPktFilterReqParamsType->
15739 wdiPktFilterCfg.paramsData[i].compareData[1],
15740 pwdiSetRcvPktFilterReqParamsType->
15741 wdiPktFilterCfg.paramsData[i].compareData[2],
15742 pwdiSetRcvPktFilterReqParamsType->
15743 wdiPktFilterCfg.paramsData[i].compareData[3],
15744 pwdiSetRcvPktFilterReqParamsType->
15745 wdiPktFilterCfg.paramsData[i].compareData[4],
15746 pwdiSetRcvPktFilterReqParamsType->
15747 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070015748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015749 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070015750 pwdiSetRcvPktFilterReqParamsType->
15751 wdiPktFilterCfg.paramsData[i].dataMask[0],
15752 pwdiSetRcvPktFilterReqParamsType->
15753 wdiPktFilterCfg.paramsData[i].dataMask[1],
15754 pwdiSetRcvPktFilterReqParamsType->
15755 wdiPktFilterCfg.paramsData[i].dataMask[2],
15756 pwdiSetRcvPktFilterReqParamsType->
15757 wdiPktFilterCfg.paramsData[i].dataMask[3],
15758 pwdiSetRcvPktFilterReqParamsType->
15759 wdiPktFilterCfg.paramsData[i].dataMask[4],
15760 pwdiSetRcvPktFilterReqParamsType->
15761 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070015762 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015763 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015764 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015765 /* Store Params pass it to WDI */
15766 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
15767 pWdaParams->pWdaContext = pWDA;
15768 /* Store param pointer as passed in by caller */
15769 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070015770 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015771 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015772 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015773 if(IS_WDI_STATUS_FAILURE(status))
15774 {
15775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15776 "Failure in SetFilter(),free all the memory,status %d ",status);
15777 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15778 vos_mem_free(pWdaParams->wdaMsgParam);
15779 vos_mem_free(pWdaParams);
15780 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015781 return CONVERT_WDI2VOS_STATUS(status) ;
15782}
Jeff Johnson295189b2012-06-20 16:38:30 -070015783/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015784 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015785 *
15786 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015787void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015788 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
15789 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015790{
15791 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15792 tWDA_CbContext *pWDA;
15793 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
15794 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
15795 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
15796 tANI_U8 i;
15797 vos_msg_t vosMsg;
15798
15799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015800 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015801 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
15802
Jeff Johnsone7245742012-09-05 17:12:55 -070015803 if(NULL == pRcvFltPktMatchCntRsp)
15804 {
15805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015806 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070015807 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015808 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070015809 return ;
15810 }
15811
Jeff Johnson295189b2012-06-20 16:38:30 -070015812 if(NULL == pWdaParams)
15813 {
15814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015815 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015816 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015817 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070015818 return ;
15819 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015820 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
15821 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070015822 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
15823 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
15824
15825 /* Message Header */
15826 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
15827 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
15828
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015829 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070015830
15831 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
15832 {
15833 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
15834 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
15835 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015836 /* VOS message wrapper */
15837 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
15838 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
15839 vosMsg.bodyval = 0;
15840 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15841 {
15842 /* free the mem and return */
15843 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
15844 }
15845
15846 vos_mem_free(pWdaParams->wdaMsgParam) ;
15847 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15848 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070015849
15850 return;
15851}
15852/*
15853 * FUNCTION: WDA_FilterMatchCountReqCallback
15854 * Free memory and send RSP back to SME.
15855 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
15856 */
15857void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
15858{
15859 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15860 vos_msg_t vosMsg;
15861
15862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15863 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15864
15865 if(NULL == pWdaParams)
15866 {
15867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15868 "%s: pWdaParams received NULL", __func__);
15869 VOS_ASSERT(0);
15870 return;
15871 }
15872
15873 /* VOS message wrapper */
15874 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
15875 vosMsg.bodyptr = NULL;
15876 vosMsg.bodyval = 0;
15877
15878 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15879 {
15880 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15881 vos_mem_free(pWdaParams->wdaMsgParam);
15882 vos_mem_free(pWdaParams);
15883 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
15884 }
15885
15886 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070015887}
Jeff Johnson295189b2012-06-20 16:38:30 -070015888/*
15889 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
15890 * Request to WDI to get PC Filter Match Count
15891 */
15892VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
15893{
Jeff Johnson43971f52012-07-17 12:26:56 -070015894 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015895 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
15896 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
15897 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015899 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015900 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
15901 {
15902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015903 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015904 VOS_ASSERT(0);
15905 return VOS_STATUS_E_NOMEM;
15906 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015907 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15908 if(NULL == pWdaParams)
15909 {
15910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015911 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015912 VOS_ASSERT(0);
15913 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
15914 return VOS_STATUS_E_NOMEM;
15915 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015916
Yue Ma7f44bbe2013-04-12 11:47:39 -070015917 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
15918 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015919
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015920 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
15921 pRcvFltPktMatchRsp->bssId,
15922 sizeof(wpt_macAddr));
15923
Jeff Johnson295189b2012-06-20 16:38:30 -070015924 /* Store Params pass it to WDI */
15925 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
15926 pWdaParams->pWdaContext = pWDA;
15927 /* Store param pointer as passed in by caller */
15928 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070015929 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015930 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015931 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015932 if(IS_WDI_STATUS_FAILURE(status))
15933 {
15934 /* failure returned by WDI API */
15935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15936 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
15937 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15938 vos_mem_free(pWdaParams) ;
15939 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
15940 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
15941 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015942 return CONVERT_WDI2VOS_STATUS(status) ;
15943}
Jeff Johnson295189b2012-06-20 16:38:30 -070015944/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015945 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015946 *
15947 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015948void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015949 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
15950 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015951{
15952 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070015953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015954 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015955/* WDA_VOS_ASSERT(NULL != pWdaParams); */
15956 if(NULL == pWdaParams)
15957 {
15958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015959 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015960 VOS_ASSERT(0) ;
15961 return ;
15962 }
15963
15964 vos_mem_free(pWdaParams->wdaMsgParam) ;
15965 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15966 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015967 //print a msg, nothing else to do
15968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015969 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070015970 return ;
15971}
Jeff Johnson295189b2012-06-20 16:38:30 -070015972/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015973 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
15974 * Free memory.
15975 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
15976 */
15977void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
15978{
15979 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15980
15981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15982 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15983
15984 if(NULL == pWdaParams)
15985 {
15986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15987 "%s: Invalid pWdaParams pointer", __func__);
15988 VOS_ASSERT(0);
15989 return;
15990 }
15991
15992 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15993 {
15994 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15995 vos_mem_free(pWdaParams->wdaMsgParam);
15996 vos_mem_free(pWdaParams);
15997 }
15998
15999 return;
16000}
16001/*
Jeff Johnson295189b2012-06-20 16:38:30 -070016002 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
16003 * Request to WDI to clear Receive Filters
16004 */
16005VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
16006 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
16007{
Jeff Johnson43971f52012-07-17 12:26:56 -070016008 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016009 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
16010 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
16011 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016013 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016014 if(NULL == pwdiRcvFltPktClearReqParamsType)
16015 {
16016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016017 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016018 VOS_ASSERT(0);
16019 return VOS_STATUS_E_NOMEM;
16020 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016021 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16022 if(NULL == pWdaParams)
16023 {
16024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016025 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016026 VOS_ASSERT(0);
16027 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
16028 return VOS_STATUS_E_NOMEM;
16029 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016030 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
16031 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070016032 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
16033 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
16034 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
16035 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016036
Yue Ma7f44bbe2013-04-12 11:47:39 -070016037 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016038 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016039 /* Store Params pass it to WDI */
16040 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
16041 pWdaParams->pWdaContext = pWDA;
16042 /* Store param pointer as passed in by caller */
16043 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070016044 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016045 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016046 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016047 if(IS_WDI_STATUS_FAILURE(status))
16048 {
16049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16050 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
16051 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080016052 vos_mem_free(pWdaParams->wdaMsgParam);
16053 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016054 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016055 return CONVERT_WDI2VOS_STATUS(status) ;
16056}
16057#endif // WLAN_FEATURE_PACKET_FILTERING
16058
Jeff Johnson295189b2012-06-20 16:38:30 -070016059/*
16060 * FUNCTION: WDA_ProcessSetPowerParamsReq
16061 * Request to WDI to set power params
16062 */
16063VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
16064 tSirSetPowerParamsReq *pPowerParams)
16065{
Jeff Johnson43971f52012-07-17 12:26:56 -070016066 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016067 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
16068 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016069 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016071 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016072 if(NULL == pwdiSetPowerParamsReqInfo)
16073 {
16074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016075 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016076 VOS_ASSERT(0);
16077 return VOS_STATUS_E_NOMEM;
16078 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016079 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16080 if(NULL == pWdaParams)
16081 {
16082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016083 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016084 VOS_ASSERT(0);
16085 vos_mem_free(pwdiSetPowerParamsReqInfo);
16086 return VOS_STATUS_E_NOMEM;
16087 }
Jeff Johnsone7245742012-09-05 17:12:55 -070016088
Jeff Johnson295189b2012-06-20 16:38:30 -070016089
16090 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
16091 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070016092 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
16093 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070016094 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
16095 pPowerParams->uListenInterval;
16096 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
16097 pPowerParams->uBcastMcastFilter;
16098 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
16099 pPowerParams->uEnableBET;
16100 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
16101 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070016102 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
16103 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070016104 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
16105 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016106
Jeff Johnson295189b2012-06-20 16:38:30 -070016107 /* Store Params pass it to WDI */
16108 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
16109 pWdaParams->pWdaContext = pWDA;
16110 /* Store param pointer as passed in by caller */
16111 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016112 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016113 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016114 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016115 if(IS_WDI_STATUS_FAILURE(status))
16116 {
16117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16118 "Failure in Set power params REQ WDI API, free all the memory " );
16119 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16120 vos_mem_free(pWdaParams->wdaMsgParam);
16121 pWdaParams->wdaWdiApiMsgParam = NULL;
16122 pWdaParams->wdaMsgParam = NULL;
16123 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016124 return CONVERT_WDI2VOS_STATUS(status) ;
16125}
16126
16127/*
16128 * FUNCTION: WDA_SetTmLevelRspCallback
16129 * Set TM Level response
16130 */
16131void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
16132{
16133 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16134
16135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016136 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016137
16138 if(NULL == pWdaParams)
16139 {
16140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016141 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016142 VOS_ASSERT(0) ;
16143 return ;
16144 }
16145
16146 /* Dose not need to send notification to upper layer
16147 * Just free allocated resources */
16148 if( pWdaParams != NULL )
16149 {
16150 if( pWdaParams->wdaWdiApiMsgParam != NULL )
16151 {
16152 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16153 }
16154 vos_mem_free(pWdaParams->wdaMsgParam) ;
16155 vos_mem_free(pWdaParams) ;
16156 }
16157}
16158
16159/*
16160 * FUNCTION: WDA_ProcessSetTmLevelReq
16161 * Set TM Level request
16162 */
16163VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
16164 tAniSetTmLevelReq *setTmLevelReq)
16165{
16166 WDI_Status status = WDI_STATUS_SUCCESS ;
16167 tWDA_ReqParams *pWdaParams ;
16168 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
16169 (WDI_SetTmLevelReqType *)vos_mem_malloc(
16170 sizeof(WDI_SetTmLevelReqType)) ;
16171 if(NULL == wdiSetTmLevelReq)
16172 {
16173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016174 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016175 VOS_ASSERT(0);
16176 return VOS_STATUS_E_NOMEM;
16177 }
16178
16179 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16180 if(NULL == pWdaParams)
16181 {
16182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016183 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016184 VOS_ASSERT(0);
16185 vos_mem_free(wdiSetTmLevelReq);
16186 return VOS_STATUS_E_NOMEM;
16187 }
16188
16189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016190 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016191
16192 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
16193 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
16194
16195 pWdaParams->pWdaContext = pWDA;
16196 pWdaParams->wdaMsgParam = setTmLevelReq;
16197 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
16198
16199 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
16200 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
16201
16202 if(IS_WDI_STATUS_FAILURE(status))
16203 {
16204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080016205 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070016206 vos_mem_free(pWdaParams->wdaMsgParam) ;
16207 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16208 vos_mem_free(pWdaParams) ;
16209 }
16210
16211 return CONVERT_WDI2VOS_STATUS(status) ;
16212}
16213
16214VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
16215 tpTxControlParams pTxCtrlParam)
16216{
16217 VOS_STATUS wdaStatus;
16218
16219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016220 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016221 if( pTxCtrlParam == NULL )
16222 {
16223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016224 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016225 return VOS_STATUS_E_FAILURE;
16226 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016227 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
16228 {
16229 wdaStatus = WDA_SuspendDataTx(pWDA);
16230 }
16231 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
16232 {
16233 wdaStatus = WDA_ResumeDataTx(pWDA);
16234 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016235 return wdaStatus;
16236}
16237
16238 /* FUNCTION WDA_featureCapsExchange
16239 * WDA API to invoke capability exchange between host and FW.
16240 */
16241void WDA_featureCapsExchange(v_PVOID_t pVosContext)
16242{
16243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016244 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070016245 WDI_featureCapsExchangeReq( NULL, pVosContext);
16246}
16247
Yathish9f22e662012-12-10 14:21:35 -080016248/* FUNCTION WDA_disableCapablityFeature
16249 * WDA API to diable Active mode offload in host.
16250 */
16251void WDA_disableCapablityFeature(tANI_U8 feature_index)
16252{
16253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16254 "%s:enter", __func__ );
16255 WDI_disableCapablityFeature(feature_index);
16256}
16257
Jeff Johnson295189b2012-06-20 16:38:30 -070016258 /* FUNCTION WDA_getHostWlanFeatCaps
16259 * Wrapper for WDI API, that will return if the feature (enum value).passed
16260 * to this API is supported or not in Host
16261 * return value
16262 * 0 - implies feature is NOT Supported
16263 * any non zero value - implies feature is SUPPORTED
16264 */
16265tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
16266{
16267 return WDI_getHostWlanFeatCaps(featEnumValue);
16268}
16269
16270 /* FUNCTION WDA_getFwWlanFeatCaps
16271 * Wrapper for WDI API, that will return if the feature (enum value).passed
16272 * to this API is supported or not in FW
16273 * return value
16274 * 0 - implies feature is NOT Supported
16275 * any non zero value - implies feature is SUPPORTED
16276 */
16277tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
16278{
16279 return WDI_getFwWlanFeatCaps(featEnumValue);
16280}
16281
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053016282
Jeff Johnson295189b2012-06-20 16:38:30 -070016283/*
16284 * FUNCTION: WDA_shutdown
16285 * Shutdown WDA/WDI without handshaking with Riva.
16286 * Synchronous function.
16287 */
16288VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
16289{
16290 WDI_Status wdiStatus;
16291 //tANI_U8 eventIdx = 0;
16292 VOS_STATUS status = VOS_STATUS_SUCCESS;
16293 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070016294 if (NULL == pWDA)
16295 {
16296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016297 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070016298 VOS_ASSERT(0);
16299 return VOS_STATUS_E_FAILURE;
16300 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016301 /* FTM mode stay START_STATE */
16302 if( (WDA_READY_STATE != pWDA->wdaState) &&
16303 (WDA_INIT_STATE != pWDA->wdaState) &&
16304 (WDA_START_STATE != pWDA->wdaState) )
16305 {
16306 VOS_ASSERT(0);
16307 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016308
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080016309 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
16310 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070016311 {
16312 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080016313 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070016314 }
Leo Chang9d76f622013-08-23 16:34:52 -070016315 else
16316 {
16317 vos_event_destroy(&pWDA->ftmStopDoneEvent);
16318 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016319
Jeff Johnson295189b2012-06-20 16:38:30 -070016320 /* call WDI shutdown */
16321 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070016322 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
16323 {
16324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16325 "error in WDA Stop" );
16326 status = VOS_STATUS_E_FAILURE;
16327 }
16328 /* WDI stop is synchrnous, shutdown is complete when it returns */
16329 pWDA->wdaState = WDA_STOP_STATE;
16330
Jeff Johnson295189b2012-06-20 16:38:30 -070016331 /* shutdown should perform the stop & close actions. */
16332 /* Destroy the event */
16333 status = vos_event_destroy(&pWDA->txFrameEvent);
16334 if(!VOS_IS_STATUS_SUCCESS(status))
16335 {
16336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016337 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070016338 status = VOS_STATUS_E_FAILURE;
16339 }
16340 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
16341 if(!VOS_IS_STATUS_SUCCESS(status))
16342 {
16343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016344 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070016345 status = VOS_STATUS_E_FAILURE;
16346 }
16347 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
16348 if(!VOS_IS_STATUS_SUCCESS(status))
16349 {
16350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016351 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070016352 status = VOS_STATUS_E_FAILURE;
16353 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016354 /* free WDA context */
16355 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
16356 if ( !VOS_IS_STATUS_SUCCESS(status) )
16357 {
16358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16359 "error in WDA close " );
16360 status = VOS_STATUS_E_FAILURE;
16361 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016362 return status;
16363}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080016364
Jeff Johnsone7245742012-09-05 17:12:55 -070016365/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080016366 * FUNCTION: WDA_setNeedShutdown
16367 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070016368 */
16369
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080016370void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070016371{
16372 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070016373 if(pWDA == NULL)
16374 {
16375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16376 "Could not get the WDA Context pointer" );
16377 return;
16378 }
Jeff Johnsone7245742012-09-05 17:12:55 -070016379 pWDA->needShutdown = TRUE;
16380}
16381/*
16382 * FUNCTION: WDA_needShutdown
16383 * WDA needs a shutdown
16384 */
16385
16386v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
16387{
16388 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070016389 if(pWDA == NULL)
16390 {
16391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16392 "Could not get the WDA Context pointer" );
16393 return 0;
16394 }
16395 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070016396}
16397
Mohit Khanna4a70d262012-09-11 16:30:12 -070016398#ifdef WLAN_FEATURE_11AC
16399/*
16400 * FUNCTION: WDA_SetBeaconFilterReqCallback
16401 *
16402 */
16403void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
16404{
16405 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016407 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016408 if(NULL == pWdaParams)
16409 {
16410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016411 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016412 VOS_ASSERT(0) ;
16413 return ;
16414 }
Jeff Johnsone7245742012-09-05 17:12:55 -070016415
Mohit Khanna4a70d262012-09-11 16:30:12 -070016416 vos_mem_free(pWdaParams->wdaMsgParam) ;
16417 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16418 vos_mem_free(pWdaParams) ;
16419 /*
16420 * No respone required for SetBeaconFilter req so just free the request
16421 * param here
16422 */
16423
16424 return ;
16425}
16426
16427VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
16428 tUpdateVHTOpMode *pData)
16429{
16430 WDI_Status status = WDI_STATUS_SUCCESS ;
16431 tWDA_ReqParams *pWdaParams ;
16432 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
16433 sizeof(WDI_UpdateVHTOpMode)) ;
16434 if(NULL == wdiTemp)
16435 {
16436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016437 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016438 VOS_ASSERT(0);
16439 return VOS_STATUS_E_NOMEM;
16440 }
16441 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16442 if(NULL == pWdaParams)
16443 {
16444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016445 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016446 VOS_ASSERT(0);
16447 vos_mem_free(wdiTemp);
16448 return VOS_STATUS_E_NOMEM;
16449 }
16450
16451 wdiTemp->opMode = pData->opMode;
16452 wdiTemp->staId = pData->staId;
16453
16454 pWdaParams->pWdaContext = pWDA;
16455 /* Store Req pointer, as this will be used for response */
16456 pWdaParams->wdaMsgParam = (void *)pData;
16457 /* store Params pass it to WDI */
16458 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
16459
16460 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
16461
16462 if(IS_WDI_STATUS_FAILURE(status))
16463 {
16464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16465 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
16466 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16467 vos_mem_free(pWdaParams->wdaMsgParam);
16468 vos_mem_free(pWdaParams);
16469 }
16470 return CONVERT_WDI2VOS_STATUS(status) ;
16471}
16472#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016473
16474/*==========================================================================
16475 FUNCTION WDA_TransportChannelDebug
16476
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070016477 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016478 Display Transport Channel debugging information
16479 User may request to display DXE channel snapshot
16480 Or if host driver detects any abnormal stcuk may display
16481
16482 PARAMETERS
schang6295e542013-03-12 15:31:23 -070016483 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080016484 displaySnapshot : Display DXE snapshot option
Mihir Shete40a55652014-03-02 14:14:47 +053016485 debugFlags : Enable stall detect features
16486 defined by WPAL_DeviceDebugFlags
16487 These features may effect
16488 data performance.
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016489
16490 RETURN VALUE
16491 NONE
16492
16493===========================================================================*/
16494void WDA_TransportChannelDebug
16495(
schang6295e542013-03-12 15:31:23 -070016496 tpAniSirGlobal pMac,
16497 v_BOOL_t displaySnapshot,
Mihir Shete40a55652014-03-02 14:14:47 +053016498 v_U8_t debugFlags
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016499)
16500{
Mihir Shete40a55652014-03-02 14:14:47 +053016501 WDI_TransportChannelDebug(displaySnapshot, debugFlags);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016502 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070016503}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070016504
16505/*==========================================================================
16506 FUNCTION WDA_SetEnableSSR
16507
16508 DESCRIPTION
16509 API to enable/disable SSR on WDI timeout
16510
16511 PARAMETERS
16512 enableSSR : enable/disable SSR
16513
16514 RETURN VALUE
16515 NONE
16516
16517===========================================================================*/
16518void WDA_SetEnableSSR(v_BOOL_t enableSSR)
16519{
16520 WDI_SetEnableSSR(enableSSR);
16521}
Leo Chang9056f462013-08-01 19:21:11 -070016522
16523#ifdef FEATURE_WLAN_LPHB
16524/*
16525 * FUNCTION: WDA_LPHBconfRspCallback
16526 *
16527 */
16528void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
16529{
16530 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16531
16532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16533 "<------ %s " ,__func__);
16534 if (NULL == pWdaParams)
16535 {
16536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16537 "%s: pWdaParams received NULL", __func__);
16538 VOS_ASSERT(0) ;
16539 return ;
16540 }
16541
16542 /* Do not need to send notification to upper layer
16543 * Just free allocated resources */
16544 if (pWdaParams != NULL)
16545 {
16546 if (pWdaParams->wdaWdiApiMsgParam != NULL)
16547 {
16548 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16549 }
16550 vos_mem_free(pWdaParams->wdaMsgParam) ;
16551 vos_mem_free(pWdaParams) ;
16552 }
16553
16554 return;
16555}
16556
16557/*
16558 * FUNCTION: WDA_ProcessLPHBConfReq
16559 *
16560 */
16561VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
16562 tSirLPHBReq *pData)
16563{
16564 WDI_Status wdiStatus;
16565 tWDA_ReqParams *pWdaParams ;
16566
16567 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16568 "------> %s " , __func__);
16569
16570 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16571 if (NULL == pWdaParams)
16572 {
16573 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16574 "%s: VOS MEM Alloc Failure", __func__);
16575 VOS_ASSERT(0);
16576 vos_mem_free(pData);
16577 return VOS_STATUS_E_NOMEM;
16578 }
16579
16580 pWdaParams->pWdaContext = pWDA;
16581 pWdaParams->wdaMsgParam = (void *)pData;
16582 pWdaParams->wdaWdiApiMsgParam = NULL;
16583
16584 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
16585 if (WDI_STATUS_PENDING == wdiStatus)
16586 {
16587 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16588 "Pending received for %s:%d ", __func__, __LINE__);
16589 }
16590 else if (WDI_STATUS_SUCCESS != wdiStatus)
16591 {
16592 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16593 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
16594 vos_mem_free(pWdaParams->wdaMsgParam);
16595 vos_mem_free(pWdaParams);
16596 }
16597
16598 return CONVERT_WDI2VOS_STATUS(wdiStatus);
16599}
16600#endif /* FEATURE_WLAN_LPHB */
16601
c_hpothu92367912014-05-01 15:18:17 +053016602void WDA_GetBcnMissRateCallback(tANI_U8 status, tANI_U32 bcnMissRate,
16603 void* pUserData)
16604{
16605 tSirBcnMissRateInfo *pBcnMissRateInfo = (tSirBcnMissRateInfo *)pUserData;
16606
16607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16608 "<------ %s " ,__func__);
16609 if (NULL == pBcnMissRateInfo)
16610 {
16611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16612 "%s: pWdaParams received NULL", __func__);
16613 VOS_ASSERT(0) ;
16614 return ;
16615 }
16616 if (pBcnMissRateInfo->callback)
16617 {
16618 pBcnMissRateInfo->callback(status, bcnMissRate,
16619 pBcnMissRateInfo->data);
16620 }
16621 vos_mem_free(pUserData);
16622
16623 return;
16624}
16625
16626v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
16627 tSirBcnMissRateReq *pData)
16628{
16629 WDI_Status wdiStatus;
16630 tSirBcnMissRateInfo *pBcnMissRateInfo;
16631
16632 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16633 "------> %s " , __func__);
16634
16635 pBcnMissRateInfo =
16636 (tSirBcnMissRateInfo *)vos_mem_malloc(sizeof(tSirBcnMissRateInfo));
16637 if (NULL == pBcnMissRateInfo)
16638 {
16639 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16640 "%s: VOS MEM Alloc Failure", __func__);
16641 VOS_ASSERT(0);
16642 vos_mem_free(pData);
16643 return;
16644 }
16645
16646 pBcnMissRateInfo->callback = (pGetBcnMissRateCB)(pData->callback);
16647 pBcnMissRateInfo->data = pData->data;
16648
16649 wdiStatus = WDI_GetBcnMissRate(pBcnMissRateInfo,
16650 WDA_GetBcnMissRateCallback,
16651 pData->bssid);
16652 if (WDI_STATUS_PENDING == wdiStatus)
16653 {
16654 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16655 "Pending received for %s:%d ", __func__, __LINE__);
16656 }
16657 else if (WDI_STATUS_SUCCESS != wdiStatus)
16658 {
16659 if (pBcnMissRateInfo->callback)
16660 {
16661 pBcnMissRateInfo->callback(VOS_STATUS_E_FAILURE,
16662 -1, pBcnMissRateInfo->data);
16663 }
16664 }
16665 vos_mem_free(pData);
16666}
Dino Mycle41bdc942014-06-10 11:30:24 +053016667
16668#ifdef WLAN_FEATURE_EXTSCAN
16669
16670/*==========================================================================
16671 FUNCTION WDA_EXTScanStartRspCallback
16672
16673 DESCRIPTION
16674 API to send EXTScan Start Response to HDD
16675
16676 PARAMETERS
16677 pEventData: Response from FW
16678 pUserData:
16679===========================================================================*/
16680void WDA_EXTScanStartRspCallback(void *pEventData, void* pUserData)
16681{
16682 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16683 tWDA_CbContext *pWDA = NULL;
16684 void *pCallbackContext;
16685 tpAniSirGlobal pMac;
16686
16687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16688 "%s:", __func__);
16689 if (NULL == pWdaParams)
16690 {
16691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16692 "%s: pWdaParams received NULL", __func__);
16693 VOS_ASSERT(0);
16694 return;
16695 }
16696
16697 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
16698
16699 if (NULL == pWDA)
16700 {
16701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16702 "%s: pWDA received NULL", __func__);
16703 VOS_ASSERT(0);
16704 goto error;
16705 }
16706
16707 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16708 if (NULL == pMac)
16709 {
16710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16711 "%s:pMac is NULL", __func__);
16712 VOS_ASSERT(0);
16713 goto error;
16714 }
16715
16716 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
16717
16718 if (pMac->sme.pEXTScanIndCb)
16719 {
16720 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_START_RSP,
16721 pEventData);
16722 }
16723 else
16724 {
16725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16726 "%s:HDD callback is null", __func__);
16727 VOS_ASSERT(0);
16728 }
16729
16730error:
16731
16732 if (pWdaParams->wdaWdiApiMsgParam != NULL)
16733 {
16734 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16735 }
16736 if (pWdaParams->wdaMsgParam != NULL)
16737 {
16738 vos_mem_free(pWdaParams->wdaMsgParam);
16739 }
16740 vos_mem_free(pWdaParams) ;
16741
16742 return;
16743}
16744
16745/*==========================================================================
16746 FUNCTION WDA_EXTScanStopRspCallback
16747
16748 DESCRIPTION
16749 API to send EXTScan Stop Response to HDD
16750
16751 PARAMETERS
16752 pEventData: Response from FW
16753 pUserData:
16754===========================================================================*/
16755void WDA_EXTScanStopRspCallback(void *pEventData, void* pUserData)
16756{
16757 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16758 tWDA_CbContext *pWDA = NULL;
16759 void *pCallbackContext;
16760 tpAniSirGlobal pMac;
16761
16762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16763 "%s:", __func__);
16764 if (NULL == pWdaParams)
16765 {
16766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16767 "%s: pWdaParams received NULL", __func__);
16768 VOS_ASSERT(0);
16769 return;
16770 }
16771
16772 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
16773
16774 if (NULL == pWDA)
16775 {
16776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16777 "%s: pWDA received NULL", __func__);
16778 VOS_ASSERT(0);
16779 goto error;
16780 }
16781
16782 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16783 if (NULL == pMac)
16784 {
16785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16786 "%s:pMac is NULL", __func__);
16787 VOS_ASSERT(0);
16788 goto error;
16789 }
16790 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
16791
16792 if (pMac->sme.pEXTScanIndCb)
16793 {
16794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16795 "%s:HDD call back function called", __func__);
16796 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_STOP_RSP,
16797 pEventData);
16798 }
16799 else
16800 {
16801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16802 "%s:HDD callback is null", __func__);
16803 VOS_ASSERT(0);
16804 }
16805
16806error:
16807
16808 if (pWdaParams->wdaWdiApiMsgParam != NULL)
16809 {
16810 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16811 }
16812 if (pWdaParams->wdaMsgParam != NULL)
16813 {
16814 vos_mem_free(pWdaParams->wdaMsgParam);
16815 }
16816 vos_mem_free(pWdaParams) ;
16817
16818
16819 return;
16820}
16821
16822/*==========================================================================
16823 FUNCTION WDA_EXTScanGetCachedResultsRspCallback
16824
16825 DESCRIPTION
16826 API to send EXTScan Get Cached Results Response to HDD
16827
16828 PARAMETERS
16829 pEventData: Response from FW
16830 pUserData:
16831===========================================================================*/
16832void WDA_EXTScanGetCachedResultsRspCallback(void *pEventData, void* pUserData)
16833{
16834 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16835 tWDA_CbContext *pWDA = NULL;
16836 void *pCallbackContext;
16837 tpAniSirGlobal pMac;
16838
16839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16840 "%s: ", __func__);
16841 if (NULL == pWdaParams)
16842 {
16843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16844 "%s: pWdaParams received NULL", __func__);
16845 VOS_ASSERT(0);
16846 return;
16847 }
16848
16849 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
16850
16851 if (NULL == pWDA)
16852 {
16853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16854 "%s: pWDA received NULL", __func__);
16855 VOS_ASSERT(0);
16856 goto error;
16857 }
16858
16859 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16860 if (NULL == pMac)
16861 {
16862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16863 "%s:pMac is NULL", __func__);
16864 VOS_ASSERT(0);
16865 goto error;
16866 }
16867
16868 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
16869
16870 if (pMac->sme.pEXTScanIndCb)
16871 {
16872 pMac->sme.pEXTScanIndCb(pCallbackContext,
16873 WDA_EXTSCAN_GET_CACHED_RESULTS_RSP,
16874 pEventData);
16875 }
16876 else
16877 {
16878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16879 "%s:HDD callback is null", __func__);
16880 VOS_ASSERT(0);
16881 }
16882
16883
16884error:
16885
16886 if (pWdaParams->wdaWdiApiMsgParam != NULL)
16887 {
16888 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16889 }
16890 if (pWdaParams->wdaMsgParam != NULL)
16891 {
16892 vos_mem_free(pWdaParams->wdaMsgParam);
16893 }
16894 vos_mem_free(pWdaParams) ;
16895
16896 return;
16897}
16898
16899/*==========================================================================
16900 FUNCTION WDA_EXTScanGetCapabilitiesRspCallback
16901
16902 DESCRIPTION
16903 API to send EXTScan Get Capabilities Response to HDD
16904
16905 PARAMETERS
16906 pEventData: Response from FW
16907 pUserData:
16908===========================================================================*/
16909void WDA_EXTScanGetCapabilitiesRspCallback(void *pEventData, void* pUserData)
16910{
16911 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16912 tWDA_CbContext *pWDA = NULL;
16913 void *pCallbackContext;
16914 tpAniSirGlobal pMac;
16915
16916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16917 "%s:", __func__);
16918 if (NULL == pWdaParams)
16919 {
16920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16921 "%s: pWdaParams received NULL", __func__);
16922 VOS_ASSERT(0);
16923 return;
16924 }
16925
16926 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
16927
16928 if (NULL == pWDA)
16929 {
16930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16931 "%s: pWDA received NULL", __func__);
16932 VOS_ASSERT(0);
16933 goto error;
16934 }
16935
16936 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16937 if (NULL == pMac)
16938 {
16939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16940 "%s:pMac is NULL", __func__);
16941 VOS_ASSERT(0);
16942 goto error;
16943 }
16944
16945 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
16946
16947 if (pMac->sme.pEXTScanIndCb)
16948 {
16949 pMac->sme.pEXTScanIndCb(pCallbackContext,
16950 WDA_EXTSCAN_GET_CAPABILITIES_RSP,
16951 pEventData);
16952 }
16953 else
16954 {
16955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16956 "%s:HDD callback is null", __func__);
16957 VOS_ASSERT(0);
16958 }
16959
16960
16961error:
16962
16963 if (pWdaParams->wdaWdiApiMsgParam != NULL)
16964 {
16965 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16966 }
16967 if (pWdaParams->wdaMsgParam != NULL)
16968 {
16969 vos_mem_free(pWdaParams->wdaMsgParam);
16970 }
16971 vos_mem_free(pWdaParams) ;
16972
16973 return;
16974}
16975
16976/*==========================================================================
16977 FUNCTION WDA_EXTScanSetBSSIDHotlistRspCallback
16978
16979 DESCRIPTION
16980 API to send EXTScan Set BSSID Hotlist Response to HDD
16981
16982 PARAMETERS
16983 pEventData: Response from FW
16984 pUserData:
16985===========================================================================*/
16986void WDA_EXTScanSetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
16987{
16988 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16989 tWDA_CbContext *pWDA = NULL;
16990 void *pCallbackContext;
16991 tpAniSirGlobal pMac;
16992
16993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16994 "%s: ", __func__);
16995 if (NULL == pWdaParams)
16996 {
16997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16998 "%s: pWdaParams received NULL", __func__);
16999 VOS_ASSERT(0) ;
17000 return;
17001 }
17002
17003 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17004
17005 if (NULL == pWDA)
17006 {
17007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17008 "%s: pWDA received NULL", __func__);
17009 VOS_ASSERT(0);
17010 goto error;
17011 }
17012
17013 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17014 if (NULL == pMac)
17015 {
17016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17017 "%s:pMac is NULL", __func__);
17018 VOS_ASSERT(0);
17019 goto error;
17020 }
17021
17022 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17023
17024 if (pMac->sme.pEXTScanIndCb)
17025 {
17026 pMac->sme.pEXTScanIndCb(pCallbackContext,
17027 WDA_EXTSCAN_SET_BSSID_HOTLIST_RSP,
17028 pEventData);
17029 }
17030 else
17031 {
17032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17033 "%s:HDD callback is null", __func__);
17034 VOS_ASSERT(0);
17035 }
17036
17037
17038error:
17039
17040 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17041 {
17042 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17043 }
17044 if (pWdaParams->wdaMsgParam != NULL)
17045 {
17046 vos_mem_free(pWdaParams->wdaMsgParam);
17047 }
17048 vos_mem_free(pWdaParams) ;
17049
17050 return;
17051}
17052
17053/*==========================================================================
17054 FUNCTION WDA_EXTScanResetBSSIDHotlistRspCallback
17055
17056 DESCRIPTION
17057 API to send EXTScan ReSet BSSID Hotlist Response to HDD
17058
17059 PARAMETERS
17060 pEventData: Response from FW
17061 pUserData:
17062===========================================================================*/
17063void WDA_EXTScanResetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
17064{
17065 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17066 tWDA_CbContext *pWDA = NULL;
17067 void *pCallbackContext;
17068 tpAniSirGlobal pMac;
17069
17070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17071 "%s:", __func__);
17072 if (NULL == pWdaParams)
17073 {
17074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17075 "%s: pWdaParams received NULL", __func__);
17076 VOS_ASSERT(0) ;
17077 return;
17078 }
17079
17080 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17081
17082 if (NULL == pWDA)
17083 {
17084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17085 "%s: pWDA received NULL", __func__);
17086 VOS_ASSERT(0);
17087 goto error;
17088 }
17089
17090 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17091 if (NULL == pMac)
17092 {
17093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17094 "%s:pMac is NULL", __func__);
17095 VOS_ASSERT(0);
17096 goto error;
17097 }
17098
17099 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17100
17101 if (pMac->sme.pEXTScanIndCb)
17102 {
17103 pMac->sme.pEXTScanIndCb(pCallbackContext,
17104 WDA_EXTSCAN_RESET_BSSID_HOTLIST_RSP,
17105 pEventData);
17106 }
17107 else
17108 {
17109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17110 "%s:HDD callback is null", __func__);
17111 VOS_ASSERT(0);
17112 }
17113
17114
17115error:
17116
17117 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17118 {
17119 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17120 }
17121 if (pWdaParams->wdaMsgParam != NULL)
17122 {
17123 vos_mem_free(pWdaParams->wdaMsgParam);
17124 }
17125 vos_mem_free(pWdaParams) ;
17126
17127 return;
17128}
17129
17130/*==========================================================================
17131 FUNCTION WDA_EXTScanSetSignfRSSIChangeRspCallback
17132
17133 DESCRIPTION
17134 API to send EXTScan Set Significant RSSI Change RSP to HDD
17135
17136 PARAMETERS
17137 pEventData: Response from FW
17138 pUserData:
17139===========================================================================*/
17140void WDA_EXTScanSetSignfRSSIChangeRspCallback(void *pEventData, void* pUserData)
17141{
17142 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17143 tWDA_CbContext *pWDA = NULL;
17144 void *pCallbackContext;
17145 tpAniSirGlobal pMac;
17146
17147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17148 "%s:", __func__);
17149 if (NULL == pWdaParams)
17150 {
17151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17152 "%s: pWdaParams received NULL", __func__);
17153 VOS_ASSERT(0) ;
17154 return;
17155 }
17156
17157 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17158
17159 if (NULL == pWDA)
17160 {
17161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17162 "%s: pWDA received NULL", __func__);
17163 VOS_ASSERT(0);
17164 goto error;
17165 }
17166
17167 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17168 if (NULL == pMac)
17169 {
17170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17171 "%s:pMac is NULL", __func__);
17172 VOS_ASSERT(0);
17173 goto error;
17174 }
17175
17176 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17177
17178 if (pMac->sme.pEXTScanIndCb)
17179 {
17180 pMac->sme.pEXTScanIndCb(pCallbackContext,
17181 WDA_EXTSCAN_SET_SIGNF_RSSI_CHANGE_RSP,
17182 pEventData);
17183 }
17184 else
17185 {
17186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17187 "%s:HDD callback is null", __func__);
17188 VOS_ASSERT(0);
17189 }
17190
17191
17192error:
17193
17194 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17195 {
17196 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17197 }
17198 if (pWdaParams->wdaMsgParam != NULL)
17199 {
17200 vos_mem_free(pWdaParams->wdaMsgParam);
17201 }
17202 vos_mem_free(pWdaParams) ;
17203
17204 return;
17205}
17206
17207/*==========================================================================
17208 FUNCTION WDA_EXTScanResetSignfRSSIChangeRspCallback
17209
17210 DESCRIPTION
17211 API to send EXTScan Set Significant RSSI Change RSP to HDD
17212
17213 PARAMETERS
17214 pEventData: Response from FW
17215 pUserData:
17216===========================================================================*/
17217void WDA_EXTScanResetSignfRSSIChangeRspCallback(void *pEventData,
17218 void* pUserData)
17219{
17220 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17221 tWDA_CbContext *pWDA = NULL;
17222 void *pCallbackContext;
17223 tpAniSirGlobal pMac;
17224
17225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17226 "%s:", __func__);
17227 if (NULL == pWdaParams)
17228 {
17229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17230 "%s: pWdaParams received NULL", __func__);
17231 VOS_ASSERT(0) ;
17232 return;
17233 }
17234
17235 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17236
17237 if (NULL == pWDA)
17238 {
17239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17240 "%s: pWDA received NULL", __func__);
17241 VOS_ASSERT(0);
17242 goto error;
17243 }
17244
17245 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17246 if (NULL == pMac)
17247 {
17248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17249 "%s:pMac is NULL", __func__);
17250 VOS_ASSERT(0);
17251 goto error;
17252 }
17253
17254 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17255
17256 if (pMac->sme.pEXTScanIndCb)
17257 {
17258 pMac->sme.pEXTScanIndCb(pCallbackContext,
17259 WDA_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_RSP,
17260 pEventData);
17261 }
17262 else
17263 {
17264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17265 "%s:HDD callback is null", __func__);
17266 VOS_ASSERT(0);
17267 }
17268
17269
17270error:
17271
17272 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17273 {
17274 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17275 }
17276 if (pWdaParams->wdaMsgParam != NULL)
17277 {
17278 vos_mem_free(pWdaParams->wdaMsgParam);
17279 }
17280 vos_mem_free(pWdaParams) ;
17281
17282 return;
17283}
17284
17285/*==========================================================================
17286 FUNCTION WDA_ProcessEXTScanStartReq
17287
17288 DESCRIPTION
17289 API to send EXTScan Start Request to WDI
17290
17291 PARAMETERS
17292 pWDA: Pointer to WDA context
17293 wdaRequest: Pointer to EXTScan req parameters
17294===========================================================================*/
17295VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
17296 tSirEXTScanStartReqParams *wdaRequest)
17297{
17298 WDI_Status status = WDI_STATUS_SUCCESS;
17299 tWDA_ReqParams *pWdaParams;
17300
17301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17302 "%s: ", __func__);
17303 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17304 if (NULL == pWdaParams)
17305 {
17306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17307 "%s: VOS MEM Alloc Failure", __func__);
17308 VOS_ASSERT(0);
17309 return VOS_STATUS_E_NOMEM;
17310 }
17311 pWdaParams->pWdaContext = pWDA;
17312 pWdaParams->wdaMsgParam = wdaRequest;
17313 pWdaParams->wdaWdiApiMsgParam = NULL;
17314
17315 status = WDI_EXTScanStartReq((void *)wdaRequest,
17316 (WDI_EXTScanStartRspCb)WDA_EXTScanStartRspCallback,
17317 (void *)pWdaParams);
17318 if (IS_WDI_STATUS_FAILURE(status))
17319 {
17320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17321 "Failure to request. Free all the memory " );
17322 vos_mem_free(pWdaParams->wdaMsgParam);
17323 vos_mem_free(pWdaParams);
17324 }
17325 return CONVERT_WDI2VOS_STATUS(status);
17326}
17327
17328/*==========================================================================
17329 FUNCTION WDA_ProcessEXTScanStopReq
17330
17331 DESCRIPTION
17332 API to send EXTScan Start Request to WDI
17333
17334 PARAMETERS
17335 pWDA: Pointer to WDA context
17336 wdaRequest: Pointer to EXTScan req parameters
17337===========================================================================*/
17338VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
17339 tSirEXTScanStopReqParams *wdaRequest)
17340{
17341 WDI_Status status = WDI_STATUS_SUCCESS;
17342 tWDA_ReqParams *pWdaParams;
17343
17344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17345 "%s:", __func__);
17346 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17347 if (NULL == pWdaParams)
17348 {
17349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17350 "%s: VOS MEM Alloc Failure", __func__);
17351 VOS_ASSERT(0);
17352 return VOS_STATUS_E_NOMEM;
17353 }
17354 pWdaParams->pWdaContext = pWDA;
17355 pWdaParams->wdaMsgParam = wdaRequest;
17356 pWdaParams->wdaWdiApiMsgParam = NULL;
17357
17358 status = WDI_EXTScanStopReq((void *)wdaRequest,
17359 (WDI_EXTScanStopRspCb)WDA_EXTScanStopRspCallback,
17360 (void *)pWdaParams);
17361 if (IS_WDI_STATUS_FAILURE(status))
17362 {
17363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17364 "Failure to request. Free all the memory " );
17365 vos_mem_free(pWdaParams->wdaMsgParam);
17366 vos_mem_free(pWdaParams);
17367 }
17368 return CONVERT_WDI2VOS_STATUS(status);
17369}
17370
17371/*==========================================================================
17372 FUNCTION WDA_ProcessEXTScanGetCachedResultsReq
17373
17374 DESCRIPTION
17375 API to send EXTScan Get Cached Results Request to WDI
17376
17377 PARAMETERS
17378 pWDA: Pointer to WDA context
17379 wdaRequest: Pointer to EXTScan req parameters
17380===========================================================================*/
17381VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
17382 tSirEXTScanGetCachedResultsReqParams *wdaRequest)
17383{
17384 WDI_Status status = WDI_STATUS_SUCCESS;
17385 tWDA_ReqParams *pWdaParams;
17386
17387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17388 "%s: ", __func__);
17389 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17390 if (NULL == pWdaParams)
17391 {
17392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17393 "%s: VOS MEM Alloc Failure", __func__);
17394 VOS_ASSERT(0);
17395 return VOS_STATUS_E_NOMEM;
17396 }
17397 pWdaParams->pWdaContext = pWDA;
17398 pWdaParams->wdaMsgParam = wdaRequest;
17399 pWdaParams->wdaWdiApiMsgParam = NULL;
17400
17401 status = WDI_EXTScanGetCachedResultsReq((void *)wdaRequest,
17402 (WDI_EXTScanGetCachedResultsRspCb)WDA_EXTScanGetCachedResultsRspCallback,
17403 (void *)pWdaParams);
17404 if (IS_WDI_STATUS_FAILURE(status))
17405 {
17406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17407 "Failure to request. Free all the memory " );
17408 vos_mem_free(pWdaParams->wdaMsgParam);
17409 vos_mem_free(pWdaParams);
17410 }
17411 return CONVERT_WDI2VOS_STATUS(status);
17412}
17413
17414/*==========================================================================
17415 FUNCTION WDA_ProcessEXTScanGetCapabilitiesReq
17416
17417 DESCRIPTION
17418 API to send EXTScan Get Capabilities Request to WDI
17419
17420 PARAMETERS
17421 pWDA: Pointer to WDA context
17422 wdaRequest: Pointer to EXTScan req parameters
17423===========================================================================*/
17424VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
17425 tSirGetEXTScanCapabilitiesReqParams *wdaRequest)
17426{
17427 WDI_Status status = WDI_STATUS_SUCCESS;
17428 tWDA_ReqParams *pWdaParams;
17429
17430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17431 "%s:", __func__);
17432 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17433 if (NULL == pWdaParams)
17434 {
17435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17436 "%s: VOS MEM Alloc Failure", __func__);
17437 VOS_ASSERT(0);
17438 return VOS_STATUS_E_NOMEM;
17439 }
17440 pWdaParams->pWdaContext = pWDA;
17441 pWdaParams->wdaMsgParam = wdaRequest;
17442 pWdaParams->wdaWdiApiMsgParam = NULL;
17443
17444 status = WDI_EXTScanGetCapabilitiesReq((void *)wdaRequest,
17445 (WDI_EXTScanGetCapabilitiesRspCb)WDA_EXTScanGetCapabilitiesRspCallback,
17446 (void *)pWdaParams);
17447 if (IS_WDI_STATUS_FAILURE(status))
17448 {
17449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17450 "Failure to request. Free all the memory " );
17451 vos_mem_free(pWdaParams->wdaMsgParam);
17452 vos_mem_free(pWdaParams);
17453 }
17454 return CONVERT_WDI2VOS_STATUS(status);
17455}
17456
17457/*==========================================================================
17458 FUNCTION WDA_ProcessEXTScanSetBSSIDHotlistReq
17459
17460 DESCRIPTION
17461 API to send Set BSSID Hotlist Request to WDI
17462
17463 PARAMETERS
17464 pWDA: Pointer to WDA context
17465 wdaRequest: Pointer to EXTScan req parameters
17466===========================================================================*/
17467VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
17468 tSirEXTScanSetBssidHotListReqParams *wdaRequest)
17469{
17470 WDI_Status status = WDI_STATUS_SUCCESS;
17471 tWDA_ReqParams *pWdaParams;
17472
17473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17474 "%s: ", __func__);
17475 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17476 if (NULL == pWdaParams)
17477 {
17478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17479 "%s: VOS MEM Alloc Failure", __func__);
17480 VOS_ASSERT(0);
17481 return VOS_STATUS_E_NOMEM;
17482 }
17483 pWdaParams->pWdaContext = pWDA;
17484 pWdaParams->wdaMsgParam = wdaRequest;
17485 pWdaParams->wdaWdiApiMsgParam = NULL;
17486
17487 status = WDI_EXTScanSetBSSIDHotlistReq((void *)wdaRequest,
17488 (WDI_EXTScanSetBSSIDHotlistRspCb)WDA_EXTScanSetBSSIDHotlistRspCallback,
17489 (void *)pWdaParams);
17490 if (IS_WDI_STATUS_FAILURE(status))
17491 {
17492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17493 "Failure to request. Free all the memory " );
17494 vos_mem_free(pWdaParams->wdaMsgParam);
17495 vos_mem_free(pWdaParams);
17496 }
17497 return CONVERT_WDI2VOS_STATUS(status);
17498}
17499
17500/*==========================================================================
17501 FUNCTION WDA_ProcessEXTScanReSetBSSIDHotlistReq
17502
17503 DESCRIPTION
17504 API to send Reset BSSID Hotlist Request to WDI
17505
17506 PARAMETERS
17507 pWDA: Pointer to WDA context
17508 wdaRequest: Pointer to EXTScan req parameters
17509===========================================================================*/
17510VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
17511 tSirEXTScanResetBssidHotlistReqParams *wdaRequest)
17512{
17513 WDI_Status status = WDI_STATUS_SUCCESS;
17514 tWDA_ReqParams *pWdaParams;
17515
17516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17517 "%s:", __func__);
17518 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17519 if (NULL == pWdaParams)
17520 {
17521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17522 "%s: VOS MEM Alloc Failure", __func__);
17523 VOS_ASSERT(0);
17524 return VOS_STATUS_E_NOMEM;
17525 }
17526 pWdaParams->pWdaContext = pWDA;
17527 pWdaParams->wdaMsgParam = wdaRequest;
17528 pWdaParams->wdaWdiApiMsgParam = NULL;
17529
17530 status = WDI_EXTScanResetBSSIDHotlistReq((void *)wdaRequest,
17531 (WDI_EXTScanResetBSSIDHotlistRspCb)WDA_EXTScanResetBSSIDHotlistRspCallback,
17532 (void *)pWdaParams);
17533 if (IS_WDI_STATUS_FAILURE(status))
17534 {
17535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17536 "Failure to request. Free all the memory " );
17537 vos_mem_free(pWdaParams->wdaMsgParam);
17538 vos_mem_free(pWdaParams);
17539 }
17540 return CONVERT_WDI2VOS_STATUS(status);
17541}
17542
17543/*==========================================================================
17544 FUNCTION WDA_ProcessEXTScanSetSignfRSSIChangeReq
17545
17546 DESCRIPTION
17547 API to send Set Significant RSSI Change Request to WDI
17548
17549 PARAMETERS
17550 pWDA: Pointer to WDA context
17551 wdaRequest: Pointer to EXTScan req parameters
17552===========================================================================*/
17553VOS_STATUS WDA_ProcessEXTScanSetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
17554 tSirEXTScanSetSignificantChangeReqParams *wdaRequest)
17555{
17556 WDI_Status status = WDI_STATUS_SUCCESS;
17557 tWDA_ReqParams *pWdaParams;
17558
17559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17560 "%s: ", __func__);
17561 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17562 if (NULL == pWdaParams)
17563 {
17564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17565 "%s: VOS MEM Alloc Failure", __func__);
17566 VOS_ASSERT(0);
17567 return VOS_STATUS_E_NOMEM;
17568 }
17569 pWdaParams->pWdaContext = pWDA;
17570 pWdaParams->wdaMsgParam = wdaRequest;
17571 pWdaParams->wdaWdiApiMsgParam = NULL;
17572
17573 status = WDI_EXTScanSetSignfRSSIChangeReq((void *)wdaRequest,
17574 (WDI_EXTScanSetSignfRSSIChangeRspCb)WDA_EXTScanSetSignfRSSIChangeRspCallback,
17575 (void *)pWdaParams);
17576 if (IS_WDI_STATUS_FAILURE(status))
17577 {
17578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17579 "Failure to request. Free all the memory " );
17580 vos_mem_free(pWdaParams->wdaMsgParam);
17581 vos_mem_free(pWdaParams);
17582 }
17583 return CONVERT_WDI2VOS_STATUS(status);
17584}
17585
17586/*==========================================================================
17587 FUNCTION WDA_ProcessEXTScanResetSignfRSSIChangeReq
17588
17589 DESCRIPTION
17590 API to send Reset Significant RSSI Change Request to WDI
17591
17592 PARAMETERS
17593 pWDA: Pointer to WDA context
17594 wdaRequest: Pointer to EXTScan req parameters
17595===========================================================================*/
17596VOS_STATUS WDA_ProcessEXTScanResetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
17597 tSirEXTScanResetSignificantChangeReqParams *wdaRequest)
17598{
17599 WDI_Status status = WDI_STATUS_SUCCESS;
17600 tWDA_ReqParams *pWdaParams;
17601
17602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17603 "%s:", __func__);
17604 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17605 if (NULL == pWdaParams)
17606 {
17607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17608 "%s: VOS MEM Alloc Failure", __func__);
17609 VOS_ASSERT(0);
17610 return VOS_STATUS_E_NOMEM;
17611 }
17612 pWdaParams->pWdaContext = pWDA;
17613 pWdaParams->wdaMsgParam = wdaRequest;
17614 pWdaParams->wdaWdiApiMsgParam = NULL;
17615
17616 status = WDI_EXTScanResetSignfRSSIChangeReq((void *)wdaRequest,
17617 (WDI_EXTScanResetSignfRSSIChangeRspCb)
17618 WDA_EXTScanResetSignfRSSIChangeRspCallback,
17619 (void *)pWdaParams);
17620 if (IS_WDI_STATUS_FAILURE(status))
17621 {
17622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17623 "Failure to request. Free all the memory " );
17624 vos_mem_free(pWdaParams->wdaMsgParam);
17625 vos_mem_free(pWdaParams);
17626 }
17627 return CONVERT_WDI2VOS_STATUS(status);
17628}
17629#endif /* WLAN_FEATURE_EXTSCAN */
17630
Sunil Duttbd736ed2014-05-26 21:19:41 +053017631#ifdef WLAN_FEATURE_LINK_LAYER_STATS
17632
17633/*==========================================================================
17634 FUNCTION WDA_LLStatsSetRspCallback
17635
17636 DESCRIPTION
17637 API to process set link layer statistics response from FW
17638
17639 PARAMETERS
17640 pRsp: Pointer to set link layer statistics response
17641 pUserData: Pointer to user data
17642
17643 RETURN VALUE
17644 NONE
17645
17646===========================================================================*/
17647void WDA_LLStatsSetRspCallback(void *pEventData, void* pUserData)
17648{
17649 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17650
17651
17652 if (NULL == pWdaParams)
17653 {
17654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17655 "%s: pWdaParams received NULL", __func__);
17656 VOS_ASSERT(0) ;
17657 return ;
17658 }
17659
17660 /* Do not need to send notification to upper layer
17661 * Just free allocated resources */
17662 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17663 {
17664 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17665 }
17666 if (pWdaParams->wdaMsgParam != NULL)
17667 {
17668 vos_mem_free(pWdaParams->wdaMsgParam);
17669 }
17670 vos_mem_free(pWdaParams) ;
17671
17672 return;
17673}
17674
17675/*==========================================================================
17676 FUNCTION WDA_ProcessLLStatsSetReq
17677
17678 DESCRIPTION
17679 API to send Set Link Layer Stats request to WDI
17680
17681 PARAMETERS
17682 pWDA: Pointer to WDA context
17683 wdaRequest: Pointer to set Link Layer Stats req parameters
17684===========================================================================*/
17685VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
17686 tSirLLStatsSetReq *wdaRequest)
17687{
17688 WDI_Status status = WDI_STATUS_SUCCESS;
17689 tWDA_ReqParams *pWdaParams;
17690
17691 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17692 if (NULL == pWdaParams)
17693 {
17694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17695 "%s: VOS MEM Alloc Failure", __func__);
17696 VOS_ASSERT(0);
17697 return VOS_STATUS_E_NOMEM;
17698 }
17699 pWdaParams->pWdaContext = pWDA;
17700 pWdaParams->wdaMsgParam = wdaRequest;
17701 pWdaParams->wdaWdiApiMsgParam = NULL;
17702
17703 status = WDI_LLStatsSetReq((void *)wdaRequest,
17704 (WDI_LLStatsSetRspCb)WDA_LLStatsSetRspCallback,
17705 (void *)pWdaParams);
17706 if (IS_WDI_STATUS_FAILURE(status))
17707 {
17708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17709 "Failure to request. Free all the memory " );
17710 vos_mem_free(pWdaParams->wdaMsgParam);
17711 vos_mem_free(pWdaParams);
17712 }
17713 return CONVERT_WDI2VOS_STATUS(status);
17714}
17715
17716/*==========================================================================
17717 FUNCTION WDA_LLStatsGetRspCallback
17718
17719 DESCRIPTION
17720 API to process get link layer statistics response from FW
17721
17722 PARAMETERS
17723 pRsp: Pointer to get link layer statistics response
17724 pUserData: Pointer to user data
17725
17726 RETURN VALUE
17727 NONE
17728
17729===========================================================================*/
17730void WDA_LLStatsGetRspCallback(void *pEventData, void* pUserData)
17731{
17732 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17733
17734 if (NULL == pWdaParams)
17735 {
17736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17737 "%s: pWdaParams received NULL", __func__);
17738 VOS_ASSERT(0) ;
17739 return ;
17740 }
17741
17742 /* Do not need to send notification to upper layer
17743 * Just free allocated resources */
17744 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17745 {
17746 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17747 }
17748 if (pWdaParams->wdaMsgParam != NULL)
17749 {
17750 vos_mem_free(pWdaParams->wdaMsgParam);
17751 }
17752 vos_mem_free(pWdaParams) ;
17753
17754 return;
17755}
17756
17757/*==========================================================================
17758 FUNCTION WDA_ProcessLLStatsGetReq
17759
17760 DESCRIPTION
17761 API to send Get Link Layer Stats request to WDI
17762
17763 PARAMETERS
17764 pWDA: Pointer to WDA context
17765 wdaRequest: Pointer to get Link Layer Stats req parameters
17766===========================================================================*/
17767VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
17768 tSirLLStatsGetReq *wdaRequest)
17769{
17770 WDI_Status status = WDI_STATUS_SUCCESS;
17771 tWDA_ReqParams *pWdaParams;
17772
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_LLStatsGetReq((void *) wdaRequest,
17786 (WDI_LLStatsGetRspCb)WDA_LLStatsGetRspCallback,
17787 (void *)pWdaParams);
17788 if (IS_WDI_STATUS_FAILURE(status))
17789 {
17790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17791 "Failure to request. Free all the memory " );
17792 vos_mem_free(pWdaParams->wdaMsgParam);
17793 vos_mem_free(pWdaParams);
17794 }
17795 return CONVERT_WDI2VOS_STATUS(status);
17796}
17797
17798/*==========================================================================
17799 FUNCTION WDA_LLStatsClearRspCallback
17800
17801 DESCRIPTION
17802 API to process clear link layer statistics response from FW
17803
17804 PARAMETERS
17805 pRsp: Pointer to clear link layer statistics response
17806 pUserData: Pointer to user data
17807
17808 RETURN VALUE
17809 NONE
17810
17811===========================================================================*/
17812void WDA_LLStatsClearRspCallback(void *pEventData, void* pUserData)
17813{
17814 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17815
17816
17817 if (NULL == pWdaParams)
17818 {
17819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17820 "%s: pWdaParams received NULL", __func__);
17821 VOS_ASSERT(0) ;
17822 return ;
17823 }
17824 /* Do not need to send notification to upper layer
17825 * Just free allocated resources */
17826 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17827 {
17828 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17829 }
17830 if (pWdaParams->wdaMsgParam != NULL)
17831 {
17832 vos_mem_free(pWdaParams->wdaMsgParam);
17833 }
17834 vos_mem_free(pWdaParams) ;
17835 return;
17836}
17837
17838/*==========================================================================
17839 FUNCTION WDA_ProcessLLStatsClearReq
17840
17841 DESCRIPTION
17842 API to send Clear Link Layer Stats request to WDI
17843
17844 PARAMETERS
17845 pWDA: Pointer to WDA context
17846 wdaRequest: Pointer to earLink Layer Stats req
17847===========================================================================*/
17848VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
17849 tSirLLStatsClearReq *wdaRequest)
17850{
17851 WDI_Status status = WDI_STATUS_SUCCESS;
17852 tWDA_ReqParams *pWdaParams;
17853
17854 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17855 if (NULL == pWdaParams)
17856 {
17857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17858 "%s: VOS MEM Alloc Failure", __func__);
17859 VOS_ASSERT(0);
17860 return VOS_STATUS_E_NOMEM;
17861 }
17862 pWdaParams->pWdaContext = pWDA;
17863 pWdaParams->wdaMsgParam = wdaRequest;
17864 pWdaParams->wdaWdiApiMsgParam = NULL;
17865
17866 status = WDI_LLStatsClearReq((void *) wdaRequest,
17867 (WDI_LLStatsClearRspCb)WDA_LLStatsClearRspCallback,
17868 (void *)pWdaParams);
17869 if (IS_WDI_STATUS_FAILURE(status))
17870 {
17871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17872 "Failure to request. Free all the memory " );
17873 vos_mem_free(pWdaParams->wdaMsgParam);
17874 vos_mem_free(pWdaParams);
17875 }
17876 return CONVERT_WDI2VOS_STATUS(status);
17877}
17878
17879#endif /* WLAN_FEATURE_LINK_LAYER_STATS */