blob: a0e72b5b7d374694e1e097c96b9298af0be52451 [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,
c_hpothu86feba52014-10-28 15:51:18 +05309809 "Failure in host offload REQ WDI API, free all the memory %d",
9810 wstatus);
Jeff Johnson43971f52012-07-17 12:26:56 -07009811 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009812 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9813 vos_mem_free(pWdaParams->wdaMsgParam);
9814 vos_mem_free(pWdaParams) ;
9815 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009816 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009817
9818}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009819/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009820 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009821 *
9822 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009823void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009824{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009825 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9826
Jeff Johnson295189b2012-06-20 16:38:30 -07009827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009828 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009829
9830 if(NULL == pWdaParams)
9831 {
9832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009833 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009834 VOS_ASSERT(0) ;
9835 return ;
9836 }
9837
9838 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9839 vos_mem_free(pWdaParams->wdaMsgParam);
9840 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009841
Jeff Johnson295189b2012-06-20 16:38:30 -07009842 //print a msg, nothing else to do
9843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009844 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009845 return ;
9846}
Jeff Johnson295189b2012-06-20 16:38:30 -07009847/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009848 * FUNCTION: WDA_KeepAliveReqCallback
9849 * Free memory.
9850 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
9851 */
9852void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
9853{
9854 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9855
9856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9857 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9858
9859 if(NULL == pWdaParams)
9860 {
9861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9862 "%s: pWdaParams received NULL", __func__);
9863 VOS_ASSERT(0);
9864 return;
9865 }
9866
9867 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9868 {
9869 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9870 vos_mem_free(pWdaParams->wdaMsgParam);
9871 vos_mem_free(pWdaParams);
9872 }
9873
9874 return;
9875}
9876/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009877 * FUNCTION: WDA_ProcessKeepAliveReq
9878 * Request to WDI to send Keep Alive packets to minimize unnecessary host
9879 * wakeup due to broadcast traffic (sta mode).
9880 */
9881VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
9882 tSirKeepAliveReq *pKeepAliveParams)
9883{
9884 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009885 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009886 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
9887 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
9888 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009889 tWDA_ReqParams *pWdaParams;
9890
Jeff Johnson295189b2012-06-20 16:38:30 -07009891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009892 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009893 if(NULL == wdiKeepAliveInfo)
9894 {
9895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009896 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009897 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009898 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009899 return VOS_STATUS_E_NOMEM;
9900 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009901
9902 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9903 if(NULL == pWdaParams)
9904 {
9905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009906 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009907 VOS_ASSERT(0);
9908 vos_mem_free(wdiKeepAliveInfo);
9909 vos_mem_free(pKeepAliveParams);
9910 return VOS_STATUS_E_NOMEM;
9911 }
9912
Jeff Johnson295189b2012-06-20 16:38:30 -07009913 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
9914 pKeepAliveParams->packetType;
9915 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
9916 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009917
9918 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
9919 pKeepAliveParams->bssId,
9920 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07009921
9922 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
9923 {
9924 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
9925 pKeepAliveParams->hostIpv4Addr,
9926 SIR_IPV4_ADDR_LEN);
9927 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
9928 pKeepAliveParams->destIpv4Addr,
9929 SIR_IPV4_ADDR_LEN);
9930 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
9931 pKeepAliveParams->destMacAddr,
9932 SIR_MAC_ADDR_LEN);
9933 }
9934 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
9935 {
9936 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
9937 SIR_IPV4_ADDR_LEN,
9938 0);
9939 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
9940 SIR_IPV4_ADDR_LEN,
9941 0);
9942 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
9943 SIR_MAC_ADDR_LEN,
9944 0);
9945 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009946 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
9947 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009948
Jeff Johnson295189b2012-06-20 16:38:30 -07009949 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009950 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009951 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009952 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
9953 pWdaParams->pWdaContext = pWDA;
9954
Jeff Johnson295189b2012-06-20 16:38:30 -07009955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
9956 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
9957 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
9958 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
9959 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
9960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
9961 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
9962 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
9963 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
9964 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
9965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9966 "WDA DMAC : %d:%d:%d:%d:%d:%d",
9967 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
9968 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
9969 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
9970 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
9971 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
9972 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
9973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9974 "TimePeriod %d PacketType %d",
9975 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
9976 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -07009977 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009978 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009979
Jeff Johnson43971f52012-07-17 12:26:56 -07009980 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009981 {
9982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9983 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009984 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009985 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9986 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009987 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009988 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009989 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009990
9991}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009992/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009993 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009994 *
9995 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009996void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009997 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
9998 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009999{
10000 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010002 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010003 if(NULL == pWdaParams)
10004 {
10005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010006 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010007 VOS_ASSERT(0) ;
10008 return ;
10009 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010010 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10011 vos_mem_free(pWdaParams->wdaMsgParam);
10012 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010013 return ;
10014}
Jeff Johnson295189b2012-06-20 16:38:30 -070010015/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010016 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
10017 * Free memory.
10018 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
10019 */
10020void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
10021{
10022 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10023
10024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10025 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10026
10027 if(NULL == pWdaParams)
10028 {
10029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10030 "%s: pWdaParams received NULL", __func__);
10031 VOS_ASSERT(0);
10032 return;
10033 }
10034
10035 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10036 {
10037 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10038 vos_mem_free(pWdaParams->wdaMsgParam);
10039 vos_mem_free(pWdaParams);
10040 }
10041
10042 return;
10043}
10044
10045/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010046 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
10047 * Request to WDI to add WOWL Bcast pattern
10048 */
10049VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
10050 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
10051{
10052 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010053 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010054 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
10055 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
10056 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
10057 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010059 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010060 if(NULL == wdiWowlAddBcPtrnInfo)
10061 {
10062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010063 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010064 VOS_ASSERT(0);
10065 return VOS_STATUS_E_NOMEM;
10066 }
10067 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10068 if(NULL == pWdaParams)
10069 {
10070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010071 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010072 VOS_ASSERT(0);
10073 vos_mem_free(wdiWowlAddBcPtrnInfo);
10074 return VOS_STATUS_E_NOMEM;
10075 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010076 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
10077 pWowlAddBcPtrnParams->ucPatternId;
10078 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
10079 pWowlAddBcPtrnParams->ucPatternByteOffset;
10080 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
10081 pWowlAddBcPtrnParams->ucPatternMaskSize;
10082 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
10083 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -070010084 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
10085 {
10086 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
10087 pWowlAddBcPtrnParams->ucPattern,
10088 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
10089 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
10090 pWowlAddBcPtrnParams->ucPatternMask,
10091 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
10092 }
10093 else
10094 {
10095 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
10096 pWowlAddBcPtrnParams->ucPattern,
10097 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10098 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
10099 pWowlAddBcPtrnParams->ucPatternMask,
10100 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10101
10102 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
10103 pWowlAddBcPtrnParams->ucPatternExt,
10104 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10105 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
10106 pWowlAddBcPtrnParams->ucPatternMaskExt,
10107 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
10108 }
10109
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010110 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
10111 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
10112
Yue Ma7f44bbe2013-04-12 11:47:39 -070010113 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
10114 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010115 /* Store param pointer as passed in by caller */
10116 /* store Params pass it to WDI */
10117 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
10118 pWdaParams->pWdaContext = pWDA;
10119 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010120 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010121 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010122 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010123 {
10124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10125 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010126 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010127 vos_mem_free(pWdaParams->wdaMsgParam) ;
10128 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10129 vos_mem_free(pWdaParams) ;
10130 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010131 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010132
10133}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010134/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010135 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010136 *
10137 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010138void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010139 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
10140 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010141{
10142 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010144 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010145 if(NULL == pWdaParams)
10146 {
10147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010148 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010149 VOS_ASSERT(0) ;
10150 return ;
10151 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010152 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10153 vos_mem_free(pWdaParams->wdaMsgParam);
10154 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010155 return ;
10156}
Jeff Johnson295189b2012-06-20 16:38:30 -070010157/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010158 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
10159 * Free memory.
10160 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
10161 */
10162void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
10163{
10164 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10165
10166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10167 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10168
10169 if(NULL == pWdaParams)
10170 {
10171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10172 "%s: pWdaParams received NULL", __func__);
10173 VOS_ASSERT(0);
10174 return;
10175 }
10176
10177 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10178 {
10179 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10180 vos_mem_free(pWdaParams->wdaMsgParam);
10181 vos_mem_free(pWdaParams);
10182 }
10183
10184 return;
10185}
10186/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010187 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
10188 * Request to WDI to delete WOWL Bcast pattern
10189 */
10190VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
10191 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
10192{
10193 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010194 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010195 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
10196 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
10197 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
10198 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010200 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010201 if(NULL == wdiWowlDelBcPtrnInfo)
10202 {
10203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010204 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010205 VOS_ASSERT(0);
10206 return VOS_STATUS_E_NOMEM;
10207 }
10208 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10209 if(NULL == pWdaParams)
10210 {
10211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010212 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010213 VOS_ASSERT(0);
10214 vos_mem_free(wdiWowlDelBcPtrnInfo);
10215 return VOS_STATUS_E_NOMEM;
10216 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010217 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
10218 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010219
10220 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
10221 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
10222
Yue Ma7f44bbe2013-04-12 11:47:39 -070010223 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
10224 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010225 /* Store param pointer as passed in by caller */
10226 /* store Params pass it to WDI */
10227 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
10228 pWdaParams->pWdaContext = pWDA;
10229 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010230 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010231 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010232 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010233 {
10234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10235 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010236 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010237 vos_mem_free(pWdaParams->wdaMsgParam) ;
10238 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10239 vos_mem_free(pWdaParams) ;
10240 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010241 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010242
10243}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010244/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010245 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010246 *
10247 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010248void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010249{
10250 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10251 tWDA_CbContext *pWDA;
10252 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010254 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010255 if(NULL == pWdaParams)
10256 {
10257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010258 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010259 VOS_ASSERT(0) ;
10260 return ;
10261 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010262 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
10263 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
10264
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010265 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
10266
Jeff Johnson295189b2012-06-20 16:38:30 -070010267 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10268 vos_mem_free(pWdaParams) ;
10269
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010270 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010271 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -070010272 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010273 return ;
10274}
Jeff Johnson295189b2012-06-20 16:38:30 -070010275/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010276 * FUNCTION: WDA_WowlEnterReqCallback
10277 * Free memory and send WOWL Enter RSP back to PE.
10278 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
10279 */
10280void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
10281{
10282 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10283 tWDA_CbContext *pWDA;
10284 tSirHalWowlEnterParams *pWowlEnterParams;
10285
10286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10287 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10288
10289 if(NULL == pWdaParams)
10290 {
10291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10292 "%s: pWdaParams received NULL", __func__);
10293 VOS_ASSERT(0);
10294 return;
10295 }
10296
10297 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10298 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
10299 pWowlEnterParams->status = wdiStatus;
10300
10301 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10302 {
10303 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10304 vos_mem_free(pWdaParams);
10305 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
10306 }
10307
10308 return;
10309}
10310/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010311 * FUNCTION: WDA_ProcessWowlEnterReq
10312 * Request to WDI to enter WOWL
10313 */
10314VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
10315 tSirHalWowlEnterParams *pWowlEnterParams)
10316{
10317 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010318 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010319 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
10320 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
10321 sizeof(WDI_WowlEnterReqParamsType)) ;
10322 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010324 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010325 if(NULL == wdiWowlEnterInfo)
10326 {
10327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010328 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010329 VOS_ASSERT(0);
10330 return VOS_STATUS_E_NOMEM;
10331 }
10332 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10333 if(NULL == pWdaParams)
10334 {
10335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010336 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010337 VOS_ASSERT(0);
10338 vos_mem_free(wdiWowlEnterInfo);
10339 return VOS_STATUS_E_NOMEM;
10340 }
Kumar Anandaca924e2013-07-22 14:35:34 -070010341
10342 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
10343
Jeff Johnson295189b2012-06-20 16:38:30 -070010344 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
10345 pWowlEnterParams->magicPtrn,
10346 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010347 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
10348 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010349 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
10350 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010351 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
10352 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010353 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
10354 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010355 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
10356 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010357 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
10358 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010359 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
10360 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -070010361 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
10362 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -070010363#ifdef WLAN_WAKEUP_EVENTS
10364 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
10365 pWowlEnterParams->ucWoWEAPIDRequestEnable;
10366
10367 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
10368 pWowlEnterParams->ucWoWEAPOL4WayEnable;
10369
10370 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
10371 pWowlEnterParams->ucWowNetScanOffloadMatch;
10372
10373 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
10374 pWowlEnterParams->ucWowGTKRekeyError;
10375
10376 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
10377 pWowlEnterParams->ucWoWBSSConnLoss;
10378#endif // WLAN_WAKEUP_EVENTS
10379
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010380 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
10381 pWowlEnterParams->bssIdx;
10382
Yue Ma7f44bbe2013-04-12 11:47:39 -070010383 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
10384 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010385 /* Store param pointer as passed in by caller */
10386 /* store Params pass it to WDI */
10387 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
10388 pWdaParams->pWdaContext = pWDA;
10389 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010390 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010391 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010392 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010393 {
10394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10395 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010396 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010397 vos_mem_free(pWdaParams->wdaMsgParam) ;
10398 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10399 vos_mem_free(pWdaParams) ;
10400 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010401 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010402
10403}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010404/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010405 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010406 *
10407 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010408void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010409{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010410 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10411 tWDA_CbContext *pWDA;
10412 tSirHalWowlExitParams *pWowlExitParams;
10413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010414 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010415 if(NULL == pWdaParams)
10416 {
10417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010418 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010419 VOS_ASSERT(0) ;
10420 return ;
10421 }
10422 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
10423 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
10424
10425 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010426 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010427
10428 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10429 vos_mem_free(pWdaParams) ;
10430
Jeff Johnson295189b2012-06-20 16:38:30 -070010431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010432 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010433 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010434 return ;
10435}
Jeff Johnson295189b2012-06-20 16:38:30 -070010436/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010437 * FUNCTION: WDA_WowlExitReqCallback
10438 * Free memory and send WOWL Exit RSP back to PE.
10439 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
10440 */
10441void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
10442{
10443 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10444 tWDA_CbContext *pWDA;
10445 tSirHalWowlExitParams *pWowlExitParams;
10446
10447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10448 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10449
10450 if(NULL == pWdaParams)
10451 {
10452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10453 "%s: pWdaParams received NULL", __func__);
10454 VOS_ASSERT(0);
10455 return;
10456 }
10457
10458 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10459 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
10460 pWowlExitParams->status = wdiStatus;
10461
10462 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10463 {
10464 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10465 vos_mem_free(pWdaParams);
10466 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
10467 }
10468
10469 return;
10470}
10471/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010472 * FUNCTION: WDA_ProcessWowlExitReq
10473 * Request to WDI to add WOWL Bcast pattern
10474 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010475VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
10476 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010477{
10478 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010479 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010480 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
10481 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
10482 sizeof(WDI_WowlExitReqParamsType)) ;
10483 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010485 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010486 if(NULL == wdiWowlExitInfo)
10487 {
10488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010489 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010490 VOS_ASSERT(0);
10491 return VOS_STATUS_E_NOMEM;
10492 }
10493 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10494 if(NULL == pWdaParams)
10495 {
10496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010497 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010498 VOS_ASSERT(0);
10499 vos_mem_free(wdiWowlExitInfo);
10500 return VOS_STATUS_E_NOMEM;
10501 }
10502
10503 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
10504 pWowlExitParams->bssIdx;
10505
Yue Ma7f44bbe2013-04-12 11:47:39 -070010506 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
10507 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010508
10509 /* Store param pointer as passed in by caller */
10510 /* store Params pass it to WDI */
10511 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
10512 pWdaParams->pWdaContext = pWDA;
10513 pWdaParams->wdaMsgParam = pWowlExitParams;
10514
10515 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010516 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010517
Jeff Johnson43971f52012-07-17 12:26:56 -070010518 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010519 {
10520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10521 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010522 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010523 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10524 vos_mem_free(pWdaParams->wdaMsgParam);
10525 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010526 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010527 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010528}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010529/*
10530 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
10531 * Request to WDI to determine whether a given station is capable of
10532 * using HW-based frame translation
10533 */
10534v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
10535 tANI_U8 staIdx)
10536{
10537 return WDI_IsHwFrameTxTranslationCapable(staIdx);
10538}
Katya Nigam6201c3e2014-05-27 17:51:42 +053010539
10540/*
10541 * FUNCTION: WDA_IsSelfSTA
10542 * Request to WDI to determine whether a given STAID is self station
10543 * index.
10544 */
10545v_BOOL_t WDA_IsSelfSTA(v_PVOID_t pVosContext, tANI_U8 ucSTAIdx)
10546{
10547
10548 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
10549
Girish Gowli05cf44e2014-06-12 21:53:37 +053010550 if (NULL != pWDA)
10551 return WDI_IsSelfSTA(pWDA->pWdiContext,ucSTAIdx);
10552 else
10553 return VOS_TRUE;
Katya Nigam6201c3e2014-05-27 17:51:42 +053010554}
Jeff Johnson295189b2012-06-20 16:38:30 -070010555/*
10556 * FUNCTION: WDA_NvDownloadReqCallback
10557 * send NV Download RSP back to PE
10558 */
10559void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
10560 void* pUserData)
10561{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010562
10563 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
10564 tWDA_CbContext *pWDA;
10565
Jeff Johnson295189b2012-06-20 16:38:30 -070010566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010567 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010568
10569 if(NULL == pWdaParams)
10570 {
10571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010572 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010573 VOS_ASSERT(0) ;
10574 return ;
10575 }
10576
10577 pWDA = pWdaParams->pWdaContext;
10578
Jeff Johnson295189b2012-06-20 16:38:30 -070010579 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010580 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10581 vos_mem_free(pWdaParams);
10582
Jeff Johnson295189b2012-06-20 16:38:30 -070010583 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070010584 return ;
10585}
Jeff Johnson295189b2012-06-20 16:38:30 -070010586/*
10587 * FUNCTION: WDA_ProcessNvDownloadReq
10588 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
10589 */
10590VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
10591{
10592 /* Initialize the local Variables*/
10593 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
10594 v_VOID_t *pNvBuffer=NULL;
10595 v_SIZE_t bufferSize = 0;
10596 WDI_Status status = WDI_STATUS_E_FAILURE;
10597 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010598 tWDA_ReqParams *pWdaParams ;
10599
Jeff Johnson295189b2012-06-20 16:38:30 -070010600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010601 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010602 if(NULL == pWDA)
10603 {
10604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010605 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010606 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070010607 return VOS_STATUS_E_FAILURE;
10608 }
10609
10610 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -070010611 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
10612
Jeff Johnson295189b2012-06-20 16:38:30 -070010613 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
10614 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010615 if(NULL == wdiNvDownloadReqParam)
10616 {
10617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010618 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010619 VOS_ASSERT(0);
10620 return VOS_STATUS_E_NOMEM;
10621 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010622 /* Copy Params to wdiNvDownloadReqParam*/
10623 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
10624 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010625
10626 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10627 if(NULL == pWdaParams)
10628 {
10629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010630 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010631 VOS_ASSERT(0);
10632 vos_mem_free(wdiNvDownloadReqParam);
10633 return VOS_STATUS_E_NOMEM;
10634 }
10635
Jeff Johnson295189b2012-06-20 16:38:30 -070010636 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010637 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
10638 pWdaParams->wdaMsgParam = NULL;
10639 pWdaParams->pWdaContext = pWDA;
10640
10641
Jeff Johnson295189b2012-06-20 16:38:30 -070010642 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010643
Jeff Johnson295189b2012-06-20 16:38:30 -070010644 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010645 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
10646
Jeff Johnson295189b2012-06-20 16:38:30 -070010647 if(IS_WDI_STATUS_FAILURE(status))
10648 {
10649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10650 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010651 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10652 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010653 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010654 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010655}
10656/*
10657 * FUNCTION: WDA_FlushAcReqCallback
10658 * send Flush AC RSP back to TL
10659 */
10660void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
10661{
10662 vos_msg_t wdaMsg = {0} ;
10663 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10664 tFlushACReq *pFlushACReqParams;
10665 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010667 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010668 if(NULL == pWdaParams)
10669 {
10670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010671 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010672 VOS_ASSERT(0) ;
10673 return ;
10674 }
10675
10676 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
10677 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
10678 if(NULL == pFlushACRspParams)
10679 {
10680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010681 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010682 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010683 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010684 return ;
10685 }
10686 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
10687 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
10688 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
10689 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
10690 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010691 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010692 vos_mem_free(pWdaParams->wdaMsgParam) ;
10693 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10694 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010695 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
10696 wdaMsg.bodyptr = (void *)pFlushACRspParams;
10697 // POST message to TL
10698 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
10699
Jeff Johnson295189b2012-06-20 16:38:30 -070010700 return ;
10701}
Jeff Johnson295189b2012-06-20 16:38:30 -070010702/*
10703 * FUNCTION: WDA_ProcessFlushAcReq
10704 * Request to WDI to Update the DELBA REQ params.
10705 */
10706VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
10707 tFlushACReq *pFlushAcReqParams)
10708{
10709 WDI_Status status = WDI_STATUS_SUCCESS ;
10710 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
10711 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
10712 sizeof(WDI_FlushAcReqParamsType)) ;
10713 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010714 if(NULL == wdiFlushAcReqParam)
10715 {
10716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010717 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010718 VOS_ASSERT(0);
10719 return VOS_STATUS_E_NOMEM;
10720 }
10721 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10722 if(NULL == pWdaParams)
10723 {
10724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010725 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010726 VOS_ASSERT(0);
10727 vos_mem_free(wdiFlushAcReqParam);
10728 return VOS_STATUS_E_NOMEM;
10729 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010731 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010732 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
10733 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
10734 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
10735 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -070010736 /* Store Flush AC pointer, as this will be used for response */
10737 /* store Params pass it to WDI */
10738 pWdaParams->pWdaContext = pWDA;
10739 pWdaParams->wdaMsgParam = pFlushAcReqParams;
10740 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010741 status = WDI_FlushAcReq(wdiFlushAcReqParam,
10742 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010743 if(IS_WDI_STATUS_FAILURE(status))
10744 {
10745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10746 "Failure in Flush AC REQ Params WDI API, free all the memory " );
10747 vos_mem_free(pWdaParams->wdaMsgParam) ;
10748 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10749 vos_mem_free(pWdaParams) ;
10750 //TODO: respond to TL with failure
10751 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010752 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010753}
Jeff Johnson295189b2012-06-20 16:38:30 -070010754/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010755 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010756 *
10757 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010758void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010759{
10760 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10761 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -070010762 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010763
10764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010765 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010766 if(NULL == pWdaParams)
10767 {
10768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010769 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010770 VOS_ASSERT(0) ;
10771 return ;
10772 }
10773 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10774 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
10775 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
10776 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10777 {
10778 pWDA->wdaAmpSessionOn = VOS_FALSE;
10779 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010780 vos_mem_free(pWdaParams->wdaMsgParam) ;
10781 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10782 vos_mem_free(pWdaParams) ;
10783 /*
10784 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
10785 * param here
10786 */
Jeff Johnson295189b2012-06-20 16:38:30 -070010787 return ;
10788}
Yue Ma7f44bbe2013-04-12 11:47:39 -070010789/*
10790 * FUNCTION: WDA_BtAmpEventReqCallback
10791 * Free memory.
10792 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
10793 */
10794void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
10795{
10796 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10797 tWDA_CbContext *pWDA;
10798 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010799
Yue Ma7f44bbe2013-04-12 11:47:39 -070010800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10801 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10802
10803 if(NULL == pWdaParams)
10804 {
10805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10806 "%s: pWdaParams received NULL", __func__);
10807 VOS_ASSERT(0);
10808 return;
10809 }
10810
10811 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10812 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
10813
10814 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
10815 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10816 {
10817 pWDA->wdaAmpSessionOn = VOS_FALSE;
10818 }
10819
10820 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10821 {
10822 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10823 vos_mem_free(pWdaParams->wdaMsgParam);
10824 vos_mem_free(pWdaParams);
10825 }
10826
10827 return;
10828}
Jeff Johnson295189b2012-06-20 16:38:30 -070010829/*
10830 * FUNCTION: WDA_ProcessBtAmpEventReq
10831 * Request to WDI to Update with BT AMP events.
10832 */
10833VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
10834 tSmeBtAmpEvent *pBtAmpEventParams)
10835{
10836 WDI_Status status = WDI_STATUS_SUCCESS ;
10837 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
10838 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
10839 sizeof(WDI_BtAmpEventParamsType)) ;
10840 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010842 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010843 if(NULL == wdiBtAmpEventParam)
10844 {
10845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010846 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010847 VOS_ASSERT(0);
10848 return VOS_STATUS_E_NOMEM;
10849 }
10850 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10851 if(NULL == pWdaParams)
10852 {
10853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010854 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010855 VOS_ASSERT(0);
10856 vos_mem_free(wdiBtAmpEventParam);
10857 return VOS_STATUS_E_NOMEM;
10858 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010859 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
10860 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010861 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
10862 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010863 /* Store BT AMP event pointer, as this will be used for response */
10864 /* store Params pass it to WDI */
10865 pWdaParams->pWdaContext = pWDA;
10866 pWdaParams->wdaMsgParam = pBtAmpEventParams;
10867 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010868 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010869 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010870 if(IS_WDI_STATUS_FAILURE(status))
10871 {
10872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10873 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
10874 vos_mem_free(pWdaParams->wdaMsgParam) ;
10875 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10876 vos_mem_free(pWdaParams) ;
10877 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010878 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10879 {
10880 pWDA->wdaAmpSessionOn = VOS_TRUE;
10881 }
10882 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010883}
10884
Jeff Johnson295189b2012-06-20 16:38:30 -070010885/*
10886 * FUNCTION: WDA_FTMCommandReqCallback
10887 * Handle FTM CMD response came from HAL
10888 * Route responce to HDD FTM
10889 */
10890void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
10891 void *usrData)
10892{
10893 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010894 if((NULL == pWDA) || (NULL == ftmCmdRspData))
10895 {
10896 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010897 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010898 return;
10899 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010900 /* Release Current FTM Command Request */
10901 vos_mem_free(pWDA->wdaFTMCmdReq);
10902 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010903 /* Post FTM Responce to HDD FTM */
10904 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010905 return;
10906}
Jeff Johnson295189b2012-06-20 16:38:30 -070010907/*
10908 * FUNCTION: WDA_ProcessFTMCommand
10909 * Send FTM command to WDI
10910 */
10911VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
10912 tPttMsgbuffer *pPTTFtmCmd)
10913{
10914 WDI_Status status = WDI_STATUS_SUCCESS;
10915 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010916 ftmCMDReq = (WDI_FTMCommandReqType *)
10917 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
10918 if(NULL == ftmCMDReq)
10919 {
10920 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10921 "WDA FTM Command buffer alloc fail");
10922 return VOS_STATUS_E_NOMEM;
10923 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010924 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
10925 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070010926 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070010927 /* Send command to WDI */
10928 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070010929 return status;
10930}
Jeff Johnsone7245742012-09-05 17:12:55 -070010931#ifdef FEATURE_OEM_DATA_SUPPORT
10932/*
10933 * FUNCTION: WDA_StartOemDataReqCallback
10934 *
10935 */
10936void WDA_StartOemDataReqCallback(
10937 WDI_oemDataRspParamsType *wdiOemDataRspParams,
10938 void* pUserData)
10939{
10940 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010941 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10942 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -070010943 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010944
Jeff Johnsone7245742012-09-05 17:12:55 -070010945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010946 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010947
10948 if(NULL == pWdaParams)
10949 {
10950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010951 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010952 VOS_ASSERT(0) ;
10953 return ;
10954 }
10955 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10956
Jeff Johnsone7245742012-09-05 17:12:55 -070010957 if(NULL == pWDA)
10958 {
10959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010960 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010961 VOS_ASSERT(0);
10962 return ;
10963 }
10964
10965 /*
10966 * Allocate memory for response params sent to PE
10967 */
10968 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
10969
10970 // Check if memory is allocated for OemdataMeasRsp Params.
10971 if(NULL == pOemDataRspParams)
10972 {
10973 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10974 "OEM DATA WDA callback alloc fail");
10975 VOS_ASSERT(0) ;
10976 return;
10977 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010978
Jeff Johnsone7245742012-09-05 17:12:55 -070010979 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010980 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10981 vos_mem_free(pWdaParams->wdaMsgParam);
10982 vos_mem_free(pWdaParams) ;
10983
Jeff Johnsone7245742012-09-05 17:12:55 -070010984 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080010985 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070010986 * Also, here success always means that we have atleast one BSSID.
10987 */
10988 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
10989
10990 //enable Tx
10991 status = WDA_ResumeDataTx(pWDA);
10992 if(status != VOS_STATUS_SUCCESS)
10993 {
10994 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
10995 }
10996 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
10997 return ;
10998}
10999/*
11000 * FUNCTION: WDA_ProcessStartOemDataReq
11001 * Send Start Oem Data Req to WDI
11002 */
11003VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
11004 tStartOemDataReq *pOemDataReqParams)
11005{
11006 WDI_Status status = WDI_STATUS_SUCCESS;
11007 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011008 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070011009
11010 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
11011
11012 if(NULL == wdiOemDataReqParams)
11013 {
11014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011015 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011016 VOS_ASSERT(0);
11017 return VOS_STATUS_E_NOMEM;
11018 }
11019
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011020 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
11021 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
11022 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
11023 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070011024
11025 wdiOemDataReqParams->wdiReqStatusCB = NULL;
11026
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011027 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11028 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070011029 {
11030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011031 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011032 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011033 vos_mem_free(pOemDataReqParams);
11034 VOS_ASSERT(0);
11035 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070011036 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011037
Bernald44a1ae2013-01-09 08:30:39 -080011038 pWdaParams->pWdaContext = (void*)pWDA;
11039 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
11040 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011041
11042 status = WDI_StartOemDataReq(wdiOemDataReqParams,
11043 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011044
11045 if(IS_WDI_STATUS_FAILURE(status))
11046 {
11047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11048 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011049 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11050 vos_mem_free(pWdaParams->wdaMsgParam);
11051 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011052 }
11053 return CONVERT_WDI2VOS_STATUS(status) ;
11054}
11055#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070011056/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011057 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011058 *
11059 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011060void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011061{
11062 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011064 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011065 if(NULL == pWdaParams)
11066 {
11067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011068 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011069 VOS_ASSERT(0) ;
11070 return ;
11071 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011072
11073 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11074 vos_mem_free(pWdaParams->wdaMsgParam);
11075 vos_mem_free(pWdaParams);
11076
11077 return ;
11078}
11079/*
11080 * FUNCTION: WDA_SetTxPerTrackingReqCallback
11081 * Free memory.
11082 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
11083 */
11084void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
11085{
11086 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11087
11088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11089 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11090
11091 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070011092 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070011093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11094 "%s: pWdaParams received NULL", __func__);
11095 VOS_ASSERT(0);
11096 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011097 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011098
11099 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011100 {
11101 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011102 vos_mem_free(pWdaParams->wdaMsgParam);
11103 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011104 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070011105
11106 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011107}
Jeff Johnson295189b2012-06-20 16:38:30 -070011108#ifdef WLAN_FEATURE_GTK_OFFLOAD
11109/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011110 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011111 *
11112 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011113void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011114 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011115{
11116 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11117
11118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011119 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080011120 if(NULL == pWdaParams)
11121 {
11122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11123 "%s: pWdaParams received NULL", __func__);
11124 VOS_ASSERT(0);
11125 return;
11126 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011127
Jeff Johnson295189b2012-06-20 16:38:30 -070011128 vos_mem_free(pWdaParams->wdaMsgParam) ;
11129 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11130 vos_mem_free(pWdaParams) ;
11131
11132 //print a msg, nothing else to do
11133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011134 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011135
11136 return ;
11137}
Yue Ma7f44bbe2013-04-12 11:47:39 -070011138/*
11139 * FUNCTION: WDA_GTKOffloadReqCallback
11140 * Free memory.
11141 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
11142 */
11143void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
11144{
11145 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011146
Yue Ma7f44bbe2013-04-12 11:47:39 -070011147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11148 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11149
11150 if(NULL == pWdaParams)
11151 {
11152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11153 "%s: pWdaParams received NULL", __func__);
11154 VOS_ASSERT(0);
11155 return;
11156 }
11157
11158 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11159 {
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053011160 vos_mem_zero(pWdaParams->wdaWdiApiMsgParam,
11161 sizeof(WDI_GtkOffloadReqMsg));
11162 vos_mem_zero(pWdaParams->wdaMsgParam,
11163 sizeof(tSirGtkOffloadParams));
Yue Ma7f44bbe2013-04-12 11:47:39 -070011164 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11165 vos_mem_free(pWdaParams->wdaMsgParam);
11166 vos_mem_free(pWdaParams);
11167 }
11168
11169 return;
11170}
Jeff Johnson295189b2012-06-20 16:38:30 -070011171/*
11172 * FUNCTION: WDA_ProcessGTKOffloadReq
11173 * Request to WDI to set the filter to minimize unnecessary host wakeup due
11174 * to broadcast traffic (sta mode).
11175 */
11176VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
11177 tpSirGtkOffloadParams pGtkOffloadParams)
11178{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011179 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011180 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
11181 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
11182 sizeof(WDI_GtkOffloadReqMsg)) ;
11183 tWDA_ReqParams *pWdaParams ;
11184
11185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011186 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011187
11188 if(NULL == wdiGtkOffloadReqMsg)
11189 {
11190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011191 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011192 VOS_ASSERT(0);
11193 return VOS_STATUS_E_NOMEM;
11194 }
11195
11196 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11197 if(NULL == pWdaParams)
11198 {
11199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011200 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011201 VOS_ASSERT(0);
11202 vos_mem_free(wdiGtkOffloadReqMsg);
11203 return VOS_STATUS_E_NOMEM;
11204 }
11205
11206 //
11207 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
11208 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011209
11210 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011211 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011212
Jeff Johnson295189b2012-06-20 16:38:30 -070011213 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
11214 // Copy KCK
11215 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
11216 // Copy KEK
11217 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
11218 // Copy KeyReplayCounter
11219 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
11220 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
11221
Yue Ma7f44bbe2013-04-12 11:47:39 -070011222 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
11223 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011224
Jeff Johnson295189b2012-06-20 16:38:30 -070011225
11226 /* Store Params pass it to WDI */
11227 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
11228 pWdaParams->pWdaContext = pWDA;
11229 /* Store param pointer as passed in by caller */
11230 pWdaParams->wdaMsgParam = pGtkOffloadParams;
11231
Yue Ma7f44bbe2013-04-12 11:47:39 -070011232 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011233
11234 if(IS_WDI_STATUS_FAILURE(status))
11235 {
11236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11237 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053011238 vos_mem_zero(wdiGtkOffloadReqMsg, sizeof(WDI_GtkOffloadReqMsg));
11239 vos_mem_zero(pGtkOffloadParams, sizeof(tSirGtkOffloadParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070011240 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11241 vos_mem_free(pWdaParams->wdaMsgParam);
11242 vos_mem_free(pWdaParams);
11243 }
11244
11245 return CONVERT_WDI2VOS_STATUS(status) ;
11246}
11247
11248/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011249 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011250 *
11251 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011252void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011253 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011254{
11255 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11256 tWDA_CbContext *pWDA;
11257 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Nirav Shah374de6e2014-02-13 16:40:01 +053011258 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070011259 vos_msg_t vosMsg;
11260
11261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011262 "<------ %s " ,__func__);
Nirav Shah374de6e2014-02-13 16:40:01 +053011263
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080011264 if(NULL == pWdaParams)
11265 {
11266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11267 "%s: pWdaParams received NULL", __func__);
11268 VOS_ASSERT(0);
11269 return;
11270 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011271
Nirav Shah374de6e2014-02-13 16:40:01 +053011272 pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams));
11273 if(NULL == pGtkOffloadGetInfoRsp)
11274 {
11275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11276 "%s: vos_mem_malloc failed ", __func__);
11277 VOS_ASSERT(0);
11278 return;
11279 }
11280
Jeff Johnson295189b2012-06-20 16:38:30 -070011281 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
11282 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
11283
11284 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
11285 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
11286
11287 /* Message Header */
11288 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070011289 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011290
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011291 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
11292 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
11293 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
11294 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
11295 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070011296
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011297 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
11298 pwdiGtkOffloadGetInfoRsparams->bssId,
11299 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011300 /* VOS message wrapper */
11301 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
11302 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
11303 vosMsg.bodyval = 0;
11304
11305 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11306 {
11307 /* free the mem and return */
Vinay Krishna Eranna6f22c1f2014-10-13 16:03:06 +053011308 vos_mem_zero(pGtkOffloadGetInfoRsp,
11309 sizeof(tSirGtkOffloadGetInfoRspParams));
Jeff Johnson295189b2012-06-20 16:38:30 -070011310 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
11311 }
11312
11313 vos_mem_free(pWdaParams->wdaMsgParam) ;
11314 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11315 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011316
11317 return;
11318}
11319/*
11320 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
11321 * Free memory and send RSP back to SME.
11322 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
11323 */
11324void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
11325{
11326 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11327 vos_msg_t vosMsg;
11328
11329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11330 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
11331
11332 if(NULL == pWdaParams)
11333 {
11334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11335 "%s: pWdaParams received NULL", __func__);
11336 VOS_ASSERT(0);
11337 return;
11338 }
11339
11340 /* VOS message wrapper */
11341 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
11342 vosMsg.bodyptr = NULL;
11343 vosMsg.bodyval = 0;
11344
11345 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11346 {
11347 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11348 vos_mem_free(pWdaParams->wdaMsgParam);
11349 vos_mem_free(pWdaParams);
11350 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
11351 }
11352
11353 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011354}
11355#endif
11356
11357/*
11358 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
11359 * Request to WDI to set Tx Per Tracking configurations
11360 */
11361VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
11362{
11363 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011364 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011365 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
11366 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
11367 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
11368 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011370 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011371 if(NULL == pwdiSetTxPerTrackingReqParams)
11372 {
11373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011374 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011375 vos_mem_free(pTxPerTrackingParams);
11376 VOS_ASSERT(0);
11377 return VOS_STATUS_E_NOMEM;
11378 }
11379 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11380 if(NULL == pWdaParams)
11381 {
11382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011383 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011384 vos_mem_free(pwdiSetTxPerTrackingReqParams);
11385 vos_mem_free(pTxPerTrackingParams);
11386 VOS_ASSERT(0);
11387 return VOS_STATUS_E_NOMEM;
11388 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011389 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
11390 pTxPerTrackingParams->ucTxPerTrackingEnable;
11391 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
11392 pTxPerTrackingParams->ucTxPerTrackingPeriod;
11393 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
11394 pTxPerTrackingParams->ucTxPerTrackingRatio;
11395 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
11396 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011397 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
11398 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011399 /* Store param pointer as passed in by caller */
11400 /* store Params pass it to WDI
11401 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
11402 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
11403 pWdaParams->pWdaContext = pWDA;
11404 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011405 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011406 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011407 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011408 {
11409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11410 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011411 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011412 vos_mem_free(pWdaParams->wdaMsgParam) ;
11413 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11414 vos_mem_free(pWdaParams) ;
11415 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011416 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011417
11418}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011419/*
11420 * FUNCTION: WDA_HALDumpCmdCallback
11421 * Send the VOS complete .
11422 */
11423void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
11424 void* pUserData)
11425{
11426 tANI_U8 *buffer = NULL;
11427 tWDA_CbContext *pWDA = NULL;
11428 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011429 if(NULL == pWdaParams)
11430 {
11431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011432 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011433 VOS_ASSERT(0) ;
11434 return ;
11435 }
11436
11437 pWDA = pWdaParams->pWdaContext;
11438 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011439 if(wdiRspParams->usBufferLen > 0)
11440 {
11441 /*Copy the Resp data to UMAC supplied buffer*/
11442 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
11443 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011444 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11445 vos_mem_free(pWdaParams);
11446
11447 /* Indicate VOSS about the start complete */
11448 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070011449 return ;
11450}
11451
Jeff Johnson295189b2012-06-20 16:38:30 -070011452/*
11453 * FUNCTION: WDA_ProcessHALDumpCmdReq
11454 * Send Dump command to WDI
11455 */
11456VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
11457 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
11458 tANI_U32 arg4, tANI_U8 *pBuffer)
11459{
11460 WDI_Status status = WDI_STATUS_SUCCESS;
11461 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
11462 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
11463 tWDA_ReqParams *pWdaParams ;
11464 pVosContextType pVosContext = NULL;
11465 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011466 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
11467 (void *)pMac);
Katya Nigame4bafe02014-02-28 15:37:57 +053011468 if(pVosContext)
11469 {
11470 if (pVosContext->isLogpInProgress)
11471 {
11472 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
11473 "%s:LOGP in Progress. Ignore!!!", __func__);
11474 return VOS_STATUS_E_BUSY;
11475 }
11476 }
11477 else
11478 {
11479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11480 "%s: VOS Context Null", __func__);
11481 return VOS_STATUS_E_RESOURCES;
11482 }
11483
Jeff Johnson295189b2012-06-20 16:38:30 -070011484 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11485 if(NULL == pWdaParams)
11486 {
11487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011488 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011489 return VOS_STATUS_E_NOMEM;
11490 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011491 /* Allocate memory WDI request structure*/
11492 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
11493 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
11494 if(NULL == wdiHALDumpCmdReqParam)
11495 {
11496 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11497 "WDA HAL DUMP Command buffer alloc fail");
11498 vos_mem_free(pWdaParams);
11499 return WDI_STATUS_E_FAILURE;
11500 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011501 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070011502 /* Extract the arguments */
11503 wdiHalDumpCmdInfo->command = cmd;
11504 wdiHalDumpCmdInfo->argument1 = arg1;
11505 wdiHalDumpCmdInfo->argument2 = arg2;
11506 wdiHalDumpCmdInfo->argument3 = arg3;
11507 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070011508 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011509 pWdaParams->pWdaContext = pVosContext->pWDAContext;
11510
11511 /* Response message will be passed through the buffer */
11512 pWdaParams->wdaMsgParam = (void *)pBuffer;
11513
11514 /* store Params pass it to WDI */
11515 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011516 /* Send command to WDI */
11517 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -080011518 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), WDA_DUMPCMD_WAIT_TIMEOUT );
Jeff Johnson295189b2012-06-20 16:38:30 -070011519 if ( vStatus != VOS_STATUS_SUCCESS )
11520 {
11521 if ( vStatus == VOS_STATUS_E_TIMEOUT )
11522 {
11523 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011524 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011525 }
11526 else
11527 {
11528 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011529 "%s: WDA_HALDUMP reporting other error",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011530 }
11531 VOS_ASSERT(0);
11532 }
11533 return status;
11534}
Jeff Johnson295189b2012-06-20 16:38:30 -070011535#ifdef WLAN_FEATURE_GTK_OFFLOAD
11536/*
11537 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
11538 * Request to WDI to get GTK Offload Information
11539 */
11540VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
11541 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
11542{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011543 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011544 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
11545 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
11546 tWDA_ReqParams *pWdaParams ;
11547
11548 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
11549 {
11550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011551 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011552 VOS_ASSERT(0);
11553 return VOS_STATUS_E_NOMEM;
11554 }
11555
11556 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11557 if(NULL == pWdaParams)
11558 {
11559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011560 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011561 VOS_ASSERT(0);
11562 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
11563 return VOS_STATUS_E_NOMEM;
11564 }
11565
Yue Ma7f44bbe2013-04-12 11:47:39 -070011566 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
11567 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011568
Jeff Johnson295189b2012-06-20 16:38:30 -070011569 /* Store Params pass it to WDI */
11570 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
11571 pWdaParams->pWdaContext = pWDA;
11572 /* Store param pointer as passed in by caller */
11573 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
11574
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011575 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011576 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011577
Yue Ma7f44bbe2013-04-12 11:47:39 -070011578 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011579
11580 if(IS_WDI_STATUS_FAILURE(status))
11581 {
11582 /* failure returned by WDI API */
11583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11584 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
11585 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11586 vos_mem_free(pWdaParams) ;
11587 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
11588 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
11589 }
11590
11591 return CONVERT_WDI2VOS_STATUS(status) ;
11592}
11593#endif // WLAN_FEATURE_GTK_OFFLOAD
11594
11595/*
Yue Mab9c86f42013-08-14 15:59:08 -070011596 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
11597 *
11598 */
11599VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
11600 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
11601{
11602 WDI_Status wdiStatus;
11603 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
11604
11605 addPeriodicTxPtrnParams =
11606 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
11607
11608 if (NULL == addPeriodicTxPtrnParams)
11609 {
11610 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11611 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
11612 __func__);
11613
11614 return VOS_STATUS_E_NOMEM;
11615 }
11616
11617 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
11618 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
11619
11620 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
11621 addPeriodicTxPtrnParams->pUserData = pWDA;
11622
11623 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
11624
11625 if (WDI_STATUS_PENDING == wdiStatus)
11626 {
11627 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11628 "Pending received for %s:%d", __func__, __LINE__ );
11629 }
11630 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11631 {
11632 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11633 "Failure in %s:%d", __func__, __LINE__ );
11634 }
11635
11636 vos_mem_free(addPeriodicTxPtrnParams);
11637
11638 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11639}
11640
11641/*
11642 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
11643 *
11644 */
11645VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
11646 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
11647{
11648 WDI_Status wdiStatus;
11649 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
11650
11651 delPeriodicTxPtrnParams =
11652 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
11653
11654 if (NULL == delPeriodicTxPtrnParams)
11655 {
11656 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11657 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
11658 __func__);
11659
11660 return VOS_STATUS_E_NOMEM;
11661 }
11662
11663 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
11664 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
11665
11666 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
11667 delPeriodicTxPtrnParams->pUserData = pWDA;
11668
11669 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
11670
11671 if (WDI_STATUS_PENDING == wdiStatus)
11672 {
11673 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11674 "Pending received for %s:%d", __func__, __LINE__ );
11675 }
11676 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11677 {
11678 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11679 "Failure in %s:%d", __func__, __LINE__ );
11680 }
11681
11682 vos_mem_free(delPeriodicTxPtrnParams);
11683
11684 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11685}
11686
Rajeev79dbe4c2013-10-05 11:03:42 +053011687#ifdef FEATURE_WLAN_BATCH_SCAN
11688/*
11689 * FUNCTION: WDA_ProcessStopBatchScanInd
11690 *
11691 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
11692 *
11693 * PARAM:
11694 * pWDA: pointer to WDA context
11695 * pReq: pointer to stop batch scan request
11696 */
11697VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
11698 tSirStopBatchScanInd *pReq)
11699{
11700 WDI_Status wdiStatus;
11701 WDI_StopBatchScanIndType wdiReq;
11702
11703 wdiReq.param = pReq->param;
11704
11705 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
11706
11707 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11708 {
11709 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11710 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
11711 }
11712
11713 vos_mem_free(pReq);
11714
11715 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11716}
11717/*==========================================================================
11718 FUNCTION WDA_ProcessTriggerBatchScanResultInd
11719
11720 DESCRIPTION
11721 API to pull batch scan result from FW
11722
11723 PARAMETERS
11724 pWDA: Pointer to WDA context
11725 pGetBatchScanReq: Pointer to get batch scan result indication
11726
11727 RETURN VALUE
11728 NONE
11729
11730===========================================================================*/
11731VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
11732 tSirTriggerBatchScanResultInd *pReq)
11733{
11734 WDI_Status wdiStatus;
11735 WDI_TriggerBatchScanResultIndType wdiReq;
11736
11737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11738 "------> %s " ,__func__);
11739
11740 wdiReq.param = pReq->param;
11741
11742 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
11743
11744 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11745 {
11746 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11747 "Trigger batch scan result ind failed %s:%d",
11748 __func__, wdiStatus);
11749 }
11750
11751 vos_mem_free(pReq);
11752
11753 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11754}
11755
11756/*==========================================================================
11757 FUNCTION WDA_SetBatchScanRespCallback
11758
11759 DESCRIPTION
11760 API to process set batch scan response from FW
11761
11762 PARAMETERS
11763 pRsp: Pointer to set batch scan response
11764 pUserData: Pointer to user data
11765
11766 RETURN VALUE
11767 NONE
11768
11769===========================================================================*/
11770void WDA_SetBatchScanRespCallback
11771(
11772 WDI_SetBatchScanRspType *pRsp,
11773 void* pUserData
11774)
11775{
11776 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
11777 tpAniSirGlobal pMac;
11778 void *pCallbackContext;
11779 tWDA_CbContext *pWDA = NULL ;
11780 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11781
11782
11783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11784 "<------ %s " ,__func__);
11785 if (NULL == pWdaParams)
11786 {
11787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11788 "%s: pWdaParams received NULL", __func__);
11789 VOS_ASSERT(0) ;
11790 return ;
11791 }
11792
11793 /*extract WDA context*/
11794 pWDA = pWdaParams->pWdaContext;
11795 if (NULL == pWDA)
11796 {
11797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11798 "%s:pWDA is NULL can't invole HDD callback",
11799 __func__);
11800 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11801 vos_mem_free(pWdaParams->wdaMsgParam);
11802 vos_mem_free(pWdaParams);
11803 VOS_ASSERT(0);
11804 return;
11805 }
11806
11807 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11808 vos_mem_free(pWdaParams->wdaMsgParam);
11809 vos_mem_free(pWdaParams);
11810
11811 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
11812 if (NULL == pMac)
11813 {
11814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11815 "%s:pMac is NULL", __func__);
11816 VOS_ASSERT(0);
11817 return;
11818 }
11819
11820 pHddSetBatchScanRsp =
11821 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
11822 if (NULL == pHddSetBatchScanRsp)
11823 {
11824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11825 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
11826 VOS_ASSERT(0);
11827 return;
11828 }
11829
11830 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
11831
11832 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
11833 /*call hdd callback with set batch scan response data*/
11834 if(pMac->pmc.setBatchScanReqCallback)
11835 {
11836 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
11837 }
11838 else
11839 {
11840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11841 "%s:HDD callback is null", __func__);
11842 VOS_ASSERT(0);
11843 }
11844
11845 vos_mem_free(pHddSetBatchScanRsp);
11846 return ;
11847}
11848
11849/*==========================================================================
11850 FUNCTION WDA_ProcessSetBatchScanReq
11851
11852 DESCRIPTION
11853 API to send set batch scan request to WDI
11854
11855 PARAMETERS
11856 pWDA: Pointer to WDA context
11857 pSetBatchScanReq: Pointer to set batch scan req
11858
11859 RETURN VALUE
11860 NONE
11861
11862===========================================================================*/
11863VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
11864 tSirSetBatchScanReq *pSetBatchScanReq)
11865{
11866 WDI_Status status;
11867 tWDA_ReqParams *pWdaParams ;
11868 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
11869
11870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11871 "------> %s " ,__func__);
11872
11873 pWdiSetBatchScanReq =
11874 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
11875 if (NULL == pWdiSetBatchScanReq)
11876 {
11877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11878 "%s: VOS MEM Alloc Failure", __func__);
11879 vos_mem_free(pSetBatchScanReq);
11880 VOS_ASSERT(0);
11881 return VOS_STATUS_E_NOMEM;
11882 }
11883
11884 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
11885 if (NULL == pWdaParams)
11886 {
11887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11888 "%s: VOS MEM Alloc Failure", __func__);
11889 VOS_ASSERT(0);
11890 vos_mem_free(pSetBatchScanReq);
11891 vos_mem_free(pWdiSetBatchScanReq);
11892 return VOS_STATUS_E_NOMEM;
11893 }
11894
11895 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
11896 pWdiSetBatchScanReq->numberOfScansToBatch =
11897 pSetBatchScanReq->numberOfScansToBatch;
11898 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
11899 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
11900 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
11901
11902 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
11903 pWdaParams->pWdaContext = pWDA;
11904 pWdaParams->wdaMsgParam = pSetBatchScanReq;
11905
11906 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
11907 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
11908 if (IS_WDI_STATUS_FAILURE(status))
11909 {
11910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11911 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
11912 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11913 vos_mem_free(pWdaParams->wdaMsgParam);
11914 vos_mem_free(pWdaParams);
11915 }
11916 return CONVERT_WDI2VOS_STATUS(status);
11917}
11918
11919#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053011920/*
11921 * FUNCTION: WDA_ProcessHT40OBSSScanInd
11922 *
11923 * DESCRIPTION: This function sends start/update OBSS scan
11924 * inidcation message to WDI
11925 *
11926 * PARAM:
11927 * pWDA: pointer to WDA context
11928 * pReq: pointer to start OBSS scan request
11929 */
11930VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
11931 tSirHT40OBSSScanInd *pReq)
11932{
11933 WDI_Status status;
11934 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
11935 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053011936
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053011937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11938 "------> %s " ,__func__);
11939 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
11940 wdiOBSSScanParams.pUserData = pWDA;
11941
11942 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
11943 pWdiOBSSScanInd->cmdType = pReq->cmdType;
11944 pWdiOBSSScanInd->scanType = pReq->scanType;
11945 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
11946 pReq->OBSSScanActiveDwellTime;
11947 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
11948 pReq->OBSSScanPassiveDwellTime;
11949 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
11950 pReq->BSSChannelWidthTriggerScanInterval;
11951 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
11952 pReq->BSSWidthChannelTransitionDelayFactor;
11953 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
11954 pReq->OBSSScanActiveTotalPerChannel;
11955 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
11956 pReq->OBSSScanPassiveTotalPerChannel;
11957 pWdiOBSSScanInd->OBSSScanActivityThreshold =
11958 pReq->OBSSScanActivityThreshold;
11959 pWdiOBSSScanInd->channelCount = pReq->channelCount;
11960 vos_mem_copy(pWdiOBSSScanInd->channels,
11961 pReq->channels,
11962 pReq->channelCount);
11963 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
11964 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
11965 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
11966 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
11967 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
11968
11969 vos_mem_copy(pWdiOBSSScanInd->ieField,
11970 pReq->ieField,
11971 pReq->ieFieldLen);
11972
11973 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
11974 if (WDI_STATUS_PENDING == status)
11975 {
11976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11977 "Pending received for %s:%d ",__func__,__LINE__ );
11978 }
11979 else if (WDI_STATUS_SUCCESS_SYNC != status)
11980 {
11981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11982 "Failure in %s:%d ",__func__,__LINE__ );
11983 }
11984 return CONVERT_WDI2VOS_STATUS(status) ;
11985}
11986/*
11987 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
11988 *
11989 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
11990 *
11991 * PARAM:
11992 * pWDA: pointer to WDA context
11993 * pReq: pointer to stop batch scan request
11994 */
11995VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
11996 tANI_U8 *bssIdx)
11997{
11998 WDI_Status status;
11999
12000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12001 "------> %s " ,__func__);
12002
12003 status = WDI_HT40OBSSStopScanInd(*bssIdx);
12004 if (WDI_STATUS_PENDING == status)
12005 {
12006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12007 "Pending received for %s:%d ",__func__,__LINE__ );
12008 }
12009 else if (WDI_STATUS_SUCCESS_SYNC != status)
12010 {
12011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12012 "Failure in %s:%d ",__func__,__LINE__ );
12013 }
12014 return CONVERT_WDI2VOS_STATUS(status) ;
12015}
Yue Mab9c86f42013-08-14 15:59:08 -070012016/*
Chittajit Mitraf5413a42013-10-18 14:20:08 -070012017 * FUNCTION: WDA_ProcessRateUpdateInd
12018 *
12019 */
12020VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
12021 tSirRateUpdateInd *pRateUpdateParams)
12022{
12023 WDI_Status wdiStatus;
12024 WDI_RateUpdateIndParams rateUpdateParams;
12025
12026 vos_mem_copy(rateUpdateParams.bssid,
12027 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
12028
12029 rateUpdateParams.ucastDataRateTxFlag =
12030 pRateUpdateParams->ucastDataRateTxFlag;
12031 rateUpdateParams.reliableMcastDataRateTxFlag =
12032 pRateUpdateParams->reliableMcastDataRateTxFlag;
12033 rateUpdateParams.mcastDataRate24GHzTxFlag =
12034 pRateUpdateParams->mcastDataRate24GHzTxFlag;
12035 rateUpdateParams.mcastDataRate5GHzTxFlag =
12036 pRateUpdateParams->mcastDataRate5GHzTxFlag;
12037
12038 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
12039 rateUpdateParams.reliableMcastDataRate =
12040 pRateUpdateParams->reliableMcastDataRate;
12041 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
12042 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
12043
12044 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
12045 rateUpdateParams.pUserData = pWDA;
12046
12047 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
12048
12049 if (WDI_STATUS_PENDING == wdiStatus)
12050 {
12051 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12052 "Pending received for %s:%d", __func__, __LINE__ );
12053 }
12054 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
12055 {
12056 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12057 "Failure in %s:%d", __func__, __LINE__ );
12058 }
12059
12060 vos_mem_free(pRateUpdateParams);
12061
12062 return CONVERT_WDI2VOS_STATUS(wdiStatus);
12063}
12064
12065/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012066 * -------------------------------------------------------------------------
12067 * DATA interface with WDI for Mgmt Frames
12068 * -------------------------------------------------------------------------
12069 */
Jeff Johnson295189b2012-06-20 16:38:30 -070012070/*
12071 * FUNCTION: WDA_TxComplete
12072 * Callback function for the WDA_TxPacket
12073 */
12074VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
12075 VOS_STATUS status )
12076{
12077
12078 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
12079 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012080 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012081
12082 if(NULL == wdaContext)
12083 {
12084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12085 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012086 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012087 VOS_ASSERT(0);
12088 return VOS_STATUS_E_FAILURE;
12089 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012090
12091 /*Check if frame was timed out or not*/
12092 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
12093 (v_PVOID_t)&uUserData);
12094
12095 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
12096 {
12097 /*Discard frame - no further processing is needed*/
12098 vos_pkt_return_packet(pData);
12099 return VOS_STATUS_SUCCESS;
12100 }
12101
Jeff Johnson295189b2012-06-20 16:38:30 -070012102 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
12103 if( NULL!=wdaContext->pTxCbFunc)
12104 {
12105 /*check if packet is freed already*/
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012106 if(vos_atomic_set((uintptr_t*)&wdaContext->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (uintptr_t)pData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012107 {
12108 wdaContext->pTxCbFunc(pMac, pData);
12109 }
12110 else
12111 {
12112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012113 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012114 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070012115 //Return from here since we reaching here because the packet already timeout
12116 return status;
12117 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012118 }
12119
12120 /*
12121 * Trigger the event to bring the HAL TL Tx complete function to come
12122 * out of wait
12123 * Let the coe above to complete the packet first. When this event is set,
12124 * the thread waiting for the event may run and set Vospacket_freed causing the original
12125 * packet not being freed.
12126 */
12127 status = vos_event_set(&wdaContext->txFrameEvent);
12128 if(!VOS_IS_STATUS_SUCCESS(status))
12129 {
12130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012131 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012132 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012133 return status;
12134}
Jeff Johnson295189b2012-06-20 16:38:30 -070012135/*
12136 * FUNCTION: WDA_TxPacket
12137 * Forward TX management frame to WDI
12138 */
12139VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
12140 void *pFrmBuf,
12141 tANI_U16 frmLen,
12142 eFrameType frmType,
12143 eFrameTxDir txDir,
12144 tANI_U8 tid,
12145 pWDATxRxCompFunc pCompFunc,
12146 void *pData,
12147 pWDAAckFnTxComp pAckTxComp,
Kanchanapally, Vidyullathaf9426e52013-12-24 17:28:54 +053012148 tANI_U32 txFlag)
Jeff Johnson295189b2012-06-20 16:38:30 -070012149{
12150 VOS_STATUS status = VOS_STATUS_SUCCESS ;
12151 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
12152 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
12153 tANI_U8 eventIdx = 0;
12154 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
12155 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -070012156 if((NULL == pWDA)||(NULL == pFrmBuf))
12157 {
12158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053012159 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012160 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070012161 VOS_ASSERT(0);
12162 return VOS_STATUS_E_FAILURE;
12163 }
12164
12165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012166 "Tx Mgmt Frame Subtype: %d alloc(%p)", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070012167 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12168 if(NULL == pMac)
12169 {
12170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012171 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012172 VOS_ASSERT(0);
12173 return VOS_STATUS_E_FAILURE;
12174 }
12175
12176
12177
12178 /* store the call back function in WDA context */
12179 pWDA->pTxCbFunc = pCompFunc;
12180 /* store the call back for the function of ackTxComplete */
12181 if( pAckTxComp )
12182 {
Jeff Johnsone7245742012-09-05 17:12:55 -070012183 if( NULL != pWDA->pAckTxCbFunc )
12184 {
12185 /* Already TxComp is active no need to active again */
12186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012187 "There is already one request pending for tx complete");
Jeff Johnsone7245742012-09-05 17:12:55 -070012188 pWDA->pAckTxCbFunc( pMac, 0);
12189 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070012190
Jeff Johnsone7245742012-09-05 17:12:55 -070012191 if( VOS_STATUS_SUCCESS !=
12192 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12193 {
12194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12195 "Tx Complete timeout Timer Stop Failed ");
12196 }
12197 else
12198 {
12199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080012200 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070012201 }
12202 }
12203
12204 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
12205 pWDA->pAckTxCbFunc = pAckTxComp;
12206 if( VOS_STATUS_SUCCESS !=
12207 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
12208 {
12209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12210 "Tx Complete Timer Start Failed ");
12211 pWDA->pAckTxCbFunc = NULL;
12212 return eHAL_STATUS_FAILURE;
12213 }
12214 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012215 /* Reset the event to be not signalled */
12216 status = vos_event_reset(&pWDA->txFrameEvent);
12217 if(!VOS_IS_STATUS_SUCCESS(status))
12218 {
12219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012220 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012221 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
12222 if( pAckTxComp )
12223 {
12224 pWDA->pAckTxCbFunc = NULL;
12225 if( VOS_STATUS_SUCCESS !=
12226 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12227 {
12228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12229 "Tx Complete timeout Timer Stop Failed ");
12230 }
12231 }
12232 return VOS_STATUS_E_FAILURE;
12233 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012234
12235 /* If Peer Sta mask is set don't overwrite to self sta */
12236 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070012237 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012238 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070012239 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012240 else
12241 {
Ganesh K08bce952012-12-13 15:04:41 -080012242 /* Get system role, use the self station if in unknown role or STA role */
12243 systemRole = wdaGetGlobalSystemRole(pMac);
12244 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
12245 (( eSYSTEM_STA_ROLE == systemRole )
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012246#if defined FEATURE_WLAN_ESE || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080012247 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080012248#endif
Ganesh K08bce952012-12-13 15:04:41 -080012249 ))
12250 {
12251 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
12252 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080012253 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012254
Jeff Johnsone7245742012-09-05 17:12:55 -070012255 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
12256 disassoc frame reaches the HW, HAL has already deleted the peer station */
12257 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070012258 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080012259 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070012260 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070012261 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012262 /*Send Probe request frames on self sta idx*/
12263 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070012264 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012265 /* Since we donot want probe responses to be retried, send probe responses
12266 through the NO_ACK queues */
12267 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
12268 {
12269 //probe response is sent out using self station and no retries options.
12270 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
12271 }
12272 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
12273 {
12274 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
12275 }
12276 }
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012277 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012278
12279 /*Set frame tag to 0
12280 We will use the WDA user data in order to tag a frame as expired*/
12281 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
12282 (v_PVOID_t)0);
12283
12284
12285 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
12286 frmLen, ucTypeSubType, tid,
12287 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
12288 {
12289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012290 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012291 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012292 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 -070012293 if( pAckTxComp )
12294 {
12295 pWDA->pAckTxCbFunc = NULL;
12296 if( VOS_STATUS_SUCCESS !=
12297 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12298 {
12299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12300 "Tx Complete timeout Timer Stop Failed ");
12301 }
12302 }
12303 return VOS_STATUS_E_FAILURE;
12304 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012305 /*
12306 * Wait for the event to be set by the TL, to get the response of TX
12307 * complete, this event should be set by the Callback function called by TL
12308 */
12309 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
12310 &eventIdx);
12311 if(!VOS_IS_STATUS_SUCCESS(status))
12312 {
12313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12314 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012315 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -070012316 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
12317 after the packet gets completed(packet freed once)*/
12318
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070012319 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Katya Nigam53677462014-08-04 11:37:28 +053012320 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070012321
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012322 /*Tag Frame as timed out for later deletion*/
12323 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
12324 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
12325
Jeff Johnson295189b2012-06-20 16:38:30 -070012326 /* check whether the packet was freed already,so need not free again when
12327 * TL calls the WDA_Txcomplete routine
12328 */
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053012329 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED);
12330 /*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 -070012331 {
12332 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070012333 } */
12334
Jeff Johnson295189b2012-06-20 16:38:30 -070012335 if( pAckTxComp )
12336 {
12337 pWDA->pAckTxCbFunc = NULL;
12338 if( VOS_STATUS_SUCCESS !=
12339 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12340 {
12341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12342 "Tx Complete timeout Timer Stop Failed ");
12343 }
12344 }
12345 status = VOS_STATUS_E_FAILURE;
12346 }
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053012347#ifdef WLAN_DUMP_MGMTFRAMES
12348 if (VOS_IS_STATUS_SUCCESS(status))
12349 {
12350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12351 "%s() TX packet : SubType %d", __func__,pFc->subType);
12352 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12353 pData, frmLen);
12354 }
12355#endif
12356
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080012357 if (VOS_IS_STATUS_SUCCESS(status))
12358 {
12359 if (pMac->fEnableDebugLog & 0x1)
12360 {
12361 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
12362 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
12363 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
12364 {
12365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
12366 pFc->type, pFc->subType);
12367 }
12368 }
12369 }
12370
12371
Jeff Johnson295189b2012-06-20 16:38:30 -070012372 return status;
12373}
Jeff Johnson295189b2012-06-20 16:38:30 -070012374/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012375 * FUNCTION: WDA_ProcessDHCPStartInd
12376 * Forward DHCP Start to WDI
12377 */
12378static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
12379 tAniDHCPInd *dhcpStartInd)
12380{
12381 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053012382 WDI_DHCPInd wdiDHCPInd;
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012383
c_hpothu0b0cab72014-02-13 21:52:40 +053012384 wdiDHCPInd.device_mode = dhcpStartInd->device_mode;
12385 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStartInd->macAddr,
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012386 sizeof(tSirMacAddr));
12387
c_hpothu0b0cab72014-02-13 21:52:40 +053012388 status = WDI_dhcpStartInd(&wdiDHCPInd);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012389
c_hpothu0b0cab72014-02-13 21:52:40 +053012390 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012391 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12393 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012394 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012395 else if (WDI_STATUS_SUCCESS_SYNC != status)
12396 {
12397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12398 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
12399 }
12400
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012401 vos_mem_free(dhcpStartInd);
12402 return CONVERT_WDI2VOS_STATUS(status) ;
12403}
12404
12405 /*
12406 * FUNCTION: WDA_ProcessDHCPStopInd
12407 * Forward DHCP Stop to WDI
12408 */
12409 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
12410 tAniDHCPInd *dhcpStopInd)
12411 {
12412 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053012413 WDI_DHCPInd wdiDHCPInd;
12414
12415 wdiDHCPInd.device_mode = dhcpStopInd->device_mode;
12416 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
12417
12418 status = WDI_dhcpStopInd(&wdiDHCPInd);
12419
12420 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012421 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12423 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012424 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012425 else if (WDI_STATUS_SUCCESS_SYNC != status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012426 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12428 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012429 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012430
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012431 vos_mem_free(dhcpStopInd);
c_hpothu0b0cab72014-02-13 21:52:40 +053012432
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012433 return CONVERT_WDI2VOS_STATUS(status) ;
12434 }
12435
12436/*
Siddharth Bhal171788a2014-09-29 21:02:40 +053012437 * FUNCTION: WDA_ProcessSetSpoofMacAddrReq
12438 *
12439 * DESCRIPTION: This function sends Spoof Mac Addr Req to WDI
12440 *
12441 * PARAM:
12442 * pWDA: pointer to WDA context
12443 * pReq: pointer to stop batch scan request
12444 */
12445VOS_STATUS WDA_ProcessSetSpoofMacAddrReq(tWDA_CbContext *pWDA,
12446 tpSpoofMacAddrReqParams pReq)
12447{
12448 WDI_Status wdiStatus;
12449 WDI_SpoofMacAddrInfoType *WDI_SpoofMacAddrInfoParams;
12450 tWDA_ReqParams *pWdaParams;
12451
12452 WDI_SpoofMacAddrInfoParams = (WDI_SpoofMacAddrInfoType *)vos_mem_malloc(
12453 sizeof(WDI_SpoofMacAddrInfoType));
12454 if(NULL == WDI_SpoofMacAddrInfoParams) {
12455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12456 "%s: VOS MEM Alloc Failure in Spoof Req", __func__);
12457 VOS_ASSERT(0);
12458 return VOS_STATUS_E_NOMEM;
12459 }
12460 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12461 if(NULL == pWdaParams) {
12462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12463 "%s: VOS MEM Alloc Failure", __func__);
Siddharth Bhal029d6732014-10-09 21:31:23 +053012464 vos_mem_free(WDI_SpoofMacAddrInfoParams);
Siddharth Bhal171788a2014-09-29 21:02:40 +053012465 VOS_ASSERT(0);
12466 return VOS_STATUS_E_NOMEM;
12467 }
12468
12469 vos_mem_copy(WDI_SpoofMacAddrInfoParams->macAddr,
12470 pReq->macAddr, VOS_MAC_ADDRESS_LEN);
12471
12472 pWdaParams->pWdaContext = pWDA;
12473 /* Store Upper layer req pointer, as this will be used for response */
Siddharth Bhal029d6732014-10-09 21:31:23 +053012474 pWdaParams->wdaMsgParam = (void *)pReq;
12475
12476 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, WDA_MAC_ADDRESS_STR,
12477 WDA_MAC_ADDR_ARRAY(WDI_SpoofMacAddrInfoParams->macAddr));
12478
Siddharth Bhal171788a2014-09-29 21:02:40 +053012479 /* store Params pass it to WDI */
12480 pWdaParams->wdaWdiApiMsgParam = (void *)WDI_SpoofMacAddrInfoParams ;
12481
12482 wdiStatus = WDI_SetSpoofMacAddrReq(WDI_SpoofMacAddrInfoParams,
Siddharth Bhal029d6732014-10-09 21:31:23 +053012483 (WDI_SetSpoofMacAddrRspCb) WDA_SpoofMacAddrRspCallback,
12484 pWdaParams );
Siddharth Bhal171788a2014-09-29 21:02:40 +053012485
12486 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12487 {
12488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12489 "Failure in SetSpoofMacAddrReq Params WDI API, free all the memory " );
12490 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12491 vos_mem_free(pWdaParams->wdaMsgParam);
12492 vos_mem_free(pWdaParams);
12493 }
12494
12495 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
12496}
12497
12498/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012499 * FUNCTION: WDA_McProcessMsg
12500 * Trigger DAL-AL to start CFG download
12501 */
12502VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
12503{
12504 VOS_STATUS status = VOS_STATUS_SUCCESS;
12505 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012506 if(NULL == pMsg)
12507 {
12508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012509 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012510 VOS_ASSERT(0);
12511 return VOS_STATUS_E_FAILURE;
12512 }
12513
12514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012515 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070012516
12517 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
12518 if(NULL == pWDA )
12519 {
12520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012521 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012522 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070012523 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012524 return VOS_STATUS_E_FAILURE;
12525 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012526 /* Process all the WDA messages.. */
12527 switch( pMsg->type )
12528 {
12529 case WNI_CFG_DNLD_REQ:
12530 {
12531 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070012532 /* call WDA complete event if config download success */
12533 if( VOS_IS_STATUS_SUCCESS(status) )
12534 {
12535 vos_WDAComplete_cback(pVosContext);
12536 }
12537 else
12538 {
12539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12540 "WDA Config Download failure" );
12541 }
12542 break ;
12543 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012544 /*
12545 * Init SCAN request from PE, convert it into DAL format
12546 * and send it to DAL
12547 */
12548 case WDA_INIT_SCAN_REQ:
12549 {
12550 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
12551 break ;
12552 }
12553 /* start SCAN request from PE */
12554 case WDA_START_SCAN_REQ:
12555 {
12556 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
12557 break ;
12558 }
12559 /* end SCAN request from PE */
12560 case WDA_END_SCAN_REQ:
12561 {
12562 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
12563 break ;
12564 }
12565 /* end SCAN request from PE */
12566 case WDA_FINISH_SCAN_REQ:
12567 {
12568 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
12569 break ;
12570 }
12571 /* join request from PE */
12572 case WDA_CHNL_SWITCH_REQ:
12573 {
12574 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
12575 {
12576 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
12577 }
12578 else
12579 {
Kalikinkar dhara1e83b772014-02-06 12:59:22 -080012580 if (IS_FEATURE_SUPPORTED_BY_FW(CH_SWITCH_V1) &&
12581 eHAL_CHANNEL_SWITCH_SOURCE_CSA ==
12582 ((tSwitchChannelParams*)pMsg->bodyptr)->channelSwitchSrc )
12583 {
12584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12585 "call ProcessChannelSwitchReq_V1" );
12586 WDA_ProcessChannelSwitchReq_V1(pWDA,
12587 (tSwitchChannelParams*)pMsg->bodyptr) ;
12588 }
12589 else
12590 {
12591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12592 "call ProcessChannelSwitchReq" );
12593 WDA_ProcessChannelSwitchReq(pWDA,
12594 (tSwitchChannelParams*)pMsg->bodyptr) ;
12595 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012596 }
12597 break ;
12598 }
12599 /* ADD BSS request from PE */
12600 case WDA_ADD_BSS_REQ:
12601 {
12602 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
12603 break ;
12604 }
12605 case WDA_ADD_STA_REQ:
12606 {
12607 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
12608 break ;
12609 }
12610 case WDA_DELETE_BSS_REQ:
12611 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012612 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
12613 break ;
12614 }
12615 case WDA_DELETE_STA_REQ:
12616 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012617 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
12618 break ;
12619 }
12620 case WDA_CONFIG_PARAM_UPDATE_REQ:
12621 {
12622 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
12623 break ;
12624 }
12625 case WDA_SET_BSSKEY_REQ:
12626 {
12627 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
12628 break ;
12629 }
12630 case WDA_SET_STAKEY_REQ:
12631 {
12632 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
12633 break ;
12634 }
12635 case WDA_SET_STA_BCASTKEY_REQ:
12636 {
12637 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
12638 break ;
12639 }
12640 case WDA_REMOVE_BSSKEY_REQ:
12641 {
12642 WDA_ProcessRemoveBssKeyReq(pWDA,
12643 (tRemoveBssKeyParams *)pMsg->bodyptr);
12644 break ;
12645 }
12646 case WDA_REMOVE_STAKEY_REQ:
12647 {
12648 WDA_ProcessRemoveStaKeyReq(pWDA,
12649 (tRemoveStaKeyParams *)pMsg->bodyptr);
12650 break ;
12651 }
12652 case WDA_REMOVE_STA_BCASTKEY_REQ:
12653 {
12654 /* TODO: currently UMAC is not sending this request, Add the code for
12655 handling this request when UMAC supports */
12656 break;
12657 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012658#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -070012659 case WDA_TSM_STATS_REQ:
12660 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070012661 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012662 break;
12663 }
12664#endif
12665 case WDA_UPDATE_EDCA_PROFILE_IND:
12666 {
12667 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
12668 break;
12669 }
12670 case WDA_ADD_TS_REQ:
12671 {
12672 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
12673 break;
12674 }
12675 case WDA_DEL_TS_REQ:
12676 {
12677 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
12678 break;
12679 }
12680 case WDA_ADDBA_REQ:
12681 {
12682 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
12683 break;
12684 }
12685 case WDA_DELBA_IND:
12686 {
12687 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
12688 break;
12689 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080012690 case WDA_UPDATE_CHAN_LIST_REQ:
12691 {
12692 WDA_ProcessUpdateChannelList(pWDA,
12693 (tSirUpdateChanList *)pMsg->bodyptr);
12694 break;
12695 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012696 case WDA_SET_LINK_STATE:
12697 {
12698 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
12699 break;
12700 }
12701 case WDA_GET_STATISTICS_REQ:
12702 {
12703 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
12704 break;
12705 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012706#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080012707 case WDA_GET_ROAM_RSSI_REQ:
12708 {
12709 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
12710 break;
12711 }
12712#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012713 case WDA_PWR_SAVE_CFG:
12714 {
12715 if(pWDA->wdaState == WDA_READY_STATE)
12716 {
12717 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
12718 }
12719 else
12720 {
12721 if(NULL != pMsg->bodyptr)
12722 {
12723 vos_mem_free(pMsg->bodyptr);
12724 }
12725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12726 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
12727 }
12728 break;
12729 }
12730 case WDA_ENTER_IMPS_REQ:
12731 {
12732 if(pWDA->wdaState == WDA_READY_STATE)
12733 {
12734 WDA_ProcessEnterImpsReq(pWDA);
12735 }
12736 else
12737 {
12738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12739 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
12740 }
12741 break;
12742 }
12743 case WDA_EXIT_IMPS_REQ:
12744 {
12745 if(pWDA->wdaState == WDA_READY_STATE)
12746 {
12747 WDA_ProcessExitImpsReq(pWDA);
12748 }
12749 else
12750 {
12751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12752 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
12753 }
12754 break;
12755 }
12756 case WDA_ENTER_BMPS_REQ:
12757 {
12758 if(pWDA->wdaState == WDA_READY_STATE)
12759 {
12760 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
12761 }
12762 else
12763 {
12764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12765 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
12766 }
12767 break;
12768 }
12769 case WDA_EXIT_BMPS_REQ:
12770 {
12771 if(pWDA->wdaState == WDA_READY_STATE)
12772 {
12773 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
12774 }
12775 else
12776 {
12777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12778 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
12779 }
12780 break;
12781 }
12782 case WDA_ENTER_UAPSD_REQ:
12783 {
12784 if(pWDA->wdaState == WDA_READY_STATE)
12785 {
12786 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
12787 }
12788 else
12789 {
12790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12791 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
12792 }
12793 break;
12794 }
12795 case WDA_EXIT_UAPSD_REQ:
12796 {
12797 if(pWDA->wdaState == WDA_READY_STATE)
12798 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012799 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012800 }
12801 else
12802 {
12803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12804 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
12805 }
12806 break;
12807 }
12808 case WDA_UPDATE_UAPSD_IND:
12809 {
12810 if(pWDA->wdaState == WDA_READY_STATE)
12811 {
12812 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
12813 }
12814 else
12815 {
12816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12817 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
12818 }
12819 break;
12820 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012821 case WDA_REGISTER_PE_CALLBACK :
12822 {
12823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12824 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
12825 /*TODO: store the PE callback */
12826 /* Do Nothing? MSG Body should be freed at here */
12827 if(NULL != pMsg->bodyptr)
12828 {
12829 vos_mem_free(pMsg->bodyptr);
12830 }
12831 break;
12832 }
12833 case WDA_SYS_READY_IND :
12834 {
12835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12836 "Handling msg type WDA_SYS_READY_IND " );
12837 pWDA->wdaState = WDA_READY_STATE;
12838 if(NULL != pMsg->bodyptr)
12839 {
12840 vos_mem_free(pMsg->bodyptr);
12841 }
12842 break;
12843 }
12844 case WDA_BEACON_FILTER_IND :
12845 {
12846 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
12847 break;
12848 }
12849 case WDA_BTC_SET_CFG:
12850 {
12851 /*TODO: handle this while dealing with BTC */
12852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12853 "Handling msg type WDA_BTC_SET_CFG " );
12854 /* Do Nothing? MSG Body should be freed at here */
12855 if(NULL != pMsg->bodyptr)
12856 {
12857 vos_mem_free(pMsg->bodyptr);
12858 }
12859 break;
12860 }
12861 case WDA_SIGNAL_BT_EVENT:
12862 {
12863 /*TODO: handle this while dealing with BTC */
12864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12865 "Handling msg type WDA_SIGNAL_BT_EVENT " );
12866 /* Do Nothing? MSG Body should be freed at here */
12867 if(NULL != pMsg->bodyptr)
12868 {
12869 vos_mem_free(pMsg->bodyptr);
12870 }
12871 break;
12872 }
12873 case WDA_CFG_RXP_FILTER_REQ:
12874 {
12875 WDA_ProcessConfigureRxpFilterReq(pWDA,
12876 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
12877 break;
12878 }
12879 case WDA_SET_HOST_OFFLOAD:
12880 {
12881 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
12882 break;
12883 }
12884 case WDA_SET_KEEP_ALIVE:
12885 {
12886 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
12887 break;
12888 }
12889#ifdef WLAN_NS_OFFLOAD
12890 case WDA_SET_NS_OFFLOAD:
12891 {
12892 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
12893 break;
12894 }
12895#endif //WLAN_NS_OFFLOAD
12896 case WDA_ADD_STA_SELF_REQ:
12897 {
12898 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
12899 break;
12900 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012901 case WDA_DEL_STA_SELF_REQ:
12902 {
12903 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
12904 break;
12905 }
12906 case WDA_WOWL_ADD_BCAST_PTRN:
12907 {
12908 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
12909 break;
12910 }
12911 case WDA_WOWL_DEL_BCAST_PTRN:
12912 {
12913 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
12914 break;
12915 }
12916 case WDA_WOWL_ENTER_REQ:
12917 {
12918 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
12919 break;
12920 }
12921 case WDA_WOWL_EXIT_REQ:
12922 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012923 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012924 break;
12925 }
12926 case WDA_TL_FLUSH_AC_REQ:
12927 {
12928 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
12929 break;
12930 }
12931 case WDA_SIGNAL_BTAMP_EVENT:
12932 {
12933 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
12934 break;
12935 }
Sunil Duttbd736ed2014-05-26 21:19:41 +053012936#ifdef WLAN_FEATURE_LINK_LAYER_STATS
12937 case WDA_LINK_LAYER_STATS_SET_REQ:
12938 {
12939 WDA_ProcessLLStatsSetReq(pWDA, (tSirLLStatsSetReq *)pMsg->bodyptr);
12940 break;
12941 }
12942 case WDA_LINK_LAYER_STATS_GET_REQ:
12943 {
12944 WDA_ProcessLLStatsGetReq(pWDA, (tSirLLStatsGetReq *)pMsg->bodyptr);
12945 break;
12946 }
12947 case WDA_LINK_LAYER_STATS_CLEAR_REQ:
12948 {
12949 WDA_ProcessLLStatsClearReq(pWDA, (tSirLLStatsClearReq *)pMsg->bodyptr);
12950 break;
12951 }
12952#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
Dino Mycle41bdc942014-06-10 11:30:24 +053012953#ifdef WLAN_FEATURE_EXTSCAN
12954 case WDA_EXTSCAN_GET_CAPABILITIES_REQ:
12955 {
12956 WDA_ProcessEXTScanGetCapabilitiesReq(pWDA,
12957 (tSirGetEXTScanCapabilitiesReqParams *)pMsg->bodyptr);
12958 break;
12959 }
12960 case WDA_EXTSCAN_START_REQ:
12961 {
12962 WDA_ProcessEXTScanStartReq(pWDA,
12963 (tSirEXTScanStartReqParams *)pMsg->bodyptr);
12964 break;
12965 }
12966 case WDA_EXTSCAN_STOP_REQ:
12967 {
12968 WDA_ProcessEXTScanStopReq(pWDA,
12969 (tSirEXTScanStopReqParams *)pMsg->bodyptr);
12970 break;
12971 }
12972 case WDA_EXTSCAN_GET_CACHED_RESULTS_REQ:
12973 {
12974 WDA_ProcessEXTScanGetCachedResultsReq(pWDA,
12975 (tSirEXTScanGetCachedResultsReqParams *)pMsg->bodyptr);
12976 break;
12977 }
12978 case WDA_EXTSCAN_SET_BSSID_HOTLIST_REQ:
12979 {
12980 WDA_ProcessEXTScanSetBSSIDHotlistReq(pWDA,
12981 (tSirEXTScanSetBssidHotListReqParams *)pMsg->bodyptr);
12982 break;
12983 }
12984 case WDA_EXTSCAN_RESET_BSSID_HOTLIST_REQ:
12985 {
12986 WDA_ProcessEXTScanResetBSSIDHotlistReq(pWDA,
12987 (tSirEXTScanResetBssidHotlistReqParams *)pMsg->bodyptr);
12988 break;
12989 }
12990 case WDA_EXTSCAN_SET_SIGNF_RSSI_CHANGE_REQ:
12991 {
12992 WDA_ProcessEXTScanSetSignfRSSIChangeReq(pWDA,
12993 (tSirEXTScanSetSignificantChangeReqParams *)pMsg->bodyptr);
12994 break;
12995 }
12996 case WDA_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_REQ:
12997 {
12998 WDA_ProcessEXTScanResetSignfRSSIChangeReq(pWDA,
12999 (tSirEXTScanResetSignificantChangeReqParams *)pMsg->bodyptr);
13000 break;
13001 }
13002#endif /* WLAN_FEATURE_EXTSCAN */
Jeff Johnson295189b2012-06-20 16:38:30 -070013003#ifdef WDA_UT
13004 case WDA_WDI_EVENT_MSG:
13005 {
13006 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
13007 break ;
13008 }
13009#endif
13010 case WDA_UPDATE_BEACON_IND:
13011 {
13012 WDA_ProcessUpdateBeaconParams(pWDA,
13013 (tUpdateBeaconParams *)pMsg->bodyptr);
13014 break;
13015 }
13016 case WDA_SEND_BEACON_REQ:
13017 {
13018 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
13019 break;
13020 }
13021 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
13022 {
13023 WDA_ProcessUpdateProbeRspTemplate(pWDA,
13024 (tSendProbeRespParams *)pMsg->bodyptr);
13025 break;
13026 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080013027#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -070013028 case WDA_SET_MAX_TX_POWER_REQ:
13029 {
13030 WDA_ProcessSetMaxTxPowerReq(pWDA,
13031 (tMaxTxPowerParams *)pMsg->bodyptr);
13032 break;
13033 }
13034#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070013035 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
13036 {
13037 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
13038 pMsg->bodyptr);
13039 break;
13040 }
schang86c22c42013-03-13 18:41:24 -070013041 case WDA_SET_TX_POWER_REQ:
13042 {
13043 WDA_ProcessSetTxPowerReq(pWDA,
13044 (tSirSetTxPowerReq *)pMsg->bodyptr);
13045 break;
13046 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013047 case WDA_SET_P2P_GO_NOA_REQ:
13048 {
13049 WDA_ProcessSetP2PGONOAReq(pWDA,
13050 (tP2pPsParams *)pMsg->bodyptr);
13051 break;
13052 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013053 /* timer related messages */
13054 case WDA_TIMER_BA_ACTIVITY_REQ:
13055 {
13056 WDA_BaCheckActivity(pWDA) ;
13057 break ;
13058 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013059
13060 /* timer related messages */
13061 case WDA_TIMER_TRAFFIC_STATS_IND:
13062 {
13063 WDA_TimerTrafficStatsInd(pWDA);
13064 break;
13065 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013066#ifdef WLAN_FEATURE_VOWIFI_11R
13067 case WDA_AGGR_QOS_REQ:
13068 {
13069 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
13070 break;
13071 }
13072#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070013073 case WDA_FTM_CMD_REQ:
13074 {
13075 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
13076 break ;
13077 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013078#ifdef FEATURE_OEM_DATA_SUPPORT
13079 case WDA_START_OEM_DATA_REQ:
13080 {
13081 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
13082 break;
13083 }
13084#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070013085 /* Tx Complete Time out Indication */
13086 case WDA_TX_COMPLETE_TIMEOUT_IND:
13087 {
13088 WDA_ProcessTxCompleteTimeOutInd(pWDA);
13089 break;
13090 }
13091 case WDA_WLAN_SUSPEND_IND:
13092 {
13093 WDA_ProcessWlanSuspendInd(pWDA,
13094 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
13095 break;
13096 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013097 case WDA_WLAN_RESUME_REQ:
13098 {
13099 WDA_ProcessWlanResumeReq(pWDA,
13100 (tSirWlanResumeParam *)pMsg->bodyptr) ;
13101 break;
13102 }
13103
13104 case WDA_UPDATE_CF_IND:
13105 {
13106 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
13107 pMsg->bodyptr = NULL;
13108 break;
13109 }
13110#ifdef FEATURE_WLAN_SCAN_PNO
13111 case WDA_SET_PNO_REQ:
13112 {
13113 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
13114 break;
13115 }
13116 case WDA_UPDATE_SCAN_PARAMS_REQ:
13117 {
13118 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
13119 break;
13120 }
13121 case WDA_SET_RSSI_FILTER_REQ:
13122 {
13123 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
13124 break;
13125 }
13126#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013127#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013128 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013129 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013130 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013131 break;
13132 }
13133#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013134 case WDA_SET_TX_PER_TRACKING_REQ:
13135 {
13136 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
13137 break;
13138 }
13139
13140#ifdef WLAN_FEATURE_PACKET_FILTERING
13141 case WDA_8023_MULTICAST_LIST_REQ:
13142 {
13143 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
13144 break;
13145 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013146 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
13147 {
13148 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
13149 break;
13150 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013151 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
13152 {
13153 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
13154 break;
13155 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013156 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
13157 {
13158 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
13159 break;
13160 }
13161#endif // WLAN_FEATURE_PACKET_FILTERING
13162
13163
13164 case WDA_TRANSMISSION_CONTROL_IND:
13165 {
13166 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
13167 break;
13168 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013169 case WDA_SET_POWER_PARAMS_REQ:
13170 {
13171 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
13172 break;
13173 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013174#ifdef WLAN_FEATURE_GTK_OFFLOAD
13175 case WDA_GTK_OFFLOAD_REQ:
13176 {
13177 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
13178 break;
13179 }
13180
13181 case WDA_GTK_OFFLOAD_GETINFO_REQ:
13182 {
13183 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
13184 break;
13185 }
13186#endif //WLAN_FEATURE_GTK_OFFLOAD
13187
13188 case WDA_SET_TM_LEVEL_REQ:
13189 {
13190 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
13191 break;
13192 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053013193
Mohit Khanna4a70d262012-09-11 16:30:12 -070013194 case WDA_UPDATE_OP_MODE:
13195 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053013196 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
13197 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
13198 {
13199 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
13200 }
13201 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070013202 {
13203 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
13204 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
13205 else
13206 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013207 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070013208 }
13209 else
13210 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013211 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070013212 break;
13213 }
Chet Lanctot186b5732013-03-18 10:26:30 -070013214#ifdef WLAN_FEATURE_11W
13215 case WDA_EXCLUDE_UNENCRYPTED_IND:
13216 {
13217 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
13218 break;
13219 }
13220#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053013221#ifdef FEATURE_WLAN_TDLS
13222 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
13223 {
13224 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
13225 break;
13226 }
13227#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013228 case WDA_DHCP_START_IND:
13229 {
13230 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
13231 break;
13232 }
13233 case WDA_DHCP_STOP_IND:
13234 {
13235 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
13236 break;
13237 }
Leo Chang9056f462013-08-01 19:21:11 -070013238#ifdef FEATURE_WLAN_LPHB
13239 case WDA_LPHB_CONF_REQ:
13240 {
13241 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
13242 break;
13243 }
13244#endif
Yue Mab9c86f42013-08-14 15:59:08 -070013245 case WDA_ADD_PERIODIC_TX_PTRN_IND:
13246 {
13247 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
13248 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
13249 break;
13250 }
13251 case WDA_DEL_PERIODIC_TX_PTRN_IND:
13252 {
13253 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
13254 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
13255 break;
13256 }
13257
Rajeev79dbe4c2013-10-05 11:03:42 +053013258#ifdef FEATURE_WLAN_BATCH_SCAN
13259 case WDA_SET_BATCH_SCAN_REQ:
13260 {
13261 WDA_ProcessSetBatchScanReq(pWDA,
13262 (tSirSetBatchScanReq *)pMsg->bodyptr);
13263 break;
13264 }
Chittajit Mitraf5413a42013-10-18 14:20:08 -070013265 case WDA_RATE_UPDATE_IND:
13266 {
13267 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
13268 break;
13269 }
Rajeev79dbe4c2013-10-05 11:03:42 +053013270 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
13271 {
13272 WDA_ProcessTriggerBatchScanResultInd(pWDA,
13273 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
13274 break;
13275 }
13276 case WDA_STOP_BATCH_SCAN_IND:
13277 {
13278 WDA_ProcessStopBatchScanInd(pWDA,
13279 (tSirStopBatchScanInd *)pMsg->bodyptr);
13280 break;
13281 }
c_hpothu92367912014-05-01 15:18:17 +053013282 case WDA_GET_BCN_MISS_RATE_REQ:
13283 WDA_ProcessGetBcnMissRateReq(pWDA,
13284 (tSirBcnMissRateReq *)pMsg->bodyptr);
13285 break;
Rajeev79dbe4c2013-10-05 11:03:42 +053013286#endif
13287
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053013288 case WDA_HT40_OBSS_SCAN_IND:
13289 {
13290 WDA_ProcessHT40OBSSScanInd(pWDA,
13291 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
13292 break;
13293 }
13294 case WDA_HT40_OBSS_STOP_SCAN_IND:
13295 {
13296 WDA_ProcessHT40OBSSStopScanInd(pWDA,
13297 (tANI_U8*)pMsg->bodyptr);
13298 break;
13299 }
Atul Mittalc0f739f2014-07-31 13:47:47 +053013300// tdlsoffchan
13301#ifdef FEATURE_WLAN_TDLS
13302 case WDA_SET_TDLS_CHAN_SWITCH_REQ:
13303 {
13304 WDA_ProcessSetTdlsChanSwitchReq(pWDA, (tTdlsChanSwitchParams *)pMsg->bodyptr);
13305 break;
13306 }
13307#endif
Siddharth Bhal171788a2014-09-29 21:02:40 +053013308 case WDA_SPOOF_MAC_ADDR_REQ:
13309 {
13310 WDA_ProcessSetSpoofMacAddrReq(pWDA, (tpSpoofMacAddrReqParams)pMsg->bodyptr);
13311 break;
13312 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013313 default:
13314 {
Agarwal Ashishbf98caf2014-03-25 13:29:11 +053013315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070013316 "No Handling for msg type %x in WDA "
13317 ,pMsg->type);
13318 /* Do Nothing? MSG Body should be freed at here */
13319 if(NULL != pMsg->bodyptr)
13320 {
13321 vos_mem_free(pMsg->bodyptr);
13322 }
13323 //WDA_VOS_ASSERT(0) ;
13324 }
13325 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013326 return status ;
13327}
13328
Jeff Johnson295189b2012-06-20 16:38:30 -070013329/*
13330 * FUNCTION: WDA_LowLevelIndCallback
13331 * IND API callback from WDI, send Ind to PE
13332 */
13333void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
13334 void* pUserData )
13335{
13336 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
13337#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
13338 tSirRSSINotification rssiNotification;
13339#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013340 if(NULL == pWDA)
13341 {
13342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013343 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013344 VOS_ASSERT(0);
13345 return ;
13346 }
13347
13348 switch(wdiLowLevelInd->wdiIndicationType)
13349 {
13350 case WDI_RSSI_NOTIFICATION_IND:
13351 {
13352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13353 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013354#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
13355 rssiNotification.bReserved =
13356 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
13357 rssiNotification.bRssiThres1NegCross =
13358 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
13359 rssiNotification.bRssiThres1PosCross =
13360 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
13361 rssiNotification.bRssiThres2NegCross =
13362 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
13363 rssiNotification.bRssiThres2PosCross =
13364 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
13365 rssiNotification.bRssiThres3NegCross =
13366 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
13367 rssiNotification.bRssiThres3PosCross =
13368 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080013369 rssiNotification.avgRssi = (v_S7_t)
13370 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070013371 WLANTL_BMPSRSSIRegionChangedNotification(
13372 pWDA->pVosContext,
13373 &rssiNotification);
13374#endif
13375 break ;
13376 }
13377 case WDI_MISSED_BEACON_IND:
13378 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080013379 tpSirSmeMissedBeaconInd pMissBeacInd =
13380 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070013381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13382 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013383 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080013384 if(NULL == pMissBeacInd)
13385 {
13386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13387 "%s: VOS MEM Alloc Failure", __func__);
13388 break;
13389 }
13390 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
13391 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
13392 pMissBeacInd->bssIdx =
13393 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
13394 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013395 break ;
13396 }
13397 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
13398 {
13399 /* TODO: Decode Ind and send Ind to PE */
13400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13401 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
13402 break ;
13403 }
13404
13405 case WDI_MIC_FAILURE_IND:
13406 {
13407 tpSirSmeMicFailureInd pMicInd =
13408 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
13409
13410 if(NULL == pMicInd)
13411 {
13412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013413 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013414 break;
13415 }
13416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13417 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013418 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
13419 pMicInd->length = sizeof(tSirSmeMicFailureInd);
13420 vos_mem_copy(pMicInd->bssId,
13421 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
13422 sizeof(tSirMacAddr));
13423 vos_mem_copy(pMicInd->info.srcMacAddr,
13424 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
13425 sizeof(tSirMacAddr));
13426 vos_mem_copy(pMicInd->info.taMacAddr,
13427 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
13428 sizeof(tSirMacAddr));
13429 vos_mem_copy(pMicInd->info.dstMacAddr,
13430 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
13431 sizeof(tSirMacAddr));
13432 vos_mem_copy(pMicInd->info.rxMacAddr,
13433 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
13434 sizeof(tSirMacAddr));
13435 pMicInd->info.multicast =
13436 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
13437 pMicInd->info.keyId=
13438 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
13439 pMicInd->info.IV1=
13440 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
13441 vos_mem_copy(pMicInd->info.TSC,
13442 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070013443 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
13444 (void *)pMicInd , 0) ;
13445 break ;
13446 }
13447 case WDI_FATAL_ERROR_IND:
13448 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070013449 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070013450 /* TODO: Decode Ind and send Ind to PE */
13451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13452 "Received WDI_FATAL_ERROR_IND from WDI ");
13453 break ;
13454 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013455 case WDI_DEL_STA_IND:
13456 {
Jeff Johnson295189b2012-06-20 16:38:30 -070013457 tpDeleteStaContext pDelSTACtx =
13458 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
13459
13460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13461 "Received WDI_DEL_STA_IND from WDI ");
13462 if(NULL == pDelSTACtx)
13463 {
13464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013465 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013466 break;
13467 }
13468 vos_mem_copy(pDelSTACtx->addr2,
13469 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
13470 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013471 vos_mem_copy(pDelSTACtx->bssId,
13472 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
13473 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013474 pDelSTACtx->assocId =
13475 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
13476 pDelSTACtx->reasonCode =
13477 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
13478 pDelSTACtx->staId =
13479 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070013480 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
13481 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013482 break ;
13483 }
13484 case WDI_COEX_IND:
13485 {
13486 tANI_U32 index;
13487 vos_msg_t vosMsg;
13488 tSirSmeCoexInd *pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
13489 if(NULL == pSmeCoexInd)
13490 {
13491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013492 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013493 break;
13494 }
13495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13496 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013497 /* Message Header */
13498 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
13499 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070013500 /* Info from WDI Indication */
13501 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
13502 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
13503 {
13504 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
13505 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013506 /* VOS message wrapper */
13507 vosMsg.type = eWNI_SME_COEX_IND;
13508 vosMsg.bodyptr = (void *)pSmeCoexInd;
13509 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013510 /* Send message to SME */
13511 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13512 {
13513 /* free the mem and return */
13514 vos_mem_free((v_VOID_t *)pSmeCoexInd);
13515 }
13516 else
13517 {
13518 /* DEBUG */
13519 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13520 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
13521 pSmeCoexInd->coexIndType,
13522 pSmeCoexInd->coexIndData[0],
13523 pSmeCoexInd->coexIndData[1],
13524 pSmeCoexInd->coexIndData[2],
13525 pSmeCoexInd->coexIndData[3]);
13526 }
13527 break;
13528 }
13529 case WDI_TX_COMPLETE_IND:
13530 {
13531 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
13532 /* Calling TxCompleteAck Indication from wda context*/
13533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13534 "Complete Indication received from HAL");
13535 if( pWDA->pAckTxCbFunc )
13536 {
13537 if( VOS_STATUS_SUCCESS !=
13538 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
13539 {
13540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13541 "Tx Complete timeout Timer Stop Failed ");
13542 }
13543 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
13544 pWDA->pAckTxCbFunc = NULL;
13545 }
13546 else
13547 {
13548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13549 "Tx Complete Indication is received after timeout ");
13550 }
13551 break;
13552 }
Viral Modid86bde22012-12-10 13:09:21 -080013553 case WDI_P2P_NOA_START_IND :
13554 {
13555 tSirP2PNoaStart *pP2pNoaStart =
13556 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
13557
13558 if (NULL == pP2pNoaStart)
13559 {
13560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13561 "Memory allocation failure, "
13562 "WDI_P2P_NOA_START_IND not forwarded");
13563 break;
13564 }
13565 pP2pNoaStart->status =
13566 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
13567 pP2pNoaStart->bssIdx =
13568 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
13569 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
13570 (void *)pP2pNoaStart , 0) ;
13571 break;
13572 }
13573
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053013574#ifdef FEATURE_WLAN_TDLS
13575 case WDI_TDLS_IND :
13576 {
13577 tSirTdlsInd *pTdlsInd =
13578 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
13579
13580 if (NULL == pTdlsInd)
13581 {
13582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13583 "Memory allocation failure, "
13584 "WDI_TDLS_IND not forwarded");
13585 break;
13586 }
13587 pTdlsInd->status =
13588 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
13589 pTdlsInd->assocId =
13590 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
13591 pTdlsInd->staIdx =
13592 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
13593 pTdlsInd->reasonCode =
13594 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
13595 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
13596 (void *)pTdlsInd , 0) ;
13597 break;
13598 }
13599#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013600 case WDI_P2P_NOA_ATTR_IND :
13601 {
13602 tSirP2PNoaAttr *pP2pNoaAttr =
13603 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13605 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070013606 if (NULL == pP2pNoaAttr)
13607 {
13608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13609 "Memory allocation failure, "
13610 "WDI_P2P_NOA_ATTR_IND not forwarded");
13611 break;
13612 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013613 pP2pNoaAttr->index =
13614 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
13615 pP2pNoaAttr->oppPsFlag =
13616 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
13617 pP2pNoaAttr->ctWin =
13618 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
13619
13620 pP2pNoaAttr->uNoa1IntervalCnt =
13621 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
13622 pP2pNoaAttr->uNoa1Duration =
13623 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
13624 pP2pNoaAttr->uNoa1Interval =
13625 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
13626 pP2pNoaAttr->uNoa1StartTime =
13627 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070013628 pP2pNoaAttr->uNoa2IntervalCnt =
13629 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
13630 pP2pNoaAttr->uNoa2Duration =
13631 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
13632 pP2pNoaAttr->uNoa2Interval =
13633 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
13634 pP2pNoaAttr->uNoa2StartTime =
13635 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070013636 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
13637 (void *)pP2pNoaAttr , 0) ;
13638 break;
13639 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013640#ifdef FEATURE_WLAN_SCAN_PNO
13641 case WDI_PREF_NETWORK_FOUND_IND:
13642 {
13643 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070013644 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
13645 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
13646 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
13647 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
13648
Jeff Johnson295189b2012-06-20 16:38:30 -070013649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13650 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070013651 if (NULL == pPrefNetworkFoundInd)
13652 {
13653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13654 "Memory allocation failure, "
13655 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053013656 if (NULL !=
13657 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
13658 {
13659 wpalMemoryFree(
13660 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
13661 );
13662 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
13663 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013664 break;
13665 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013666 /* Message Header */
13667 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070013668 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070013669
13670 /* Info from WDI Indication */
13671 pPrefNetworkFoundInd->ssId.length =
13672 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070013673 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070013674 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
13675 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
13676 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070013677 if (NULL !=
13678 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
13679 {
13680 pPrefNetworkFoundInd->frameLength =
13681 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
13682 vos_mem_copy( pPrefNetworkFoundInd->data,
13683 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
13684 pPrefNetworkFoundInd->frameLength);
13685 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
13686 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
13687 }
13688 else
13689 {
13690 pPrefNetworkFoundInd->frameLength = 0;
13691 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013692 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070013693 /* VOS message wrapper */
13694 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
13695 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
13696 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013697 /* Send message to SME */
13698 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13699 {
13700 /* free the mem and return */
13701 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
13702 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013703 break;
13704 }
13705#endif // FEATURE_WLAN_SCAN_PNO
13706
13707#ifdef WLAN_WAKEUP_EVENTS
13708 case WDI_WAKE_REASON_IND:
13709 {
13710 vos_msg_t vosMsg;
13711 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
13712 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
13713 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
13714
13715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Sushant Kaushik1b645382014-10-13 16:39:36 +053013716 "[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 -070013717 wdiLowLevelInd->wdiIndicationType,
13718 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
13719 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
13720 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
13721
13722 if (NULL == pWakeReasonInd)
13723 {
13724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13725 "Memory allocation failure, "
13726 "WDI_WAKE_REASON_IND not forwarded");
13727 break;
13728 }
13729
13730 vos_mem_zero(pWakeReasonInd, allocSize);
13731
13732 /* Message Header */
13733 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
13734 pWakeReasonInd->mesgLen = allocSize;
13735
13736 /* Info from WDI Indication */
13737 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
13738 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
13739 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
13740 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
13741 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
13742 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
13743 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
13744 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
13745
13746 /* VOS message wrapper */
13747 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
13748 vosMsg.bodyptr = (void *) pWakeReasonInd;
13749 vosMsg.bodyval = 0;
13750
13751 /* Send message to SME */
13752 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13753 {
13754 /* free the mem and return */
13755 vos_mem_free((v_VOID_t *) pWakeReasonInd);
13756 }
13757
13758 break;
13759 }
13760#endif // WLAN_WAKEUP_EVENTS
13761
13762 case WDI_TX_PER_HIT_IND:
13763 {
13764 vos_msg_t vosMsg;
13765 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
13766 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
13767 /* VOS message wrapper */
13768 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
13769 vosMsg.bodyptr = NULL;
13770 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013771 /* Send message to SME */
13772 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13773 {
13774 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
13775 }
13776 break;
13777 }
13778
Leo Chang9056f462013-08-01 19:21:11 -070013779#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070013780 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070013781 {
Leo Changd9df8aa2013-09-26 13:32:26 -070013782 vos_msg_t vosMsg;
13783 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070013784
Leo Changd9df8aa2013-09-26 13:32:26 -070013785 lphbInd =
13786 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
13787 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070013788 {
13789 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13790 "%s: LPHB IND buffer alloc Fail", __func__);
13791 return ;
13792 }
13793
Leo Changd9df8aa2013-09-26 13:32:26 -070013794 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070013795 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070013796 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070013797 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070013798 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070013799 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
13800
13801 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070013802 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070013803 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
13804
Leo Changd9df8aa2013-09-26 13:32:26 -070013805 vosMsg.type = eWNI_SME_LPHB_IND;
13806 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070013807 vosMsg.bodyval = 0;
13808 /* Send message to SME */
13809 if (VOS_STATUS_SUCCESS !=
13810 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13811 {
13812 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13813 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070013814 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070013815 }
13816 break;
13817 }
13818#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070013819 case WDI_PERIODIC_TX_PTRN_FW_IND:
13820 {
13821 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13822 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
13823 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
13824 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
13825 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
13826 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
13827 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
13828
13829 break;
13830 }
Leo Chang9056f462013-08-01 19:21:11 -070013831
Ravi Joshid2ca7c42013-07-23 08:37:49 -070013832 case WDI_IBSS_PEER_INACTIVITY_IND:
13833 {
13834 tSirIbssPeerInactivityInd *pIbssInd =
13835 (tSirIbssPeerInactivityInd *)
13836 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
13837
13838 if (NULL == pIbssInd)
13839 {
13840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13841 "Memory allocation failure, "
13842 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
13843 break;
13844 }
13845
13846 pIbssInd->bssIdx =
13847 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
13848 pIbssInd->staIdx =
13849 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
13850 vos_mem_copy(pIbssInd->peerAddr,
13851 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
13852 sizeof(tSirMacAddr));
13853 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
13854 break;
13855 }
13856
Rajeev79dbe4c2013-10-05 11:03:42 +053013857#ifdef FEATURE_WLAN_BATCH_SCAN
13858 case WDI_BATCH_SCAN_RESULT_IND:
13859 {
13860 void *pBatchScanResult;
13861 void *pCallbackContext;
13862 tpAniSirGlobal pMac;
13863
13864 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13865 "Received WDI_BATCHSCAN_RESULT_IND from FW");
13866
13867 /*sanity check*/
Sunil Duttbd736ed2014-05-26 21:19:41 +053013868 if (NULL == pWDA)
Rajeev79dbe4c2013-10-05 11:03:42 +053013869 {
13870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13871 "%s:pWDA is NULL", __func__);
13872 VOS_ASSERT(0);
13873 return;
13874 }
13875
13876 pBatchScanResult =
13877 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
13878 if (NULL == pBatchScanResult)
13879 {
13880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13881 "%s:Batch scan result from FW is null can't invoke HDD callback",
13882 __func__);
13883 VOS_ASSERT(0);
13884 return;
13885 }
13886
13887 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13888 if (NULL == pMac)
13889 {
13890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13891 "%s:pMac is NULL", __func__);
13892 VOS_ASSERT(0);
13893 return;
13894 }
13895
13896 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
13897 /*call hdd callback with set batch scan response data*/
13898 if(pMac->pmc.batchScanResultCallback)
13899 {
13900 pMac->pmc.batchScanResultCallback(pCallbackContext,
13901 pBatchScanResult);
13902 }
13903 else
13904 {
13905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13906 "%s:HDD callback is null", __func__);
13907 VOS_ASSERT(0);
13908 }
13909 break;
13910 }
13911#endif
13912
Leo Chang0b0e45a2013-12-15 15:18:55 -080013913#ifdef FEATURE_WLAN_CH_AVOID
13914 case WDI_CH_AVOID_IND:
13915 {
13916 vos_msg_t vosMsg;
13917 tSirChAvoidIndType *chAvoidInd;
13918
13919 chAvoidInd =
13920 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
13921 if (NULL == chAvoidInd)
13922 {
13923 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13924 "%s: CH_AVOID IND buffer alloc Fail", __func__);
13925 return ;
13926 }
13927
13928 chAvoidInd->avoidRangeCount =
13929 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
13930 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
13931 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
13932 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
13933
13934 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13935 "%s : WDA CH avoid notification", __func__);
13936
13937 vosMsg.type = eWNI_SME_CH_AVOID_IND;
13938 vosMsg.bodyptr = chAvoidInd;
13939 vosMsg.bodyval = 0;
13940 /* Send message to SME */
13941 if (VOS_STATUS_SUCCESS !=
13942 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13943 {
13944 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13945 "post eWNI_SME_CH_AVOID_IND to SME Failed");
13946 vos_mem_free(chAvoidInd);
13947 }
13948 break;
13949 }
13950#endif /* FEATURE_WLAN_CH_AVOID */
13951
Sunil Duttbd736ed2014-05-26 21:19:41 +053013952#ifdef WLAN_FEATURE_LINK_LAYER_STATS
13953 case WDI_LL_STATS_RESULTS_IND:
13954 {
13955 void *pLinkLayerStatsInd;
Sunil Duttbd736ed2014-05-26 21:19:41 +053013956 tpAniSirGlobal pMac;
13957
13958 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13959 "Received WDI_LL_STATS_RESULTS_IND from FW");
13960
13961 /*sanity check*/
13962 if (NULL == pWDA)
13963 {
13964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13965 "%s:pWDA is NULL", __func__);
13966 VOS_ASSERT(0);
13967 return;
13968 }
13969
13970 pLinkLayerStatsInd =
Dino Mycled3d50022014-07-07 12:58:25 +053013971 (void *)wdiLowLevelInd->
13972 wdiIndicationData.wdiLinkLayerStatsResults.pLinkLayerStatsResults;
Sunil Duttbd736ed2014-05-26 21:19:41 +053013973 if (NULL == pLinkLayerStatsInd)
13974 {
13975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13976 "%s:Link Layer Statistics from FW is null can't invoke HDD callback",
13977 __func__);
13978 VOS_ASSERT(0);
13979 return;
13980 }
13981
13982 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13983 if (NULL == pMac)
13984 {
13985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13986 "%s:pMac is NULL", __func__);
13987 VOS_ASSERT(0);
13988 return;
13989 }
13990
Dino Mycled3d50022014-07-07 12:58:25 +053013991 /* call hdd callback with Link Layer Statistics.
13992 * vdev_id/ifacId in link_stats_results will be
13993 * used to retrieve the correct HDD context
13994 */
Sunil Duttbd736ed2014-05-26 21:19:41 +053013995 if (pMac->sme.pLinkLayerStatsIndCallback)
13996 {
Dino Mycled3d50022014-07-07 12:58:25 +053013997 pMac->sme.pLinkLayerStatsIndCallback(pMac->pAdapter,
Sunil Duttbd736ed2014-05-26 21:19:41 +053013998 WDA_LINK_LAYER_STATS_RESULTS_RSP,
Dino Mycled3d50022014-07-07 12:58:25 +053013999 pLinkLayerStatsInd,
14000 wdiLowLevelInd->
14001 wdiIndicationData.wdiLinkLayerStatsResults.macAddr);
Sunil Duttbd736ed2014-05-26 21:19:41 +053014002 }
14003 else
14004 {
14005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14006 "%s:HDD callback is null", __func__);
14007 }
14008 break;
14009 }
14010#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
14011
Dino Mycle41bdc942014-06-10 11:30:24 +053014012#ifdef WLAN_FEATURE_EXTSCAN
14013 case WDI_EXTSCAN_PROGRESS_IND:
14014 case WDI_EXTSCAN_SCAN_AVAILABLE_IND:
14015 case WDI_EXTSCAN_SCAN_RESULT_IND:
14016 case WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND:
14017 case WDI_EXTSCAN_SIGN_RSSI_RESULT_IND:
14018 {
14019 void *pEXTScanData;
14020 void *pCallbackContext;
14021 tpAniSirGlobal pMac;
14022 tANI_U16 indType;
14023
14024 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14025 "Received WDI_EXTSCAN Indications from FW");
14026 /*sanity check*/
14027 if (NULL == pWDA)
14028 {
14029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14030 "%s:pWDA is NULL", __func__);
14031 VOS_ASSERT(0);
14032 return;
14033 }
14034 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_PROGRESS_IND)
14035 {
14036 indType = WDA_EXTSCAN_PROGRESS_IND;
14037
14038 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14039 "WDI_EXTSCAN Indication is WDI_EXTSCAN_PROGRESS_IND");
14040 }
14041 if (wdiLowLevelInd->wdiIndicationType ==
14042 WDI_EXTSCAN_SCAN_AVAILABLE_IND)
14043 {
14044 indType = WDA_EXTSCAN_SCAN_AVAILABLE_IND;
14045
14046 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14047 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_AVAILABLE_IND");
14048 }
14049 if (wdiLowLevelInd->wdiIndicationType == WDI_EXTSCAN_SCAN_RESULT_IND)
14050 {
14051 indType = WDA_EXTSCAN_SCAN_RESULT_IND;
14052
14053 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14054 "WDI_EXTSCAN Indication is WDI_EXTSCAN_SCAN_RESULT_IND");
14055 }
14056 if (wdiLowLevelInd->wdiIndicationType ==
14057 WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND)
14058 {
14059 indType = WDA_EXTSCAN_BSSID_HOTLIST_RESULT_IND;
14060
14061 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14062 "WDI_EXTSCAN Indication is WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND");
14063 }
14064 if (wdiLowLevelInd->wdiIndicationType ==
14065 WDI_EXTSCAN_SIGN_RSSI_RESULT_IND)
14066 {
14067 indType = WDA_EXTSCAN_SIGNF_RSSI_RESULT_IND;
14068
14069 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14070 "WDI_EXTSCAN Indication is WDA_EXTSCAN_SIGNF_RSSI_RESULT_IND");
14071 }
14072
14073 pEXTScanData =
14074 (void *)wdiLowLevelInd->wdiIndicationData.pEXTScanIndData;
14075 if (NULL == pEXTScanData)
14076 {
14077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14078 "%s: EXTSCAN Indication Data is null, can't invoke HDD callback",
14079 __func__);
14080 VOS_ASSERT(0);
14081 return;
14082 }
14083
14084 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14085 if (NULL == pMac)
14086 {
14087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14088 "%s:pMac is NULL", __func__);
14089 VOS_ASSERT(0);
14090 return;
14091 }
14092
14093 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
14094
14095 if(pMac->sme.pEXTScanIndCb)
14096 {
14097 pMac->sme.pEXTScanIndCb(pCallbackContext,
14098 indType,
14099 pEXTScanData);
14100 }
14101 else
14102 {
14103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14104 "%s:HDD callback is null", __func__);
14105 }
14106 break;
14107 }
14108#endif /* WLAN_FEATURE_EXTSCAN */
Abhishek Singh66c16762014-08-14 19:13:19 +053014109 case WDI_DEL_BA_IND:
14110 {
14111 tpBADeleteParams pDelBAInd =
14112 (tpBADeleteParams)vos_mem_malloc(sizeof(tpBADeleteParams));
14113
14114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14115 "Received WDI_DEL_BA_IND from WDI ");
14116 if(NULL == pDelBAInd)
14117 {
14118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14119 "%s: VOS MEM Alloc Failure", __func__);
14120 break;
14121 }
14122 vos_mem_copy(pDelBAInd->peerMacAddr,
14123 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.peerMacAddr,
14124 sizeof(tSirMacAddr));
14125 vos_mem_copy(pDelBAInd->bssId,
14126 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.bssId,
14127 sizeof(tSirMacAddr));
14128 pDelBAInd->staIdx =
14129 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.staIdx;
14130 pDelBAInd->baTID =
14131 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baTID;
14132 pDelBAInd->baDirection =
14133 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.baDirection;
14134 pDelBAInd->reasonCode =
14135 wdiLowLevelInd->wdiIndicationData.wdiDeleteBAInd.reasonCode;
14136
14137 WDA_SendMsg(pWDA, SIR_LIM_DEL_BA_IND,
14138 (void *)pDelBAInd , 0) ;
14139 break;
14140 }
Dino Mycle41bdc942014-06-10 11:30:24 +053014141
Jeff Johnson295189b2012-06-20 16:38:30 -070014142 default:
14143 {
14144 /* TODO error */
14145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14146 "Received UNKNOWN Indication from WDI ");
14147 }
14148 }
14149 return ;
14150}
14151
Jeff Johnson295189b2012-06-20 16:38:30 -070014152/*
14153 * BA related processing in WDA.
14154 */
Jeff Johnson295189b2012-06-20 16:38:30 -070014155void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
14156 void* pUserData)
14157{
14158 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14159 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070014160 if(NULL == pWdaParams)
14161 {
14162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014163 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014164 VOS_ASSERT(0) ;
14165 return ;
14166 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014167 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070014168 vos_mem_free(pWdaParams->wdaMsgParam) ;
14169 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14170 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014172 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014173 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
14174 {
14175 tANI_U8 i = 0 ;
14176 tBaActivityInd *baActivityInd = NULL ;
14177 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
14178 tANI_U8 allocSize = sizeof(tBaActivityInd)
14179 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
14180 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
14181 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014182 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014183 if(NULL == baActivityInd)
14184 {
14185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014186 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014187 VOS_ASSERT(0) ;
14188 return;
14189 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014190 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
14191 sizeof(tSirMacAddr)) ;
14192 baActivityInd->baCandidateCnt = baCandidateCount ;
14193
14194 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
14195 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
14196
14197 for(i = 0 ; i < baCandidateCount ; i++)
14198 {
14199 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014200 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
14201 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014202 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
14203 {
14204 baCandidate->baInfo[tid].fBaEnable =
14205 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
14206 baCandidate->baInfo[tid].startingSeqNum =
14207 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
14208 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070014209 wdiBaCandidate++ ;
14210 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014211 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014212 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
14213 }
14214 else
14215 {
14216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14217 "BA Trigger RSP with Failure received ");
14218 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014219 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014220}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014221
14222
14223/*
14224 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
14225 * during MCC
14226 */
14227void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
14228{
14229 wpt_uint32 enabled;
14230 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
14231 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
14232 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
14233
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014234 if (NULL == pMac )
14235 {
14236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14237 "%s: Invoked with invalid MAC context ", __func__ );
14238 VOS_ASSERT(0);
14239 return;
14240 }
14241
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014242 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
14243 != eSIR_SUCCESS)
14244 {
14245 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14246 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
14247 return;
14248 }
14249
14250 if(!enabled)
14251 {
14252 return;
14253 }
14254
14255 if(NULL == pWDA)
14256 {
14257 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14258 "%s:WDA context is NULL", __func__);
14259 VOS_ASSERT(0);
14260 return;
14261 }
14262
14263 if(activate)
14264 {
14265 if( VOS_STATUS_SUCCESS !=
14266 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
14267 {
14268 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14269 "Traffic Stats Timer Start Failed ");
14270 return;
14271 }
14272 WDI_DS_ActivateTrafficStats();
14273 }
14274 else
14275 {
14276 WDI_DS_DeactivateTrafficStats();
14277 WDI_DS_ClearTrafficStats();
14278
14279 if( VOS_STATUS_SUCCESS !=
14280 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
14281 {
14282 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14283 "Traffic Stats Timer Stop Failed ");
14284 return;
14285 }
14286 }
14287}
14288
14289/*
14290 * Traffic Stats Timer handler
14291 */
14292void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
14293{
14294 WDI_Status wdiStatus;
14295 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
14296 WDI_TrafficStatsIndType trafficStatsIndParams;
14297 wpt_uint32 length, enabled;
14298 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14299
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014300 if (NULL == pMac )
14301 {
14302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14303 "%s: Invoked with invalid MAC context ", __func__ );
14304 VOS_ASSERT(0);
14305 return;
14306 }
14307
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014308 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
14309 != eSIR_SUCCESS)
14310 {
14311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14312 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
14313 return;
14314 }
14315
14316 if(!enabled)
14317 {
14318 WDI_DS_DeactivateTrafficStats();
14319 return;
14320 }
14321
14322 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
14323
14324 if(pWdiTrafficStats != NULL)
14325 {
14326 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
14327 trafficStatsIndParams.length = length;
14328 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080014329 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014330 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
14331 trafficStatsIndParams.pUserData = pWDA;
14332
14333 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
14334
14335 if(WDI_STATUS_PENDING == wdiStatus)
14336 {
14337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14338 "Pending received for %s:%d ",__func__,__LINE__ );
14339 }
14340 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
14341 {
14342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14343 "Failure in %s:%d ",__func__,__LINE__ );
14344 }
14345
14346 WDI_DS_ClearTrafficStats();
14347 }
14348 else
14349 {
14350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
14351 "pWdiTrafficStats is Null");
14352 }
14353
14354 if( VOS_STATUS_SUCCESS !=
14355 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
14356 {
14357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
14358 "Traffic Stats Timer Start Failed ");
14359 return;
14360 }
14361}
14362
Jeff Johnson295189b2012-06-20 16:38:30 -070014363/*
14364 * BA Activity check timer handler
14365 */
14366void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
14367{
14368 tANI_U8 curSta = 0 ;
14369 tANI_U8 tid = 0 ;
14370 tANI_U8 size = 0 ;
14371 tANI_U8 baCandidateCount = 0 ;
14372 tANI_U8 newBaCandidate = 0 ;
Abhishek Singh0644e482014-10-06 18:38:23 +053014373 tANI_U32 val;
Jeff Johnson295189b2012-06-20 16:38:30 -070014374 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
Abhishek Singh0644e482014-10-06 18:38:23 +053014375 tpAniSirGlobal pMac;
14376
Jeff Johnson295189b2012-06-20 16:38:30 -070014377 if(NULL == pWDA)
14378 {
14379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014380 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014381 VOS_ASSERT(0);
14382 return ;
14383 }
14384 if(WDA_MAX_STA < pWDA->wdaMaxSta)
14385 {
14386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14387 "Inconsistent STA entries in WDA");
14388 VOS_ASSERT(0) ;
Abhishek Singh0644e482014-10-06 18:38:23 +053014389 }
14390 if(NULL == pWDA->pVosContext)
14391 {
14392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14393 "%s: pVosContext is NULL",__func__);
14394 VOS_ASSERT(0);
14395 return ;
14396 }
14397 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Abhishek Singh68883952014-10-14 11:59:05 +053014398 if(NULL == pMac)
14399 {
14400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14401 "%s: pMac is NULL",__func__);
14402 VOS_ASSERT(0);
14403 return ;
14404 }
14405
Abhishek Singh0644e482014-10-06 18:38:23 +053014406 if (wlan_cfgGetInt(pMac,
14407 WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC, &val) !=
14408 eSIR_SUCCESS)
14409 {
14410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14411 "Unable to get WNI_CFG_DEL_ALL_RX_TX_BA_SESSIONS_2_4_G_BTC");
14412 val = 0;
14413 }
14414
Jeff Johnson295189b2012-06-20 16:38:30 -070014415 /* walk through all STA entries and find out TX packet count */
14416 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
14417 {
Abhishek Singh0644e482014-10-06 18:38:23 +053014418 tANI_U32 currentOperChan = pWDA->wdaStaInfo[curSta].currentOperChan;
Gopichand Nakkala976e3252013-01-03 15:45:56 -080014419#ifdef WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053014420 // We can only do BA on "hard" STAs.
14421 if (!(IS_HWSTA_IDX(curSta)))
14422 {
14423 continue;
14424 }
Gopichand Nakkala976e3252013-01-03 15:45:56 -080014425#endif //WLAN_SOFTAP_VSTA_FEATURE
Abhishek Singh0644e482014-10-06 18:38:23 +053014426 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
14427 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070014428 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014429 tANI_U32 txPktCount = 0 ;
14430 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014431 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070014432 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
14433 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070014434 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
14435 curSta, tid, &txPktCount)))
14436 {
14437#if 0
14438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
14439 "************* %d:%d, %d ",curSta, txPktCount,
14440 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
14441#endif
Abhishek Singh0644e482014-10-06 18:38:23 +053014442 if(val && ( (currentOperChan >= SIR_11B_CHANNEL_BEGIN) &&
14443 (currentOperChan <= SIR_11B_CHANNEL_END)))
14444 {
14445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14446 "%s: BTC disabled aggregation - dont start "
14447 "TX ADDBA req",__func__);
14448 }
14449 else if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070014450 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Jeff Johnson295189b2012-06-20 16:38:30 -070014451 && (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
14452 curSta, tid)))
14453 {
14454 /* get prepare for sending message to HAL */
14455 //baCandidate[baCandidateCount].staIdx = curSta ;
14456 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
14457 newBaCandidate = WDA_ENABLE_BA ;
14458 }
14459 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
14460 }
14461 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014462 /* fill the entry for all the sta with given TID's */
14463 if(WDA_ENABLE_BA == newBaCandidate)
14464 {
14465 /* move to next BA candidate */
14466 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
14467 size += sizeof(WDI_TriggerBAReqCandidateType) ;
14468 baCandidateCount++ ;
14469 newBaCandidate = WDA_DISABLE_BA ;
14470 }
14471 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014472 /* prepare and send message to hal */
14473 if( 0 < baCandidateCount)
14474 {
14475 WDI_Status status = WDI_STATUS_SUCCESS ;
14476 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
14477 tWDA_ReqParams *pWdaParams =
14478 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014479 if(NULL == pWdaParams)
14480 {
14481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014482 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014483 VOS_ASSERT(0) ;
14484 return;
14485 }
14486 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
14487 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
14488 if(NULL == wdiTriggerBaReq)
14489 {
14490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014491 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014492 VOS_ASSERT(0) ;
14493 vos_mem_free(pWdaParams);
14494 return;
14495 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014496 do
14497 {
14498 WDI_TriggerBAReqinfoType *triggerBaInfo =
14499 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
14500 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
14501 /* TEMP_FIX: Need to see if WDI need check for assoc session for
14502 * for each request */
14503 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
14504 triggerBaInfo->ucBASessionID = 0;
14505 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
14506 } while(0) ;
14507 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
14508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014509 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014510 pWdaParams->pWdaContext = pWDA;
14511 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
14512 pWdaParams->wdaMsgParam = NULL;
14513 status = WDI_TriggerBAReq(wdiTriggerBaReq,
14514 WDA_TriggerBaReqCallback, pWdaParams) ;
14515 if(IS_WDI_STATUS_FAILURE(status))
14516 {
14517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14518 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
14519 vos_mem_free(pWdaParams->wdaMsgParam) ;
14520 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14521 vos_mem_free(pWdaParams) ;
14522 }
14523 }
14524 else
14525 {
14526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
14527 "There is no TID for initiating BA");
14528 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014529 if( VOS_STATUS_SUCCESS !=
14530 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
14531 {
14532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14533 "BA Activity Timer Stop Failed ");
14534 return ;
14535 }
14536 if( VOS_STATUS_SUCCESS !=
14537 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
14538 {
14539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14540 "BA Activity Timer Start Failed ");
14541 return;
14542 }
14543 return ;
14544}
Jeff Johnson295189b2012-06-20 16:38:30 -070014545/*
14546 * WDA common routine to create timer used by WDA.
14547 */
14548static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
14549{
Jeff Johnson295189b2012-06-20 16:38:30 -070014550 VOS_STATUS status = VOS_STATUS_SUCCESS ;
14551 tANI_U32 val = 0 ;
14552 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
14553
14554 if(NULL == pMac)
14555 {
14556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014557 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014558 VOS_ASSERT(0);
14559 return VOS_STATUS_E_FAILURE;
14560 }
14561 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
14562 != eSIR_SUCCESS)
14563 {
14564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14565 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
14566 return VOS_STATUS_E_FAILURE;
14567 }
14568 val = SYS_MS_TO_TICKS(val) ;
14569
14570 /* BA activity check timer */
14571 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
14572 "BA Activity Check timer", WDA_TimerHandler,
14573 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
14574 if(status != TX_SUCCESS)
14575 {
14576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14577 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014578 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014579 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014580 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014581 /* Tx Complete Timeout timer */
14582 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
14583 "Tx Complete Check timer", WDA_TimerHandler,
14584 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014585 if(status != TX_SUCCESS)
14586 {
14587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14588 "Unable to create Tx Complete Timeout timer");
14589 /* Destroy timer of BA activity check timer */
14590 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
14591 if(status != TX_SUCCESS)
14592 {
14593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14594 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014595 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014596 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014597 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014598 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014599
14600 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
14601
14602 /* Traffic Stats timer */
14603 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
14604 "Traffic Stats timer", WDA_TimerHandler,
14605 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
14606 if(status != TX_SUCCESS)
14607 {
14608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14609 "Unable to create traffic stats timer");
14610 /* Destroy timer of BA activity check timer */
14611 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
14612 if(status != TX_SUCCESS)
14613 {
14614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14615 "Unable to Destroy BA activity timer");
14616 }
14617 /* Destroy timer of tx complete timer */
14618 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
14619 if(status != TX_SUCCESS)
14620 {
14621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14622 "Unable to Tx complete timer");
14623 }
14624 return VOS_STATUS_E_FAILURE ;
14625 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014626 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014627}
Jeff Johnson295189b2012-06-20 16:38:30 -070014628/*
14629 * WDA common routine to destroy timer used by WDA.
14630 */
14631static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
14632{
14633 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014634 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
14635 if(status != TX_SUCCESS)
14636 {
14637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14638 "Unable to Destroy Tx Complete Timeout timer");
14639 return eSIR_FAILURE ;
14640 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014641 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
14642 if(status != TX_SUCCESS)
14643 {
14644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14645 "Unable to Destroy BA activity timer");
14646 return eSIR_FAILURE ;
14647 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080014648 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
14649 if(status != TX_SUCCESS)
14650 {
14651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14652 "Unable to Destroy traffic stats timer");
14653 return eSIR_FAILURE ;
14654 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014655 return eSIR_SUCCESS ;
14656}
Jeff Johnson295189b2012-06-20 16:38:30 -070014657/*
14658 * WDA timer handler.
14659 */
14660void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
14661{
14662 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
14663 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014664 /*
14665 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
14666 */
14667 wdaMsg.type = timerInfo ;
14668 wdaMsg.bodyptr = NULL;
14669 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070014670 /* post the message.. */
14671 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
14672 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
14673 {
14674 vosStatus = VOS_STATUS_E_BADMSG;
14675 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014676}
Jeff Johnson295189b2012-06-20 16:38:30 -070014677/*
14678 * WDA Tx Complete timeout Indication.
14679 */
14680void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
14681{
14682 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014683 if( pWDA->pAckTxCbFunc )
14684 {
14685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014686 "TxComplete timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070014687 pWDA->pAckTxCbFunc( pMac, 0);
14688 pWDA->pAckTxCbFunc = NULL;
14689 }
14690 else
14691 {
14692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014693 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070014694 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014695}
Jeff Johnson295189b2012-06-20 16:38:30 -070014696/*
14697 * WDA Set REG Domain to VOS NV
14698 */
Abhishek Singha306a442013-11-07 18:39:01 +053014699eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
14700 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070014701{
Abhishek Singha306a442013-11-07 18:39:01 +053014702 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070014703 {
14704 return eHAL_STATUS_INVALID_PARAMETER;
14705 }
14706 return eHAL_STATUS_SUCCESS;
14707}
Jeff Johnson295189b2012-06-20 16:38:30 -070014708
Jeff Johnson295189b2012-06-20 16:38:30 -070014709#ifdef FEATURE_WLAN_SCAN_PNO
14710/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014711 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014712 *
14713 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014714void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014715{
14716 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014717 tSirPNOScanReq *pPNOScanReqParams;
14718
Jeff Johnson295189b2012-06-20 16:38:30 -070014719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014720 "<------ %s, wdiStatus: %d",__func__, status);
Yue Ma7f44bbe2013-04-12 11:47:39 -070014721 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070014722 {
14723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014724 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014725 VOS_ASSERT(0) ;
14726 return ;
14727 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014728
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014729 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
14730 if(pPNOScanReqParams->statusCallback)
14731 {
14732 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
14733 (status == WDI_STATUS_SUCCESS) ?
14734 VOS_STATUS_SUCCESS : VOS_STATUS_E_FAILURE);
14735 }
14736
Yue Ma7f44bbe2013-04-12 11:47:39 -070014737 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14738 vos_mem_free(pWdaParams->wdaMsgParam);
14739 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014740
14741 return ;
14742}
Jeff Johnson295189b2012-06-20 16:38:30 -070014743/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014744 * FUNCTION: WDA_PNOScanReqCallback
14745 * Free memory.
14746 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
14747 */
14748void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014749{
Yue Ma7f44bbe2013-04-12 11:47:39 -070014750 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014751 tSirPNOScanReq *pPNOScanReqParams;
Yue Ma7f44bbe2013-04-12 11:47:39 -070014752
14753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14754 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14755
14756 if(NULL == pWdaParams)
14757 {
14758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14759 "%s: pWdaParams received NULL", __func__);
14760 VOS_ASSERT(0);
14761 return;
14762 }
14763
14764 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14765 {
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014766 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
14767 if(pPNOScanReqParams->statusCallback)
14768 {
14769 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
14770 VOS_STATUS_E_FAILURE);
14771 }
14772
Yue Ma7f44bbe2013-04-12 11:47:39 -070014773 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14774 vos_mem_free(pWdaParams->wdaMsgParam);
14775 vos_mem_free(pWdaParams);
14776 }
14777
14778 return;
14779}
14780/*
14781 * FUNCTION: WDA_UpdateScanParamsRespCallback
14782 *
14783 */
14784void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
14785{
14786 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014788 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070014789 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070014790 {
14791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014792 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014793 VOS_ASSERT(0) ;
14794 return ;
14795 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014796
14797 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14798 vos_mem_free(pWdaParams->wdaMsgParam);
14799 vos_mem_free(pWdaParams);
14800
Jeff Johnson295189b2012-06-20 16:38:30 -070014801 return ;
14802}
Jeff Johnson295189b2012-06-20 16:38:30 -070014803/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014804 * FUNCTION: WDA_UpdateScanParamsReqCallback
14805 * Free memory.
14806 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
14807 */
14808void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
14809{
14810 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14811
14812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14813 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14814
14815 if(NULL == pWdaParams)
14816 {
14817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14818 "%s: pWdaParams received NULL", __func__);
14819 VOS_ASSERT(0);
14820 return;
14821 }
14822
14823 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14824 {
14825 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14826 vos_mem_free(pWdaParams->wdaMsgParam);
14827 vos_mem_free(pWdaParams);
14828 }
14829
14830 return;
14831}
14832/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014833 * FUNCTION: WDA_ProcessSetPreferredNetworkList
14834 * Request to WDI to set Preferred Network List.Offload
14835 */
14836VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
14837 tSirPNOScanReq *pPNOScanReqParams)
14838{
Jeff Johnson43971f52012-07-17 12:26:56 -070014839 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014840 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
14841 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
14842 tWDA_ReqParams *pWdaParams ;
14843 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014845 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014846 if(NULL == pwdiPNOScanReqInfo)
14847 {
14848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014849 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014850 VOS_ASSERT(0);
14851 return VOS_STATUS_E_NOMEM;
14852 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014853 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14854 if(NULL == pWdaParams)
14855 {
14856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014857 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014858 VOS_ASSERT(0);
14859 vos_mem_free(pwdiPNOScanReqInfo);
14860 return VOS_STATUS_E_NOMEM;
14861 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014862 //
14863 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
14864 //
14865 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
14866 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070014867 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
14868 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
14869 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014870 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
14871 {
14872 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
14873 &pPNOScanReqParams->aNetworks[i],
14874 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
14875 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014876 /*Scan timer intervals*/
14877 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
14878 &pPNOScanReqParams->scanTimers,
14879 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070014880 /*Probe template for 2.4GHz band*/
14881 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
14882 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
14883 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014884 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
14885 pPNOScanReqParams->p24GProbeTemplate,
14886 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070014887 /*Probe template for 5GHz band*/
14888 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
14889 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
14890 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014891 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
14892 pPNOScanReqParams->p5GProbeTemplate,
14893 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070014894 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
14895 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014896
Jeff Johnson295189b2012-06-20 16:38:30 -070014897 /* Store Params pass it to WDI */
14898 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
14899 pWdaParams->pWdaContext = pWDA;
14900 /* Store param pointer as passed in by caller */
14901 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014902 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014903 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014904 if(IS_WDI_STATUS_FAILURE(status))
14905 {
14906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14907 "Failure in Set PNO REQ WDI API, free all the memory " );
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014908 if(pPNOScanReqParams->statusCallback)
14909 {
14910 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
14911 VOS_STATUS_E_FAILURE);
14912 }
14913
Jeff Johnson295189b2012-06-20 16:38:30 -070014914 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14915 vos_mem_free(pWdaParams->wdaMsgParam);
14916 pWdaParams->wdaWdiApiMsgParam = NULL;
14917 pWdaParams->wdaMsgParam = NULL;
14918 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014919 return CONVERT_WDI2VOS_STATUS(status) ;
14920}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014921
14922#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
14923
14924void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
14925{
14926 /*Convert the CSR Auth types to WDI Auth types */
14927 switch (csrAuthType)
14928 {
14929 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
14930 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
14931 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014932#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014933 case eCSR_AUTH_TYPE_CCKM_WPA:
14934 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
14935 break;
14936#endif
14937 case eCSR_AUTH_TYPE_WPA:
14938 *AuthType = eWDA_AUTH_TYPE_WPA;
14939 break;
14940 case eCSR_AUTH_TYPE_WPA_PSK:
14941 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
14942 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014943#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014944 case eCSR_AUTH_TYPE_CCKM_RSN:
14945 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
14946 break;
14947#endif
14948 case eCSR_AUTH_TYPE_RSN:
14949 *AuthType = eWDA_AUTH_TYPE_RSN;
14950 break;
14951 case eCSR_AUTH_TYPE_RSN_PSK:
14952 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
14953 break;
14954#if defined WLAN_FEATURE_VOWIFI_11R
14955 case eCSR_AUTH_TYPE_FT_RSN:
14956 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
14957 break;
14958 case eCSR_AUTH_TYPE_FT_RSN_PSK:
14959 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
14960 break;
14961#endif
14962#ifdef FEATURE_WLAN_WAPI
14963 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
14964 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
14965 break;
14966 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
14967 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
14968 break;
14969#endif /* FEATURE_WLAN_WAPI */
14970 case eCSR_AUTH_TYPE_SHARED_KEY:
14971 case eCSR_AUTH_TYPE_AUTOSWITCH:
14972 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
14973 break;
14974#if 0
14975 case eCSR_AUTH_TYPE_SHARED_KEY:
14976 *AuthType = eWDA_AUTH_TYPE_SHARED_KEY;
14977 break;
14978 case eCSR_AUTH_TYPE_AUTOSWITCH:
14979 *AuthType = eWDA_AUTH_TYPE_AUTOSWITCH;
14980#endif
14981 default:
14982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14983 "%s: Unknown Auth Type", __func__);
14984 break;
14985 }
14986}
14987void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
14988{
14989 switch (csrEncrType)
14990 {
14991 case eCSR_ENCRYPT_TYPE_NONE:
14992 *EncrType = WDI_ED_NONE;
14993 break;
14994 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
14995 case eCSR_ENCRYPT_TYPE_WEP40:
14996 *EncrType = WDI_ED_WEP40;
14997 break;
14998 case eCSR_ENCRYPT_TYPE_WEP104:
14999 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
15000 *EncrType = WDI_ED_WEP104;
15001 break;
15002 case eCSR_ENCRYPT_TYPE_TKIP:
15003 *EncrType = WDI_ED_TKIP;
15004 break;
15005 case eCSR_ENCRYPT_TYPE_AES:
15006 *EncrType = WDI_ED_CCMP;
15007 break;
15008#ifdef WLAN_FEATURE_11W
15009 case eCSR_ENCRYPT_TYPE_AES_CMAC:
15010 *EncrType = WDI_ED_AES_128_CMAC;
15011 break;
15012#endif
15013#ifdef FEATURE_WLAN_WAPI
15014 case eCSR_ENCRYPT_TYPE_WPI:
15015 *EncrType = WDI_ED_WPI;
15016 break;
15017#endif
15018 case eCSR_ENCRYPT_TYPE_ANY:
15019 *EncrType = WDI_ED_ANY;
15020 break;
15021
15022 default:
15023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15024 "%s: Unknown Encryption Type", __func__);
15025 break;
15026 }
15027}
15028
15029/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015030 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015031 * Request to WDI to set Roam Offload Scan
15032 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015033VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015034 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
15035{
15036 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015037 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
15038 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015039 tWDA_ReqParams *pWdaParams ;
15040 v_U8_t csrAuthType;
15041 WDI_RoamNetworkType *pwdiRoamNetworkType;
15042 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
15043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15044 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015045 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015046 {
15047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15048 "%s: VOS MEM Alloc Failure", __func__);
15049 VOS_ASSERT(0);
15050 return VOS_STATUS_E_NOMEM;
15051 }
15052 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15053 if (NULL == pWdaParams)
15054 {
15055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15056 "%s: VOS MEM Alloc Failure", __func__);
15057 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015058 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015059 return VOS_STATUS_E_NOMEM;
15060 }
15061
15062 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015063 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015064 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015065 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
15066 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015067 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
15068 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
15069 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
15070 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
15071 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
15072 sizeof(pwdiRoamNetworkType->currAPbssid));
15073 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
15074 csrAuthType);
15075 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
15076 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
15077 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
15078 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
15079 pwdiRoamOffloadScanInfo->LookupThreshold =
15080 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080015081 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
15082 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015083 pwdiRoamOffloadScanInfo->RoamRssiDiff =
15084 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080015085 pwdiRoamOffloadScanInfo->MAWCEnabled =
15086 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015087 pwdiRoamOffloadScanInfo->Command =
15088 pRoamOffloadScanReqParams->Command ;
15089 pwdiRoamOffloadScanInfo->StartScanReason =
15090 pRoamOffloadScanReqParams->StartScanReason ;
15091 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
15092 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
15093 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
15094 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
15095 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
15096 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
15097 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
15098 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
15099 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
15100 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080015101 pwdiRoamOffloadScanInfo->IsESEEnabled =
15102 pRoamOffloadScanReqParams->IsESEEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015103 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
15104 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
15105 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
15106 pwdiRoamNetworkType->ssId.ucLength =
15107 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
15108 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
15109 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
15110 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
15111 pwdiRoamNetworkType->ChannelCount =
15112 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
15113 pwdiRoamOffloadScanInfo->ChannelCacheType =
15114 pRoamOffloadScanReqParams->ChannelCacheType;
15115 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
15116 pRoamOffloadScanReqParams->ValidChannelList,
15117 pRoamOffloadScanReqParams->ValidChannelCount);
15118 pwdiRoamOffloadScanInfo->ValidChannelCount =
15119 pRoamOffloadScanReqParams->ValidChannelCount;
15120 pwdiRoamOffloadScanInfo->us24GProbeSize =
15121 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15122 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
15123 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
15124 pRoamOffloadScanReqParams->p24GProbeTemplate,
15125 pwdiRoamOffloadScanInfo->us24GProbeSize);
15126 pwdiRoamOffloadScanInfo->us5GProbeSize =
15127 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
15128 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
15129 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
15130 pRoamOffloadScanReqParams->p5GProbeTemplate,
15131 pwdiRoamOffloadScanInfo->us5GProbeSize);
15132 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
15133 pRoamOffloadScanReqParams->MDID.mdiePresent;
15134 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
15135 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015136 pwdiRoamOffloadScanInfo->nProbes =
15137 pRoamOffloadScanReqParams->nProbes;
15138 pwdiRoamOffloadScanInfo->HomeAwayTime =
15139 pRoamOffloadScanReqParams->HomeAwayTime;
15140 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015141 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015142 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015143 pWdaParams->pWdaContext = pWDA;
15144 /* Store param pointer as passed in by caller */
15145 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070015146 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015147 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
15148 if(IS_WDI_STATUS_FAILURE(status))
15149 {
15150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15151 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
15152 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15153 vos_mem_free(pWdaParams->wdaMsgParam);
15154 pWdaParams->wdaWdiApiMsgParam = NULL;
15155 pWdaParams->wdaMsgParam = NULL;
15156 }
15157 return CONVERT_WDI2VOS_STATUS(status) ;
15158}
15159#endif
15160
Jeff Johnson295189b2012-06-20 16:38:30 -070015161/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015162 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015163 *
15164 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015165void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015166{
15167 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15168
15169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015170 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015171
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015172 if(NULL == pWdaParams)
15173 {
15174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015175 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015176 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070015177 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053015178 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015179
Jeff Johnson295189b2012-06-20 16:38:30 -070015180 vos_mem_free(pWdaParams->wdaMsgParam) ;
15181 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15182 vos_mem_free(pWdaParams) ;
15183
15184 return ;
15185}
15186/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015187 * FUNCTION: WDA_RssiFilterReqCallback
15188 * Free memory.
15189 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
15190 */
15191void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
15192{
15193 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15194
15195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15196 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15197
15198 if(NULL == pWdaParams)
15199 {
15200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15201 "%s: pWdaParams received NULL", __func__);
15202 VOS_ASSERT(0);
15203 return;
15204 }
15205
15206 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15207 {
15208 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15209 vos_mem_free(pWdaParams->wdaMsgParam);
15210 vos_mem_free(pWdaParams);
15211 }
15212
15213 return;
15214}
15215/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015216 * FUNCTION: WDA_ProcessSetPreferredNetworkList
15217 * Request to WDI to set Preferred Network List.Offload
15218 */
15219VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
15220 tSirSetRSSIFilterReq* pRssiFilterParams)
15221{
Jeff Johnson43971f52012-07-17 12:26:56 -070015222 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015223 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
15224 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
15225 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015227 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015228 if(NULL == pwdiSetRssiFilterReqInfo)
15229 {
15230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015231 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015232 VOS_ASSERT(0);
15233 return VOS_STATUS_E_NOMEM;
15234 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015235 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15236 if(NULL == pWdaParams)
15237 {
15238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015239 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015240 VOS_ASSERT(0);
15241 vos_mem_free(pwdiSetRssiFilterReqInfo);
15242 return VOS_STATUS_E_NOMEM;
15243 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015244 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070015245 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
15246 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015247
Jeff Johnson295189b2012-06-20 16:38:30 -070015248 /* Store Params pass it to WDI */
15249 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
15250 pWdaParams->pWdaContext = pWDA;
15251 /* Store param pointer as passed in by caller */
15252 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015253 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015254 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015255 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015256 if(IS_WDI_STATUS_FAILURE(status))
15257 {
15258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15259 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
15260 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15261 vos_mem_free(pWdaParams->wdaMsgParam);
15262 pWdaParams->wdaWdiApiMsgParam = NULL;
15263 pWdaParams->wdaMsgParam = NULL;
15264 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015265 return CONVERT_WDI2VOS_STATUS(status) ;
15266}
15267
Jeff Johnson295189b2012-06-20 16:38:30 -070015268/*
15269 * FUNCTION: WDA_ProcessUpdateScanParams
15270 * Request to WDI to update Scan Parameters
15271 */
15272VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
15273 tSirUpdateScanParams *pUpdateScanParams)
15274{
Jeff Johnson43971f52012-07-17 12:26:56 -070015275 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015276 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
15277 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
15278 sizeof(WDI_UpdateScanParamsInfoType)) ;
15279 tWDA_ReqParams *pWdaParams ;
15280 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070015281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015282 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015283 if(NULL == wdiUpdateScanParamsInfoType)
15284 {
15285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015286 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015287 VOS_ASSERT(0);
15288 return VOS_STATUS_E_NOMEM;
15289 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015290 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15291 if ( NULL == pWdaParams )
15292 {
15293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015294 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015295 VOS_ASSERT(0);
15296 vos_mem_free(wdiUpdateScanParamsInfoType);
15297 return VOS_STATUS_E_NOMEM;
15298 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015299 //
15300 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
15301 //
Jeff Johnson295189b2012-06-20 16:38:30 -070015302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15303 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
15304 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
15305 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080015306 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070015307 pUpdateScanParams->b11dEnabled,
15308 pUpdateScanParams->b11dResolved,
15309 pUpdateScanParams->ucChannelCount,
15310 pUpdateScanParams->usPassiveMinChTime,
15311 pUpdateScanParams->usPassiveMaxChTime,
15312 pUpdateScanParams->usActiveMinChTime,
15313 pUpdateScanParams->usActiveMaxChTime,
15314 sizeof(tSirUpdateScanParams),
15315 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
15316
Jeff Johnson295189b2012-06-20 16:38:30 -070015317 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
15318 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070015319 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
15320 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070015321 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
15322 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070015323 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
15324 pUpdateScanParams->usActiveMaxChTime;
15325 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
15326 pUpdateScanParams->usActiveMinChTime;
15327 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
15328 pUpdateScanParams->usPassiveMaxChTime;
15329 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
15330 pUpdateScanParams->usPassiveMinChTime;
15331
Jeff Johnson295189b2012-06-20 16:38:30 -070015332 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053015333 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
15334 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070015335
Jeff Johnson295189b2012-06-20 16:38:30 -070015336 for ( i = 0; i <
15337 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
15338 i++)
15339 {
15340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15341 "Update Scan Parameters channel: %d",
15342 pUpdateScanParams->aChannels[i]);
15343
15344 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
15345 pUpdateScanParams->aChannels[i];
15346 }
15347
Yue Ma7f44bbe2013-04-12 11:47:39 -070015348 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
15349 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015350
Jeff Johnson295189b2012-06-20 16:38:30 -070015351 /* Store Params pass it to WDI */
15352 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
15353 pWdaParams->pWdaContext = pWDA;
15354 /* Store param pointer as passed in by caller */
15355 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070015356
Jeff Johnson295189b2012-06-20 16:38:30 -070015357
15358
15359 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015360 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015361 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015362 if(IS_WDI_STATUS_FAILURE(status))
15363 {
15364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15365 "Failure in Update Scan Params EQ WDI API, free all the memory " );
15366 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15367 vos_mem_free(pWdaParams->wdaMsgParam);
15368 vos_mem_free(pWdaParams);
15369 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015370 return CONVERT_WDI2VOS_STATUS(status) ;
15371}
15372#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015373
15374#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
15375/*
15376 * FUNCTION: WDA_RoamOffloadScanReqCallback
15377 *
15378 */
15379void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
15380{
15381 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070015382 vos_msg_t vosMsg;
15383 wpt_uint8 reason = 0;
15384
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070015385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015386 "<------ %s " ,__func__);
15387 if (NULL == pWdaParams)
15388 {
15389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15390 "%s: pWdaParams received NULL", __func__);
15391 VOS_ASSERT(0) ;
15392 return ;
15393 }
15394 if ( pWdaParams != NULL )
15395 {
15396 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
15397 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070015398 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015399 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15400 }
15401 if ( pWdaParams->wdaMsgParam != NULL)
15402 {
15403 vos_mem_free(pWdaParams->wdaMsgParam);
15404 }
15405
15406 vos_mem_free(pWdaParams) ;
15407 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070015408 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
15409 vosMsg.bodyptr = NULL;
15410 if (WDI_STATUS_SUCCESS != status)
15411 {
15412 reason = 0;
15413 }
15414 vosMsg.bodyval = reason;
15415 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15416 {
15417 /* free the mem and return */
15418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070015419 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070015420 }
15421
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070015422 return ;
15423}
15424#endif
15425
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015426/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015427 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015428 *
15429 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015430void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015431{
15432 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15433
15434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15435 "<------ %s " ,__func__);
15436
15437 if(NULL == pWdaParams)
15438 {
15439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15440 "%s: pWdaParams received NULL", __func__);
15441 VOS_ASSERT(0);
15442 return;
15443 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015444
15445 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15446 vos_mem_free(pWdaParams->wdaMsgParam);
15447 vos_mem_free(pWdaParams);
15448
15449 return;
15450}
15451/*
15452 * FUNCTION: WDA_SetPowerParamsReqCallback
15453 * Free memory.
15454 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
15455 */
15456void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
15457{
15458 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15459
15460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15461 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15462
15463 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015464 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070015465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15466 "%s: pWdaParams received NULL", __func__);
15467 VOS_ASSERT(0);
15468 return;
15469 }
15470
15471 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15472 {
15473 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15474 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015475 vos_mem_free(pWdaParams);
15476 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015477
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080015478 return;
15479}
15480
Jeff Johnson295189b2012-06-20 16:38:30 -070015481#ifdef WLAN_FEATURE_PACKET_FILTERING
15482/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015483 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015484 *
15485 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015486void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015487 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
15488 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015489{
15490 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070015491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015492 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015493 if(NULL == pWdaParams)
15494 {
15495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015496 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015497 VOS_ASSERT(0) ;
15498 return ;
15499 }
15500
15501 vos_mem_free(pWdaParams->wdaMsgParam) ;
15502 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15503 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015504 //print a msg, nothing else to do
15505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015506 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070015507 return ;
15508}
Jeff Johnson295189b2012-06-20 16:38:30 -070015509/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015510 * FUNCTION: WDA_8023MulticastListReqCallback
15511 * Free memory.
15512 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
15513 */
15514void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
15515{
15516 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15517
15518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15519 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15520
15521 if(NULL == pWdaParams)
15522 {
15523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15524 "%s: pWdaParams received NULL", __func__);
15525 VOS_ASSERT(0);
15526 return;
15527 }
15528
15529 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15530 {
15531 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15532 vos_mem_free(pWdaParams->wdaMsgParam);
15533 vos_mem_free(pWdaParams);
15534 }
15535
15536 return;
15537}
15538/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015539 * FUNCTION: WDA_Process8023MulticastListReq
15540 * Request to WDI to add 8023 Multicast List
15541 */
15542VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
15543 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
15544{
Jeff Johnson43971f52012-07-17 12:26:56 -070015545 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015546 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
15547 tWDA_ReqParams *pWdaParams ;
15548 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070015549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015550 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015551 pwdiFltPktSetMcListReqParamsType =
15552 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
15553 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
15554 ) ;
15555 if(NULL == pwdiFltPktSetMcListReqParamsType)
15556 {
15557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015558 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015559 return VOS_STATUS_E_NOMEM;
15560 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015561 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15562 if(NULL == pWdaParams)
15563 {
15564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015565 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015566 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
15567 return VOS_STATUS_E_NOMEM;
15568 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015569
Jeff Johnson295189b2012-06-20 16:38:30 -070015570 //
15571 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
15572 //
15573 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070015574 pRcvFltMcAddrList->ulMulticastAddrCnt;
15575
15576 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
15577 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
15578 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
15579 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
15580
Jeff Johnson295189b2012-06-20 16:38:30 -070015581 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
15582 {
15583 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
15584 &(pRcvFltMcAddrList->multicastAddr[i]),
15585 sizeof(tSirMacAddr));
15586 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015587 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
15588 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015589
Jeff Johnson295189b2012-06-20 16:38:30 -070015590 /* Store Params pass it to WDI */
15591 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
15592 pWdaParams->pWdaContext = pWDA;
15593 /* Store param pointer as passed in by caller */
15594 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070015595 status = WDI_8023MulticastListReq(
15596 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015597 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015598 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015599 if(IS_WDI_STATUS_FAILURE(status))
15600 {
15601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15602 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
15603 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15604 vos_mem_free(pWdaParams->wdaMsgParam);
15605 vos_mem_free(pWdaParams);
15606 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015607 return CONVERT_WDI2VOS_STATUS(status) ;
15608}
Jeff Johnson295189b2012-06-20 16:38:30 -070015609/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015610 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015611 *
15612 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015613void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015614 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
15615 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015616{
15617 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070015618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015619 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015620 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070015621 if(NULL == pWdaParams)
15622 {
15623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015624 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015625 VOS_ASSERT(0) ;
15626 return ;
15627 }
15628
15629 vos_mem_free(pWdaParams->wdaMsgParam) ;
15630 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15631 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015632 //print a msg, nothing else to do
15633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015634 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070015635 return ;
15636}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015637
15638/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015639 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
15640 * Free memory.
15641 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015642 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015643void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015644 void* pUserData)
15645{
15646 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15647
15648 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15649 "<------ %s, wdiStatus: %d",
15650 __func__, wdiStatus);
15651
15652 if (NULL == pWdaParams)
15653 {
15654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15655 "%s: Invalid pWdaParams pointer", __func__);
15656 VOS_ASSERT(0);
15657 return;
15658 }
15659
15660 if (IS_WDI_STATUS_FAILURE(wdiStatus))
15661 {
15662 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15663 vos_mem_free(pWdaParams->wdaMsgParam);
15664 vos_mem_free(pWdaParams);
15665 }
15666
15667 return;
15668}
15669
Jeff Johnson295189b2012-06-20 16:38:30 -070015670/*
15671 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
15672 * Request to WDI to set Receive Filters
15673 */
15674VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
15675 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
15676{
Jeff Johnson43971f52012-07-17 12:26:56 -070015677 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015678 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
15679 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
15680 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
15681 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
15682 tWDA_ReqParams *pWdaParams ;
15683 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070015684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015685 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015686 if(NULL == pwdiSetRcvPktFilterReqParamsType)
15687 {
15688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015689 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015690 VOS_ASSERT(0);
15691 return VOS_STATUS_E_NOMEM;
15692 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015693 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15694 if(NULL == pWdaParams)
15695 {
15696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015697 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015698 VOS_ASSERT(0);
15699 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
15700 return VOS_STATUS_E_NOMEM;
15701 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015702 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
15703 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
15704 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
15705 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070015706 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
15707 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
15708
15709 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
15710 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070015711
15712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15713 "FID %d FT %d NParams %d CT %d",
15714 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
15715 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
15716 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
15717 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070015718 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
15719 {
15720 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
15721 &pRcvPktFilterCfg->paramsData[i],
15722 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070015723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015724 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070015725 pwdiSetRcvPktFilterReqParamsType->
15726 wdiPktFilterCfg.paramsData[i].protocolLayer,
15727 pwdiSetRcvPktFilterReqParamsType->
15728 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070015729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015730 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070015731 pwdiSetRcvPktFilterReqParamsType->
15732 wdiPktFilterCfg.paramsData[i].dataOffset,
15733 pwdiSetRcvPktFilterReqParamsType->
15734 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070015735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015736 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070015737 pwdiSetRcvPktFilterReqParamsType->
15738 wdiPktFilterCfg.paramsData[i].compareData[0],
15739 pwdiSetRcvPktFilterReqParamsType->
15740 wdiPktFilterCfg.paramsData[i].compareData[1],
15741 pwdiSetRcvPktFilterReqParamsType->
15742 wdiPktFilterCfg.paramsData[i].compareData[2],
15743 pwdiSetRcvPktFilterReqParamsType->
15744 wdiPktFilterCfg.paramsData[i].compareData[3],
15745 pwdiSetRcvPktFilterReqParamsType->
15746 wdiPktFilterCfg.paramsData[i].compareData[4],
15747 pwdiSetRcvPktFilterReqParamsType->
15748 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070015749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015750 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070015751 pwdiSetRcvPktFilterReqParamsType->
15752 wdiPktFilterCfg.paramsData[i].dataMask[0],
15753 pwdiSetRcvPktFilterReqParamsType->
15754 wdiPktFilterCfg.paramsData[i].dataMask[1],
15755 pwdiSetRcvPktFilterReqParamsType->
15756 wdiPktFilterCfg.paramsData[i].dataMask[2],
15757 pwdiSetRcvPktFilterReqParamsType->
15758 wdiPktFilterCfg.paramsData[i].dataMask[3],
15759 pwdiSetRcvPktFilterReqParamsType->
15760 wdiPktFilterCfg.paramsData[i].dataMask[4],
15761 pwdiSetRcvPktFilterReqParamsType->
15762 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070015763 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015764 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015765 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015766 /* Store Params pass it to WDI */
15767 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
15768 pWdaParams->pWdaContext = pWDA;
15769 /* Store param pointer as passed in by caller */
15770 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070015771 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015772 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015773 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015774 if(IS_WDI_STATUS_FAILURE(status))
15775 {
15776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15777 "Failure in SetFilter(),free all the memory,status %d ",status);
15778 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15779 vos_mem_free(pWdaParams->wdaMsgParam);
15780 vos_mem_free(pWdaParams);
15781 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015782 return CONVERT_WDI2VOS_STATUS(status) ;
15783}
Jeff Johnson295189b2012-06-20 16:38:30 -070015784/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015785 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015786 *
15787 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015788void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015789 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
15790 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015791{
15792 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15793 tWDA_CbContext *pWDA;
15794 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
15795 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
15796 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
15797 tANI_U8 i;
15798 vos_msg_t vosMsg;
15799
15800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015801 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015802 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
15803
Jeff Johnsone7245742012-09-05 17:12:55 -070015804 if(NULL == pRcvFltPktMatchCntRsp)
15805 {
15806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015807 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070015808 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015809 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070015810 return ;
15811 }
15812
Jeff Johnson295189b2012-06-20 16:38:30 -070015813 if(NULL == pWdaParams)
15814 {
15815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015816 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015817 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015818 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070015819 return ;
15820 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015821 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
15822 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070015823 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
15824 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
15825
15826 /* Message Header */
15827 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
15828 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
15829
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015830 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070015831
15832 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
15833 {
15834 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
15835 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
15836 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015837 /* VOS message wrapper */
15838 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
15839 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
15840 vosMsg.bodyval = 0;
15841 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15842 {
15843 /* free the mem and return */
15844 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
15845 }
15846
15847 vos_mem_free(pWdaParams->wdaMsgParam) ;
15848 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15849 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070015850
15851 return;
15852}
15853/*
15854 * FUNCTION: WDA_FilterMatchCountReqCallback
15855 * Free memory and send RSP back to SME.
15856 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
15857 */
15858void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
15859{
15860 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15861 vos_msg_t vosMsg;
15862
15863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15864 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15865
15866 if(NULL == pWdaParams)
15867 {
15868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15869 "%s: pWdaParams received NULL", __func__);
15870 VOS_ASSERT(0);
15871 return;
15872 }
15873
15874 /* VOS message wrapper */
15875 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
15876 vosMsg.bodyptr = NULL;
15877 vosMsg.bodyval = 0;
15878
15879 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15880 {
15881 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15882 vos_mem_free(pWdaParams->wdaMsgParam);
15883 vos_mem_free(pWdaParams);
15884 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
15885 }
15886
15887 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070015888}
Jeff Johnson295189b2012-06-20 16:38:30 -070015889/*
15890 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
15891 * Request to WDI to get PC Filter Match Count
15892 */
15893VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
15894{
Jeff Johnson43971f52012-07-17 12:26:56 -070015895 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015896 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
15897 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
15898 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015900 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015901 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
15902 {
15903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015904 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015905 VOS_ASSERT(0);
15906 return VOS_STATUS_E_NOMEM;
15907 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015908 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15909 if(NULL == pWdaParams)
15910 {
15911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015912 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015913 VOS_ASSERT(0);
15914 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
15915 return VOS_STATUS_E_NOMEM;
15916 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015917
Yue Ma7f44bbe2013-04-12 11:47:39 -070015918 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
15919 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015920
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015921 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
15922 pRcvFltPktMatchRsp->bssId,
15923 sizeof(wpt_macAddr));
15924
Jeff Johnson295189b2012-06-20 16:38:30 -070015925 /* Store Params pass it to WDI */
15926 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
15927 pWdaParams->pWdaContext = pWDA;
15928 /* Store param pointer as passed in by caller */
15929 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070015930 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015931 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015932 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015933 if(IS_WDI_STATUS_FAILURE(status))
15934 {
15935 /* failure returned by WDI API */
15936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15937 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
15938 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15939 vos_mem_free(pWdaParams) ;
15940 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
15941 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
15942 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015943 return CONVERT_WDI2VOS_STATUS(status) ;
15944}
Jeff Johnson295189b2012-06-20 16:38:30 -070015945/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015946 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015947 *
15948 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015949void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015950 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
15951 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015952{
15953 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070015954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015955 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015956/* WDA_VOS_ASSERT(NULL != pWdaParams); */
15957 if(NULL == pWdaParams)
15958 {
15959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015960 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015961 VOS_ASSERT(0) ;
15962 return ;
15963 }
15964
15965 vos_mem_free(pWdaParams->wdaMsgParam) ;
15966 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15967 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015968 //print a msg, nothing else to do
15969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015970 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070015971 return ;
15972}
Jeff Johnson295189b2012-06-20 16:38:30 -070015973/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015974 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
15975 * Free memory.
15976 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
15977 */
15978void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
15979{
15980 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15981
15982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15983 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15984
15985 if(NULL == pWdaParams)
15986 {
15987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15988 "%s: Invalid pWdaParams pointer", __func__);
15989 VOS_ASSERT(0);
15990 return;
15991 }
15992
15993 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15994 {
15995 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15996 vos_mem_free(pWdaParams->wdaMsgParam);
15997 vos_mem_free(pWdaParams);
15998 }
15999
16000 return;
16001}
16002/*
Jeff Johnson295189b2012-06-20 16:38:30 -070016003 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
16004 * Request to WDI to clear Receive Filters
16005 */
16006VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
16007 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
16008{
Jeff Johnson43971f52012-07-17 12:26:56 -070016009 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016010 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
16011 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
16012 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016014 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016015 if(NULL == pwdiRcvFltPktClearReqParamsType)
16016 {
16017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016018 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016019 VOS_ASSERT(0);
16020 return VOS_STATUS_E_NOMEM;
16021 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016022 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16023 if(NULL == pWdaParams)
16024 {
16025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016026 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016027 VOS_ASSERT(0);
16028 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
16029 return VOS_STATUS_E_NOMEM;
16030 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016031 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
16032 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070016033 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
16034 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
16035 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
16036 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070016037
Yue Ma7f44bbe2013-04-12 11:47:39 -070016038 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016039 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016040 /* Store Params pass it to WDI */
16041 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
16042 pWdaParams->pWdaContext = pWDA;
16043 /* Store param pointer as passed in by caller */
16044 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070016045 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080016046 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016047 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016048 if(IS_WDI_STATUS_FAILURE(status))
16049 {
16050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16051 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
16052 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080016053 vos_mem_free(pWdaParams->wdaMsgParam);
16054 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016055 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016056 return CONVERT_WDI2VOS_STATUS(status) ;
16057}
16058#endif // WLAN_FEATURE_PACKET_FILTERING
16059
Jeff Johnson295189b2012-06-20 16:38:30 -070016060/*
16061 * FUNCTION: WDA_ProcessSetPowerParamsReq
16062 * Request to WDI to set power params
16063 */
16064VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
16065 tSirSetPowerParamsReq *pPowerParams)
16066{
Jeff Johnson43971f52012-07-17 12:26:56 -070016067 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070016068 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
16069 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016070 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070016071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016072 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016073 if(NULL == pwdiSetPowerParamsReqInfo)
16074 {
16075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016076 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016077 VOS_ASSERT(0);
16078 return VOS_STATUS_E_NOMEM;
16079 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016080 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16081 if(NULL == pWdaParams)
16082 {
16083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016084 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016085 VOS_ASSERT(0);
16086 vos_mem_free(pwdiSetPowerParamsReqInfo);
16087 return VOS_STATUS_E_NOMEM;
16088 }
Jeff Johnsone7245742012-09-05 17:12:55 -070016089
Jeff Johnson295189b2012-06-20 16:38:30 -070016090
16091 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
16092 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070016093 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
16094 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070016095 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
16096 pPowerParams->uListenInterval;
16097 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
16098 pPowerParams->uBcastMcastFilter;
16099 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
16100 pPowerParams->uEnableBET;
16101 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
16102 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070016103 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
16104 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070016105 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
16106 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016107
Jeff Johnson295189b2012-06-20 16:38:30 -070016108 /* Store Params pass it to WDI */
16109 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
16110 pWdaParams->pWdaContext = pWDA;
16111 /* Store param pointer as passed in by caller */
16112 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070016113 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070016114 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070016115 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070016116 if(IS_WDI_STATUS_FAILURE(status))
16117 {
16118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16119 "Failure in Set power params REQ WDI API, free all the memory " );
16120 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16121 vos_mem_free(pWdaParams->wdaMsgParam);
16122 pWdaParams->wdaWdiApiMsgParam = NULL;
16123 pWdaParams->wdaMsgParam = NULL;
16124 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016125 return CONVERT_WDI2VOS_STATUS(status) ;
16126}
16127
16128/*
16129 * FUNCTION: WDA_SetTmLevelRspCallback
16130 * Set TM Level response
16131 */
16132void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
16133{
16134 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16135
16136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016137 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016138
16139 if(NULL == pWdaParams)
16140 {
16141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016142 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016143 VOS_ASSERT(0) ;
16144 return ;
16145 }
16146
16147 /* Dose not need to send notification to upper layer
16148 * Just free allocated resources */
16149 if( pWdaParams != NULL )
16150 {
16151 if( pWdaParams->wdaWdiApiMsgParam != NULL )
16152 {
16153 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16154 }
16155 vos_mem_free(pWdaParams->wdaMsgParam) ;
16156 vos_mem_free(pWdaParams) ;
16157 }
16158}
16159
16160/*
16161 * FUNCTION: WDA_ProcessSetTmLevelReq
16162 * Set TM Level request
16163 */
16164VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
16165 tAniSetTmLevelReq *setTmLevelReq)
16166{
16167 WDI_Status status = WDI_STATUS_SUCCESS ;
16168 tWDA_ReqParams *pWdaParams ;
16169 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
16170 (WDI_SetTmLevelReqType *)vos_mem_malloc(
16171 sizeof(WDI_SetTmLevelReqType)) ;
16172 if(NULL == wdiSetTmLevelReq)
16173 {
16174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016175 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016176 VOS_ASSERT(0);
16177 return VOS_STATUS_E_NOMEM;
16178 }
16179
16180 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16181 if(NULL == pWdaParams)
16182 {
16183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016184 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016185 VOS_ASSERT(0);
16186 vos_mem_free(wdiSetTmLevelReq);
16187 return VOS_STATUS_E_NOMEM;
16188 }
16189
16190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016191 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016192
16193 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
16194 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
16195
16196 pWdaParams->pWdaContext = pWDA;
16197 pWdaParams->wdaMsgParam = setTmLevelReq;
16198 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
16199
16200 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
16201 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
16202
16203 if(IS_WDI_STATUS_FAILURE(status))
16204 {
16205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080016206 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070016207 vos_mem_free(pWdaParams->wdaMsgParam) ;
16208 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16209 vos_mem_free(pWdaParams) ;
16210 }
16211
16212 return CONVERT_WDI2VOS_STATUS(status) ;
16213}
16214
16215VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
16216 tpTxControlParams pTxCtrlParam)
16217{
16218 VOS_STATUS wdaStatus;
16219
16220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016221 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016222 if( pTxCtrlParam == NULL )
16223 {
16224 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016225 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070016226 return VOS_STATUS_E_FAILURE;
16227 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016228 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
16229 {
16230 wdaStatus = WDA_SuspendDataTx(pWDA);
16231 }
16232 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
16233 {
16234 wdaStatus = WDA_ResumeDataTx(pWDA);
16235 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016236 return wdaStatus;
16237}
16238
16239 /* FUNCTION WDA_featureCapsExchange
16240 * WDA API to invoke capability exchange between host and FW.
16241 */
16242void WDA_featureCapsExchange(v_PVOID_t pVosContext)
16243{
16244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016245 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070016246 WDI_featureCapsExchangeReq( NULL, pVosContext);
16247}
16248
Yathish9f22e662012-12-10 14:21:35 -080016249/* FUNCTION WDA_disableCapablityFeature
16250 * WDA API to diable Active mode offload in host.
16251 */
16252void WDA_disableCapablityFeature(tANI_U8 feature_index)
16253{
16254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16255 "%s:enter", __func__ );
16256 WDI_disableCapablityFeature(feature_index);
16257}
16258
Jeff Johnson295189b2012-06-20 16:38:30 -070016259 /* FUNCTION WDA_getHostWlanFeatCaps
16260 * Wrapper for WDI API, that will return if the feature (enum value).passed
16261 * to this API is supported or not in Host
16262 * return value
16263 * 0 - implies feature is NOT Supported
16264 * any non zero value - implies feature is SUPPORTED
16265 */
16266tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
16267{
16268 return WDI_getHostWlanFeatCaps(featEnumValue);
16269}
16270
16271 /* FUNCTION WDA_getFwWlanFeatCaps
16272 * Wrapper for WDI API, that will return if the feature (enum value).passed
16273 * to this API is supported or not in FW
16274 * return value
16275 * 0 - implies feature is NOT Supported
16276 * any non zero value - implies feature is SUPPORTED
16277 */
16278tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
16279{
16280 return WDI_getFwWlanFeatCaps(featEnumValue);
16281}
16282
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053016283
Jeff Johnson295189b2012-06-20 16:38:30 -070016284/*
16285 * FUNCTION: WDA_shutdown
16286 * Shutdown WDA/WDI without handshaking with Riva.
16287 * Synchronous function.
16288 */
16289VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
16290{
16291 WDI_Status wdiStatus;
16292 //tANI_U8 eventIdx = 0;
16293 VOS_STATUS status = VOS_STATUS_SUCCESS;
16294 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070016295 if (NULL == pWDA)
16296 {
16297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016298 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070016299 VOS_ASSERT(0);
16300 return VOS_STATUS_E_FAILURE;
16301 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016302 /* FTM mode stay START_STATE */
16303 if( (WDA_READY_STATE != pWDA->wdaState) &&
16304 (WDA_INIT_STATE != pWDA->wdaState) &&
16305 (WDA_START_STATE != pWDA->wdaState) )
16306 {
16307 VOS_ASSERT(0);
16308 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016309
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080016310 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
16311 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070016312 {
16313 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080016314 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070016315 }
Leo Chang9d76f622013-08-23 16:34:52 -070016316 else
16317 {
16318 vos_event_destroy(&pWDA->ftmStopDoneEvent);
16319 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070016320
Jeff Johnson295189b2012-06-20 16:38:30 -070016321 /* call WDI shutdown */
16322 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070016323 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
16324 {
16325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16326 "error in WDA Stop" );
16327 status = VOS_STATUS_E_FAILURE;
16328 }
16329 /* WDI stop is synchrnous, shutdown is complete when it returns */
16330 pWDA->wdaState = WDA_STOP_STATE;
16331
Jeff Johnson295189b2012-06-20 16:38:30 -070016332 /* shutdown should perform the stop & close actions. */
16333 /* Destroy the event */
16334 status = vos_event_destroy(&pWDA->txFrameEvent);
16335 if(!VOS_IS_STATUS_SUCCESS(status))
16336 {
16337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016338 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070016339 status = VOS_STATUS_E_FAILURE;
16340 }
16341 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
16342 if(!VOS_IS_STATUS_SUCCESS(status))
16343 {
16344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016345 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070016346 status = VOS_STATUS_E_FAILURE;
16347 }
16348 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
16349 if(!VOS_IS_STATUS_SUCCESS(status))
16350 {
16351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080016352 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070016353 status = VOS_STATUS_E_FAILURE;
16354 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016355 /* free WDA context */
16356 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
16357 if ( !VOS_IS_STATUS_SUCCESS(status) )
16358 {
16359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16360 "error in WDA close " );
16361 status = VOS_STATUS_E_FAILURE;
16362 }
Jeff Johnson295189b2012-06-20 16:38:30 -070016363 return status;
16364}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080016365
Jeff Johnsone7245742012-09-05 17:12:55 -070016366/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080016367 * FUNCTION: WDA_setNeedShutdown
16368 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070016369 */
16370
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080016371void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070016372{
16373 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070016374 if(pWDA == NULL)
16375 {
16376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16377 "Could not get the WDA Context pointer" );
16378 return;
16379 }
Jeff Johnsone7245742012-09-05 17:12:55 -070016380 pWDA->needShutdown = TRUE;
16381}
16382/*
16383 * FUNCTION: WDA_needShutdown
16384 * WDA needs a shutdown
16385 */
16386
16387v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
16388{
16389 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070016390 if(pWDA == NULL)
16391 {
16392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16393 "Could not get the WDA Context pointer" );
16394 return 0;
16395 }
16396 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070016397}
16398
Mohit Khanna4a70d262012-09-11 16:30:12 -070016399#ifdef WLAN_FEATURE_11AC
16400/*
16401 * FUNCTION: WDA_SetBeaconFilterReqCallback
16402 *
16403 */
16404void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
16405{
16406 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016408 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016409 if(NULL == pWdaParams)
16410 {
16411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016412 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016413 VOS_ASSERT(0) ;
16414 return ;
16415 }
Jeff Johnsone7245742012-09-05 17:12:55 -070016416
Mohit Khanna4a70d262012-09-11 16:30:12 -070016417 vos_mem_free(pWdaParams->wdaMsgParam) ;
16418 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16419 vos_mem_free(pWdaParams) ;
16420 /*
16421 * No respone required for SetBeaconFilter req so just free the request
16422 * param here
16423 */
16424
16425 return ;
16426}
16427
16428VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
16429 tUpdateVHTOpMode *pData)
16430{
16431 WDI_Status status = WDI_STATUS_SUCCESS ;
16432 tWDA_ReqParams *pWdaParams ;
16433 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
16434 sizeof(WDI_UpdateVHTOpMode)) ;
16435 if(NULL == wdiTemp)
16436 {
16437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016438 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016439 VOS_ASSERT(0);
16440 return VOS_STATUS_E_NOMEM;
16441 }
16442 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16443 if(NULL == pWdaParams)
16444 {
16445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070016446 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070016447 VOS_ASSERT(0);
16448 vos_mem_free(wdiTemp);
16449 return VOS_STATUS_E_NOMEM;
16450 }
16451
16452 wdiTemp->opMode = pData->opMode;
16453 wdiTemp->staId = pData->staId;
16454
16455 pWdaParams->pWdaContext = pWDA;
16456 /* Store Req pointer, as this will be used for response */
16457 pWdaParams->wdaMsgParam = (void *)pData;
16458 /* store Params pass it to WDI */
16459 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
16460
16461 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
16462
16463 if(IS_WDI_STATUS_FAILURE(status))
16464 {
16465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16466 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
16467 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
16468 vos_mem_free(pWdaParams->wdaMsgParam);
16469 vos_mem_free(pWdaParams);
16470 }
16471 return CONVERT_WDI2VOS_STATUS(status) ;
16472}
16473#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016474
16475/*==========================================================================
16476 FUNCTION WDA_TransportChannelDebug
16477
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070016478 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016479 Display Transport Channel debugging information
16480 User may request to display DXE channel snapshot
16481 Or if host driver detects any abnormal stcuk may display
16482
16483 PARAMETERS
schang6295e542013-03-12 15:31:23 -070016484 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080016485 displaySnapshot : Display DXE snapshot option
Mihir Shete40a55652014-03-02 14:14:47 +053016486 debugFlags : Enable stall detect features
16487 defined by WPAL_DeviceDebugFlags
16488 These features may effect
16489 data performance.
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016490
16491 RETURN VALUE
16492 NONE
16493
16494===========================================================================*/
16495void WDA_TransportChannelDebug
16496(
schang6295e542013-03-12 15:31:23 -070016497 tpAniSirGlobal pMac,
16498 v_BOOL_t displaySnapshot,
Mihir Shete40a55652014-03-02 14:14:47 +053016499 v_U8_t debugFlags
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016500)
16501{
Mihir Shete40a55652014-03-02 14:14:47 +053016502 WDI_TransportChannelDebug(displaySnapshot, debugFlags);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070016503 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070016504}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070016505
16506/*==========================================================================
16507 FUNCTION WDA_SetEnableSSR
16508
16509 DESCRIPTION
16510 API to enable/disable SSR on WDI timeout
16511
16512 PARAMETERS
16513 enableSSR : enable/disable SSR
16514
16515 RETURN VALUE
16516 NONE
16517
16518===========================================================================*/
16519void WDA_SetEnableSSR(v_BOOL_t enableSSR)
16520{
16521 WDI_SetEnableSSR(enableSSR);
16522}
Leo Chang9056f462013-08-01 19:21:11 -070016523
16524#ifdef FEATURE_WLAN_LPHB
16525/*
16526 * FUNCTION: WDA_LPHBconfRspCallback
16527 *
16528 */
16529void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
16530{
16531 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16532
16533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16534 "<------ %s " ,__func__);
16535 if (NULL == pWdaParams)
16536 {
16537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16538 "%s: pWdaParams received NULL", __func__);
16539 VOS_ASSERT(0) ;
16540 return ;
16541 }
16542
16543 /* Do not need to send notification to upper layer
16544 * Just free allocated resources */
16545 if (pWdaParams != NULL)
16546 {
16547 if (pWdaParams->wdaWdiApiMsgParam != NULL)
16548 {
16549 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16550 }
16551 vos_mem_free(pWdaParams->wdaMsgParam) ;
16552 vos_mem_free(pWdaParams) ;
16553 }
16554
16555 return;
16556}
16557
16558/*
16559 * FUNCTION: WDA_ProcessLPHBConfReq
16560 *
16561 */
16562VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
16563 tSirLPHBReq *pData)
16564{
16565 WDI_Status wdiStatus;
16566 tWDA_ReqParams *pWdaParams ;
16567
16568 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16569 "------> %s " , __func__);
16570
16571 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
16572 if (NULL == pWdaParams)
16573 {
16574 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16575 "%s: VOS MEM Alloc Failure", __func__);
16576 VOS_ASSERT(0);
16577 vos_mem_free(pData);
16578 return VOS_STATUS_E_NOMEM;
16579 }
16580
16581 pWdaParams->pWdaContext = pWDA;
16582 pWdaParams->wdaMsgParam = (void *)pData;
16583 pWdaParams->wdaWdiApiMsgParam = NULL;
16584
16585 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
16586 if (WDI_STATUS_PENDING == wdiStatus)
16587 {
16588 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16589 "Pending received for %s:%d ", __func__, __LINE__);
16590 }
16591 else if (WDI_STATUS_SUCCESS != wdiStatus)
16592 {
16593 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16594 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
16595 vos_mem_free(pWdaParams->wdaMsgParam);
16596 vos_mem_free(pWdaParams);
16597 }
16598
16599 return CONVERT_WDI2VOS_STATUS(wdiStatus);
16600}
16601#endif /* FEATURE_WLAN_LPHB */
16602
c_hpothu92367912014-05-01 15:18:17 +053016603void WDA_GetBcnMissRateCallback(tANI_U8 status, tANI_U32 bcnMissRate,
16604 void* pUserData)
16605{
16606 tSirBcnMissRateInfo *pBcnMissRateInfo = (tSirBcnMissRateInfo *)pUserData;
16607
16608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16609 "<------ %s " ,__func__);
16610 if (NULL == pBcnMissRateInfo)
16611 {
16612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16613 "%s: pWdaParams received NULL", __func__);
16614 VOS_ASSERT(0) ;
16615 return ;
16616 }
16617 if (pBcnMissRateInfo->callback)
16618 {
16619 pBcnMissRateInfo->callback(status, bcnMissRate,
16620 pBcnMissRateInfo->data);
16621 }
16622 vos_mem_free(pUserData);
16623
16624 return;
16625}
16626
16627v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
16628 tSirBcnMissRateReq *pData)
16629{
16630 WDI_Status wdiStatus;
16631 tSirBcnMissRateInfo *pBcnMissRateInfo;
16632
16633 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16634 "------> %s " , __func__);
16635
16636 pBcnMissRateInfo =
16637 (tSirBcnMissRateInfo *)vos_mem_malloc(sizeof(tSirBcnMissRateInfo));
16638 if (NULL == pBcnMissRateInfo)
16639 {
16640 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16641 "%s: VOS MEM Alloc Failure", __func__);
16642 VOS_ASSERT(0);
16643 vos_mem_free(pData);
16644 return;
16645 }
16646
16647 pBcnMissRateInfo->callback = (pGetBcnMissRateCB)(pData->callback);
16648 pBcnMissRateInfo->data = pData->data;
16649
16650 wdiStatus = WDI_GetBcnMissRate(pBcnMissRateInfo,
16651 WDA_GetBcnMissRateCallback,
16652 pData->bssid);
16653 if (WDI_STATUS_PENDING == wdiStatus)
16654 {
16655 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16656 "Pending received for %s:%d ", __func__, __LINE__);
16657 }
16658 else if (WDI_STATUS_SUCCESS != wdiStatus)
16659 {
16660 if (pBcnMissRateInfo->callback)
16661 {
16662 pBcnMissRateInfo->callback(VOS_STATUS_E_FAILURE,
16663 -1, pBcnMissRateInfo->data);
16664 }
16665 }
16666 vos_mem_free(pData);
16667}
Dino Mycle41bdc942014-06-10 11:30:24 +053016668
16669#ifdef WLAN_FEATURE_EXTSCAN
16670
16671/*==========================================================================
16672 FUNCTION WDA_EXTScanStartRspCallback
16673
16674 DESCRIPTION
16675 API to send EXTScan Start Response to HDD
16676
16677 PARAMETERS
16678 pEventData: Response from FW
16679 pUserData:
16680===========================================================================*/
16681void WDA_EXTScanStartRspCallback(void *pEventData, void* pUserData)
16682{
16683 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16684 tWDA_CbContext *pWDA = NULL;
16685 void *pCallbackContext;
16686 tpAniSirGlobal pMac;
16687
16688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16689 "%s:", __func__);
16690 if (NULL == pWdaParams)
16691 {
16692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16693 "%s: pWdaParams received NULL", __func__);
16694 VOS_ASSERT(0);
16695 return;
16696 }
16697
16698 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
16699
16700 if (NULL == pWDA)
16701 {
16702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16703 "%s: pWDA received NULL", __func__);
16704 VOS_ASSERT(0);
16705 goto error;
16706 }
16707
16708 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16709 if (NULL == pMac)
16710 {
16711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16712 "%s:pMac is NULL", __func__);
16713 VOS_ASSERT(0);
16714 goto error;
16715 }
16716
16717 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
16718
16719 if (pMac->sme.pEXTScanIndCb)
16720 {
16721 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_START_RSP,
16722 pEventData);
16723 }
16724 else
16725 {
16726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16727 "%s:HDD callback is null", __func__);
16728 VOS_ASSERT(0);
16729 }
16730
16731error:
16732
16733 if (pWdaParams->wdaWdiApiMsgParam != NULL)
16734 {
16735 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16736 }
16737 if (pWdaParams->wdaMsgParam != NULL)
16738 {
16739 vos_mem_free(pWdaParams->wdaMsgParam);
16740 }
16741 vos_mem_free(pWdaParams) ;
16742
16743 return;
16744}
16745
16746/*==========================================================================
16747 FUNCTION WDA_EXTScanStopRspCallback
16748
16749 DESCRIPTION
16750 API to send EXTScan Stop Response to HDD
16751
16752 PARAMETERS
16753 pEventData: Response from FW
16754 pUserData:
16755===========================================================================*/
16756void WDA_EXTScanStopRspCallback(void *pEventData, void* pUserData)
16757{
16758 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16759 tWDA_CbContext *pWDA = NULL;
16760 void *pCallbackContext;
16761 tpAniSirGlobal pMac;
16762
16763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16764 "%s:", __func__);
16765 if (NULL == pWdaParams)
16766 {
16767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16768 "%s: pWdaParams received NULL", __func__);
16769 VOS_ASSERT(0);
16770 return;
16771 }
16772
16773 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
16774
16775 if (NULL == pWDA)
16776 {
16777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16778 "%s: pWDA received NULL", __func__);
16779 VOS_ASSERT(0);
16780 goto error;
16781 }
16782
16783 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16784 if (NULL == pMac)
16785 {
16786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16787 "%s:pMac is NULL", __func__);
16788 VOS_ASSERT(0);
16789 goto error;
16790 }
16791 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
16792
16793 if (pMac->sme.pEXTScanIndCb)
16794 {
16795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16796 "%s:HDD call back function called", __func__);
16797 pMac->sme.pEXTScanIndCb(pCallbackContext, WDA_EXTSCAN_STOP_RSP,
16798 pEventData);
16799 }
16800 else
16801 {
16802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16803 "%s:HDD callback is null", __func__);
16804 VOS_ASSERT(0);
16805 }
16806
16807error:
16808
16809 if (pWdaParams->wdaWdiApiMsgParam != NULL)
16810 {
16811 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16812 }
16813 if (pWdaParams->wdaMsgParam != NULL)
16814 {
16815 vos_mem_free(pWdaParams->wdaMsgParam);
16816 }
16817 vos_mem_free(pWdaParams) ;
16818
16819
16820 return;
16821}
16822
16823/*==========================================================================
16824 FUNCTION WDA_EXTScanGetCachedResultsRspCallback
16825
16826 DESCRIPTION
16827 API to send EXTScan Get Cached Results Response to HDD
16828
16829 PARAMETERS
16830 pEventData: Response from FW
16831 pUserData:
16832===========================================================================*/
16833void WDA_EXTScanGetCachedResultsRspCallback(void *pEventData, void* pUserData)
16834{
16835 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16836 tWDA_CbContext *pWDA = NULL;
16837 void *pCallbackContext;
16838 tpAniSirGlobal pMac;
16839
16840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16841 "%s: ", __func__);
16842 if (NULL == pWdaParams)
16843 {
16844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16845 "%s: pWdaParams received NULL", __func__);
16846 VOS_ASSERT(0);
16847 return;
16848 }
16849
16850 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
16851
16852 if (NULL == pWDA)
16853 {
16854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16855 "%s: pWDA received NULL", __func__);
16856 VOS_ASSERT(0);
16857 goto error;
16858 }
16859
16860 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16861 if (NULL == pMac)
16862 {
16863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16864 "%s:pMac is NULL", __func__);
16865 VOS_ASSERT(0);
16866 goto error;
16867 }
16868
16869 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
16870
16871 if (pMac->sme.pEXTScanIndCb)
16872 {
16873 pMac->sme.pEXTScanIndCb(pCallbackContext,
16874 WDA_EXTSCAN_GET_CACHED_RESULTS_RSP,
16875 pEventData);
16876 }
16877 else
16878 {
16879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16880 "%s:HDD callback is null", __func__);
16881 VOS_ASSERT(0);
16882 }
16883
16884
16885error:
16886
16887 if (pWdaParams->wdaWdiApiMsgParam != NULL)
16888 {
16889 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16890 }
16891 if (pWdaParams->wdaMsgParam != NULL)
16892 {
16893 vos_mem_free(pWdaParams->wdaMsgParam);
16894 }
16895 vos_mem_free(pWdaParams) ;
16896
16897 return;
16898}
16899
16900/*==========================================================================
16901 FUNCTION WDA_EXTScanGetCapabilitiesRspCallback
16902
16903 DESCRIPTION
16904 API to send EXTScan Get Capabilities Response to HDD
16905
16906 PARAMETERS
16907 pEventData: Response from FW
16908 pUserData:
16909===========================================================================*/
16910void WDA_EXTScanGetCapabilitiesRspCallback(void *pEventData, void* pUserData)
16911{
16912 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16913 tWDA_CbContext *pWDA = NULL;
16914 void *pCallbackContext;
16915 tpAniSirGlobal pMac;
16916
16917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16918 "%s:", __func__);
16919 if (NULL == pWdaParams)
16920 {
16921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16922 "%s: pWdaParams received NULL", __func__);
16923 VOS_ASSERT(0);
16924 return;
16925 }
16926
16927 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
16928
16929 if (NULL == pWDA)
16930 {
16931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16932 "%s: pWDA received NULL", __func__);
16933 VOS_ASSERT(0);
16934 goto error;
16935 }
16936
16937 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
16938 if (NULL == pMac)
16939 {
16940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16941 "%s:pMac is NULL", __func__);
16942 VOS_ASSERT(0);
16943 goto error;
16944 }
16945
16946 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
16947
16948 if (pMac->sme.pEXTScanIndCb)
16949 {
16950 pMac->sme.pEXTScanIndCb(pCallbackContext,
16951 WDA_EXTSCAN_GET_CAPABILITIES_RSP,
16952 pEventData);
16953 }
16954 else
16955 {
16956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16957 "%s:HDD callback is null", __func__);
16958 VOS_ASSERT(0);
16959 }
16960
16961
16962error:
16963
16964 if (pWdaParams->wdaWdiApiMsgParam != NULL)
16965 {
16966 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
16967 }
16968 if (pWdaParams->wdaMsgParam != NULL)
16969 {
16970 vos_mem_free(pWdaParams->wdaMsgParam);
16971 }
16972 vos_mem_free(pWdaParams) ;
16973
16974 return;
16975}
16976
16977/*==========================================================================
16978 FUNCTION WDA_EXTScanSetBSSIDHotlistRspCallback
16979
16980 DESCRIPTION
16981 API to send EXTScan Set BSSID Hotlist Response to HDD
16982
16983 PARAMETERS
16984 pEventData: Response from FW
16985 pUserData:
16986===========================================================================*/
16987void WDA_EXTScanSetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
16988{
16989 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
16990 tWDA_CbContext *pWDA = NULL;
16991 void *pCallbackContext;
16992 tpAniSirGlobal pMac;
16993
16994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
16995 "%s: ", __func__);
16996 if (NULL == pWdaParams)
16997 {
16998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
16999 "%s: pWdaParams received NULL", __func__);
17000 VOS_ASSERT(0) ;
17001 return;
17002 }
17003
17004 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17005
17006 if (NULL == pWDA)
17007 {
17008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17009 "%s: pWDA received NULL", __func__);
17010 VOS_ASSERT(0);
17011 goto error;
17012 }
17013
17014 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17015 if (NULL == pMac)
17016 {
17017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17018 "%s:pMac is NULL", __func__);
17019 VOS_ASSERT(0);
17020 goto error;
17021 }
17022
17023 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17024
17025 if (pMac->sme.pEXTScanIndCb)
17026 {
17027 pMac->sme.pEXTScanIndCb(pCallbackContext,
17028 WDA_EXTSCAN_SET_BSSID_HOTLIST_RSP,
17029 pEventData);
17030 }
17031 else
17032 {
17033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17034 "%s:HDD callback is null", __func__);
17035 VOS_ASSERT(0);
17036 }
17037
17038
17039error:
17040
17041 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17042 {
17043 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17044 }
17045 if (pWdaParams->wdaMsgParam != NULL)
17046 {
17047 vos_mem_free(pWdaParams->wdaMsgParam);
17048 }
17049 vos_mem_free(pWdaParams) ;
17050
17051 return;
17052}
17053
17054/*==========================================================================
17055 FUNCTION WDA_EXTScanResetBSSIDHotlistRspCallback
17056
17057 DESCRIPTION
17058 API to send EXTScan ReSet BSSID Hotlist Response to HDD
17059
17060 PARAMETERS
17061 pEventData: Response from FW
17062 pUserData:
17063===========================================================================*/
17064void WDA_EXTScanResetBSSIDHotlistRspCallback(void *pEventData, void* pUserData)
17065{
17066 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17067 tWDA_CbContext *pWDA = NULL;
17068 void *pCallbackContext;
17069 tpAniSirGlobal pMac;
17070
17071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17072 "%s:", __func__);
17073 if (NULL == pWdaParams)
17074 {
17075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17076 "%s: pWdaParams received NULL", __func__);
17077 VOS_ASSERT(0) ;
17078 return;
17079 }
17080
17081 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17082
17083 if (NULL == pWDA)
17084 {
17085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17086 "%s: pWDA received NULL", __func__);
17087 VOS_ASSERT(0);
17088 goto error;
17089 }
17090
17091 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17092 if (NULL == pMac)
17093 {
17094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17095 "%s:pMac is NULL", __func__);
17096 VOS_ASSERT(0);
17097 goto error;
17098 }
17099
17100 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17101
17102 if (pMac->sme.pEXTScanIndCb)
17103 {
17104 pMac->sme.pEXTScanIndCb(pCallbackContext,
17105 WDA_EXTSCAN_RESET_BSSID_HOTLIST_RSP,
17106 pEventData);
17107 }
17108 else
17109 {
17110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17111 "%s:HDD callback is null", __func__);
17112 VOS_ASSERT(0);
17113 }
17114
17115
17116error:
17117
17118 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17119 {
17120 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17121 }
17122 if (pWdaParams->wdaMsgParam != NULL)
17123 {
17124 vos_mem_free(pWdaParams->wdaMsgParam);
17125 }
17126 vos_mem_free(pWdaParams) ;
17127
17128 return;
17129}
17130
17131/*==========================================================================
17132 FUNCTION WDA_EXTScanSetSignfRSSIChangeRspCallback
17133
17134 DESCRIPTION
17135 API to send EXTScan Set Significant RSSI Change RSP to HDD
17136
17137 PARAMETERS
17138 pEventData: Response from FW
17139 pUserData:
17140===========================================================================*/
17141void WDA_EXTScanSetSignfRSSIChangeRspCallback(void *pEventData, void* pUserData)
17142{
17143 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17144 tWDA_CbContext *pWDA = NULL;
17145 void *pCallbackContext;
17146 tpAniSirGlobal pMac;
17147
17148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17149 "%s:", __func__);
17150 if (NULL == pWdaParams)
17151 {
17152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17153 "%s: pWdaParams received NULL", __func__);
17154 VOS_ASSERT(0) ;
17155 return;
17156 }
17157
17158 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17159
17160 if (NULL == pWDA)
17161 {
17162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17163 "%s: pWDA received NULL", __func__);
17164 VOS_ASSERT(0);
17165 goto error;
17166 }
17167
17168 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17169 if (NULL == pMac)
17170 {
17171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17172 "%s:pMac is NULL", __func__);
17173 VOS_ASSERT(0);
17174 goto error;
17175 }
17176
17177 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17178
17179 if (pMac->sme.pEXTScanIndCb)
17180 {
17181 pMac->sme.pEXTScanIndCb(pCallbackContext,
17182 WDA_EXTSCAN_SET_SIGNF_RSSI_CHANGE_RSP,
17183 pEventData);
17184 }
17185 else
17186 {
17187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17188 "%s:HDD callback is null", __func__);
17189 VOS_ASSERT(0);
17190 }
17191
17192
17193error:
17194
17195 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17196 {
17197 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17198 }
17199 if (pWdaParams->wdaMsgParam != NULL)
17200 {
17201 vos_mem_free(pWdaParams->wdaMsgParam);
17202 }
17203 vos_mem_free(pWdaParams) ;
17204
17205 return;
17206}
17207
17208/*==========================================================================
17209 FUNCTION WDA_EXTScanResetSignfRSSIChangeRspCallback
17210
17211 DESCRIPTION
17212 API to send EXTScan Set Significant RSSI Change RSP to HDD
17213
17214 PARAMETERS
17215 pEventData: Response from FW
17216 pUserData:
17217===========================================================================*/
17218void WDA_EXTScanResetSignfRSSIChangeRspCallback(void *pEventData,
17219 void* pUserData)
17220{
17221 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17222 tWDA_CbContext *pWDA = NULL;
17223 void *pCallbackContext;
17224 tpAniSirGlobal pMac;
17225
17226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17227 "%s:", __func__);
17228 if (NULL == pWdaParams)
17229 {
17230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17231 "%s: pWdaParams received NULL", __func__);
17232 VOS_ASSERT(0) ;
17233 return;
17234 }
17235
17236 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
17237
17238 if (NULL == pWDA)
17239 {
17240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17241 "%s: pWDA received NULL", __func__);
17242 VOS_ASSERT(0);
17243 goto error;
17244 }
17245
17246 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
17247 if (NULL == pMac)
17248 {
17249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17250 "%s:pMac is NULL", __func__);
17251 VOS_ASSERT(0);
17252 goto error;
17253 }
17254
17255 pCallbackContext = pMac->sme.pEXTScanCallbackContext;
17256
17257 if (pMac->sme.pEXTScanIndCb)
17258 {
17259 pMac->sme.pEXTScanIndCb(pCallbackContext,
17260 WDA_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_RSP,
17261 pEventData);
17262 }
17263 else
17264 {
17265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17266 "%s:HDD callback is null", __func__);
17267 VOS_ASSERT(0);
17268 }
17269
17270
17271error:
17272
17273 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17274 {
17275 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17276 }
17277 if (pWdaParams->wdaMsgParam != NULL)
17278 {
17279 vos_mem_free(pWdaParams->wdaMsgParam);
17280 }
17281 vos_mem_free(pWdaParams) ;
17282
17283 return;
17284}
17285
17286/*==========================================================================
17287 FUNCTION WDA_ProcessEXTScanStartReq
17288
17289 DESCRIPTION
17290 API to send EXTScan Start Request to WDI
17291
17292 PARAMETERS
17293 pWDA: Pointer to WDA context
17294 wdaRequest: Pointer to EXTScan req parameters
17295===========================================================================*/
17296VOS_STATUS WDA_ProcessEXTScanStartReq(tWDA_CbContext *pWDA,
17297 tSirEXTScanStartReqParams *wdaRequest)
17298{
17299 WDI_Status status = WDI_STATUS_SUCCESS;
17300 tWDA_ReqParams *pWdaParams;
17301
17302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17303 "%s: ", __func__);
17304 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17305 if (NULL == pWdaParams)
17306 {
17307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17308 "%s: VOS MEM Alloc Failure", __func__);
17309 VOS_ASSERT(0);
17310 return VOS_STATUS_E_NOMEM;
17311 }
17312 pWdaParams->pWdaContext = pWDA;
17313 pWdaParams->wdaMsgParam = wdaRequest;
17314 pWdaParams->wdaWdiApiMsgParam = NULL;
17315
17316 status = WDI_EXTScanStartReq((void *)wdaRequest,
17317 (WDI_EXTScanStartRspCb)WDA_EXTScanStartRspCallback,
17318 (void *)pWdaParams);
17319 if (IS_WDI_STATUS_FAILURE(status))
17320 {
17321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17322 "Failure to request. Free all the memory " );
17323 vos_mem_free(pWdaParams->wdaMsgParam);
17324 vos_mem_free(pWdaParams);
17325 }
17326 return CONVERT_WDI2VOS_STATUS(status);
17327}
17328
17329/*==========================================================================
17330 FUNCTION WDA_ProcessEXTScanStopReq
17331
17332 DESCRIPTION
17333 API to send EXTScan Start Request to WDI
17334
17335 PARAMETERS
17336 pWDA: Pointer to WDA context
17337 wdaRequest: Pointer to EXTScan req parameters
17338===========================================================================*/
17339VOS_STATUS WDA_ProcessEXTScanStopReq(tWDA_CbContext *pWDA,
17340 tSirEXTScanStopReqParams *wdaRequest)
17341{
17342 WDI_Status status = WDI_STATUS_SUCCESS;
17343 tWDA_ReqParams *pWdaParams;
17344
17345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17346 "%s:", __func__);
17347 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17348 if (NULL == pWdaParams)
17349 {
17350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17351 "%s: VOS MEM Alloc Failure", __func__);
17352 VOS_ASSERT(0);
17353 return VOS_STATUS_E_NOMEM;
17354 }
17355 pWdaParams->pWdaContext = pWDA;
17356 pWdaParams->wdaMsgParam = wdaRequest;
17357 pWdaParams->wdaWdiApiMsgParam = NULL;
17358
17359 status = WDI_EXTScanStopReq((void *)wdaRequest,
17360 (WDI_EXTScanStopRspCb)WDA_EXTScanStopRspCallback,
17361 (void *)pWdaParams);
17362 if (IS_WDI_STATUS_FAILURE(status))
17363 {
17364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17365 "Failure to request. Free all the memory " );
17366 vos_mem_free(pWdaParams->wdaMsgParam);
17367 vos_mem_free(pWdaParams);
17368 }
17369 return CONVERT_WDI2VOS_STATUS(status);
17370}
17371
17372/*==========================================================================
17373 FUNCTION WDA_ProcessEXTScanGetCachedResultsReq
17374
17375 DESCRIPTION
17376 API to send EXTScan Get Cached Results Request to WDI
17377
17378 PARAMETERS
17379 pWDA: Pointer to WDA context
17380 wdaRequest: Pointer to EXTScan req parameters
17381===========================================================================*/
17382VOS_STATUS WDA_ProcessEXTScanGetCachedResultsReq(tWDA_CbContext *pWDA,
17383 tSirEXTScanGetCachedResultsReqParams *wdaRequest)
17384{
17385 WDI_Status status = WDI_STATUS_SUCCESS;
17386 tWDA_ReqParams *pWdaParams;
17387
17388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17389 "%s: ", __func__);
17390 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17391 if (NULL == pWdaParams)
17392 {
17393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17394 "%s: VOS MEM Alloc Failure", __func__);
17395 VOS_ASSERT(0);
17396 return VOS_STATUS_E_NOMEM;
17397 }
17398 pWdaParams->pWdaContext = pWDA;
17399 pWdaParams->wdaMsgParam = wdaRequest;
17400 pWdaParams->wdaWdiApiMsgParam = NULL;
17401
17402 status = WDI_EXTScanGetCachedResultsReq((void *)wdaRequest,
17403 (WDI_EXTScanGetCachedResultsRspCb)WDA_EXTScanGetCachedResultsRspCallback,
17404 (void *)pWdaParams);
17405 if (IS_WDI_STATUS_FAILURE(status))
17406 {
17407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17408 "Failure to request. Free all the memory " );
17409 vos_mem_free(pWdaParams->wdaMsgParam);
17410 vos_mem_free(pWdaParams);
17411 }
17412 return CONVERT_WDI2VOS_STATUS(status);
17413}
17414
17415/*==========================================================================
17416 FUNCTION WDA_ProcessEXTScanGetCapabilitiesReq
17417
17418 DESCRIPTION
17419 API to send EXTScan Get Capabilities Request to WDI
17420
17421 PARAMETERS
17422 pWDA: Pointer to WDA context
17423 wdaRequest: Pointer to EXTScan req parameters
17424===========================================================================*/
17425VOS_STATUS WDA_ProcessEXTScanGetCapabilitiesReq(tWDA_CbContext *pWDA,
17426 tSirGetEXTScanCapabilitiesReqParams *wdaRequest)
17427{
17428 WDI_Status status = WDI_STATUS_SUCCESS;
17429 tWDA_ReqParams *pWdaParams;
17430
17431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17432 "%s:", __func__);
17433 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17434 if (NULL == pWdaParams)
17435 {
17436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17437 "%s: VOS MEM Alloc Failure", __func__);
17438 VOS_ASSERT(0);
17439 return VOS_STATUS_E_NOMEM;
17440 }
17441 pWdaParams->pWdaContext = pWDA;
17442 pWdaParams->wdaMsgParam = wdaRequest;
17443 pWdaParams->wdaWdiApiMsgParam = NULL;
17444
17445 status = WDI_EXTScanGetCapabilitiesReq((void *)wdaRequest,
17446 (WDI_EXTScanGetCapabilitiesRspCb)WDA_EXTScanGetCapabilitiesRspCallback,
17447 (void *)pWdaParams);
17448 if (IS_WDI_STATUS_FAILURE(status))
17449 {
17450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17451 "Failure to request. Free all the memory " );
17452 vos_mem_free(pWdaParams->wdaMsgParam);
17453 vos_mem_free(pWdaParams);
17454 }
17455 return CONVERT_WDI2VOS_STATUS(status);
17456}
17457
17458/*==========================================================================
17459 FUNCTION WDA_ProcessEXTScanSetBSSIDHotlistReq
17460
17461 DESCRIPTION
17462 API to send Set BSSID Hotlist Request to WDI
17463
17464 PARAMETERS
17465 pWDA: Pointer to WDA context
17466 wdaRequest: Pointer to EXTScan req parameters
17467===========================================================================*/
17468VOS_STATUS WDA_ProcessEXTScanSetBSSIDHotlistReq(tWDA_CbContext *pWDA,
17469 tSirEXTScanSetBssidHotListReqParams *wdaRequest)
17470{
17471 WDI_Status status = WDI_STATUS_SUCCESS;
17472 tWDA_ReqParams *pWdaParams;
17473
17474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17475 "%s: ", __func__);
17476 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17477 if (NULL == pWdaParams)
17478 {
17479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17480 "%s: VOS MEM Alloc Failure", __func__);
17481 VOS_ASSERT(0);
17482 return VOS_STATUS_E_NOMEM;
17483 }
17484 pWdaParams->pWdaContext = pWDA;
17485 pWdaParams->wdaMsgParam = wdaRequest;
17486 pWdaParams->wdaWdiApiMsgParam = NULL;
17487
17488 status = WDI_EXTScanSetBSSIDHotlistReq((void *)wdaRequest,
17489 (WDI_EXTScanSetBSSIDHotlistRspCb)WDA_EXTScanSetBSSIDHotlistRspCallback,
17490 (void *)pWdaParams);
17491 if (IS_WDI_STATUS_FAILURE(status))
17492 {
17493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17494 "Failure to request. Free all the memory " );
17495 vos_mem_free(pWdaParams->wdaMsgParam);
17496 vos_mem_free(pWdaParams);
17497 }
17498 return CONVERT_WDI2VOS_STATUS(status);
17499}
17500
17501/*==========================================================================
17502 FUNCTION WDA_ProcessEXTScanReSetBSSIDHotlistReq
17503
17504 DESCRIPTION
17505 API to send Reset BSSID Hotlist Request to WDI
17506
17507 PARAMETERS
17508 pWDA: Pointer to WDA context
17509 wdaRequest: Pointer to EXTScan req parameters
17510===========================================================================*/
17511VOS_STATUS WDA_ProcessEXTScanResetBSSIDHotlistReq(tWDA_CbContext *pWDA,
17512 tSirEXTScanResetBssidHotlistReqParams *wdaRequest)
17513{
17514 WDI_Status status = WDI_STATUS_SUCCESS;
17515 tWDA_ReqParams *pWdaParams;
17516
17517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17518 "%s:", __func__);
17519 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17520 if (NULL == pWdaParams)
17521 {
17522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17523 "%s: VOS MEM Alloc Failure", __func__);
17524 VOS_ASSERT(0);
17525 return VOS_STATUS_E_NOMEM;
17526 }
17527 pWdaParams->pWdaContext = pWDA;
17528 pWdaParams->wdaMsgParam = wdaRequest;
17529 pWdaParams->wdaWdiApiMsgParam = NULL;
17530
17531 status = WDI_EXTScanResetBSSIDHotlistReq((void *)wdaRequest,
17532 (WDI_EXTScanResetBSSIDHotlistRspCb)WDA_EXTScanResetBSSIDHotlistRspCallback,
17533 (void *)pWdaParams);
17534 if (IS_WDI_STATUS_FAILURE(status))
17535 {
17536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17537 "Failure to request. Free all the memory " );
17538 vos_mem_free(pWdaParams->wdaMsgParam);
17539 vos_mem_free(pWdaParams);
17540 }
17541 return CONVERT_WDI2VOS_STATUS(status);
17542}
17543
17544/*==========================================================================
17545 FUNCTION WDA_ProcessEXTScanSetSignfRSSIChangeReq
17546
17547 DESCRIPTION
17548 API to send Set Significant RSSI Change Request to WDI
17549
17550 PARAMETERS
17551 pWDA: Pointer to WDA context
17552 wdaRequest: Pointer to EXTScan req parameters
17553===========================================================================*/
17554VOS_STATUS WDA_ProcessEXTScanSetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
17555 tSirEXTScanSetSignificantChangeReqParams *wdaRequest)
17556{
17557 WDI_Status status = WDI_STATUS_SUCCESS;
17558 tWDA_ReqParams *pWdaParams;
17559
17560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17561 "%s: ", __func__);
17562 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17563 if (NULL == pWdaParams)
17564 {
17565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17566 "%s: VOS MEM Alloc Failure", __func__);
17567 VOS_ASSERT(0);
17568 return VOS_STATUS_E_NOMEM;
17569 }
17570 pWdaParams->pWdaContext = pWDA;
17571 pWdaParams->wdaMsgParam = wdaRequest;
17572 pWdaParams->wdaWdiApiMsgParam = NULL;
17573
17574 status = WDI_EXTScanSetSignfRSSIChangeReq((void *)wdaRequest,
17575 (WDI_EXTScanSetSignfRSSIChangeRspCb)WDA_EXTScanSetSignfRSSIChangeRspCallback,
17576 (void *)pWdaParams);
17577 if (IS_WDI_STATUS_FAILURE(status))
17578 {
17579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17580 "Failure to request. Free all the memory " );
17581 vos_mem_free(pWdaParams->wdaMsgParam);
17582 vos_mem_free(pWdaParams);
17583 }
17584 return CONVERT_WDI2VOS_STATUS(status);
17585}
17586
17587/*==========================================================================
17588 FUNCTION WDA_ProcessEXTScanResetSignfRSSIChangeReq
17589
17590 DESCRIPTION
17591 API to send Reset Significant RSSI Change Request to WDI
17592
17593 PARAMETERS
17594 pWDA: Pointer to WDA context
17595 wdaRequest: Pointer to EXTScan req parameters
17596===========================================================================*/
17597VOS_STATUS WDA_ProcessEXTScanResetSignfRSSIChangeReq(tWDA_CbContext *pWDA,
17598 tSirEXTScanResetSignificantChangeReqParams *wdaRequest)
17599{
17600 WDI_Status status = WDI_STATUS_SUCCESS;
17601 tWDA_ReqParams *pWdaParams;
17602
17603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
17604 "%s:", __func__);
17605 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17606 if (NULL == pWdaParams)
17607 {
17608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17609 "%s: VOS MEM Alloc Failure", __func__);
17610 VOS_ASSERT(0);
17611 return VOS_STATUS_E_NOMEM;
17612 }
17613 pWdaParams->pWdaContext = pWDA;
17614 pWdaParams->wdaMsgParam = wdaRequest;
17615 pWdaParams->wdaWdiApiMsgParam = NULL;
17616
17617 status = WDI_EXTScanResetSignfRSSIChangeReq((void *)wdaRequest,
17618 (WDI_EXTScanResetSignfRSSIChangeRspCb)
17619 WDA_EXTScanResetSignfRSSIChangeRspCallback,
17620 (void *)pWdaParams);
17621 if (IS_WDI_STATUS_FAILURE(status))
17622 {
17623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17624 "Failure to request. Free all the memory " );
17625 vos_mem_free(pWdaParams->wdaMsgParam);
17626 vos_mem_free(pWdaParams);
17627 }
17628 return CONVERT_WDI2VOS_STATUS(status);
17629}
17630#endif /* WLAN_FEATURE_EXTSCAN */
17631
Sunil Duttbd736ed2014-05-26 21:19:41 +053017632#ifdef WLAN_FEATURE_LINK_LAYER_STATS
17633
17634/*==========================================================================
17635 FUNCTION WDA_LLStatsSetRspCallback
17636
17637 DESCRIPTION
17638 API to process set link layer statistics response from FW
17639
17640 PARAMETERS
17641 pRsp: Pointer to set link layer statistics response
17642 pUserData: Pointer to user data
17643
17644 RETURN VALUE
17645 NONE
17646
17647===========================================================================*/
17648void WDA_LLStatsSetRspCallback(void *pEventData, void* pUserData)
17649{
17650 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17651
17652
17653 if (NULL == pWdaParams)
17654 {
17655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17656 "%s: pWdaParams received NULL", __func__);
17657 VOS_ASSERT(0) ;
17658 return ;
17659 }
17660
17661 /* Do not need to send notification to upper layer
17662 * Just free allocated resources */
17663 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17664 {
17665 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17666 }
17667 if (pWdaParams->wdaMsgParam != NULL)
17668 {
17669 vos_mem_free(pWdaParams->wdaMsgParam);
17670 }
17671 vos_mem_free(pWdaParams) ;
17672
17673 return;
17674}
17675
17676/*==========================================================================
17677 FUNCTION WDA_ProcessLLStatsSetReq
17678
17679 DESCRIPTION
17680 API to send Set Link Layer Stats request to WDI
17681
17682 PARAMETERS
17683 pWDA: Pointer to WDA context
17684 wdaRequest: Pointer to set Link Layer Stats req parameters
17685===========================================================================*/
17686VOS_STATUS WDA_ProcessLLStatsSetReq(tWDA_CbContext *pWDA,
17687 tSirLLStatsSetReq *wdaRequest)
17688{
17689 WDI_Status status = WDI_STATUS_SUCCESS;
17690 tWDA_ReqParams *pWdaParams;
17691
17692 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17693 if (NULL == pWdaParams)
17694 {
17695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17696 "%s: VOS MEM Alloc Failure", __func__);
17697 VOS_ASSERT(0);
17698 return VOS_STATUS_E_NOMEM;
17699 }
17700 pWdaParams->pWdaContext = pWDA;
17701 pWdaParams->wdaMsgParam = wdaRequest;
17702 pWdaParams->wdaWdiApiMsgParam = NULL;
17703
17704 status = WDI_LLStatsSetReq((void *)wdaRequest,
17705 (WDI_LLStatsSetRspCb)WDA_LLStatsSetRspCallback,
17706 (void *)pWdaParams);
17707 if (IS_WDI_STATUS_FAILURE(status))
17708 {
17709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17710 "Failure to request. Free all the memory " );
17711 vos_mem_free(pWdaParams->wdaMsgParam);
17712 vos_mem_free(pWdaParams);
17713 }
17714 return CONVERT_WDI2VOS_STATUS(status);
17715}
17716
17717/*==========================================================================
17718 FUNCTION WDA_LLStatsGetRspCallback
17719
17720 DESCRIPTION
17721 API to process get link layer statistics response from FW
17722
17723 PARAMETERS
17724 pRsp: Pointer to get link layer statistics response
17725 pUserData: Pointer to user data
17726
17727 RETURN VALUE
17728 NONE
17729
17730===========================================================================*/
17731void WDA_LLStatsGetRspCallback(void *pEventData, void* pUserData)
17732{
17733 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17734
17735 if (NULL == pWdaParams)
17736 {
17737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17738 "%s: pWdaParams received NULL", __func__);
17739 VOS_ASSERT(0) ;
17740 return ;
17741 }
17742
17743 /* Do not need to send notification to upper layer
17744 * Just free allocated resources */
17745 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17746 {
17747 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17748 }
17749 if (pWdaParams->wdaMsgParam != NULL)
17750 {
17751 vos_mem_free(pWdaParams->wdaMsgParam);
17752 }
17753 vos_mem_free(pWdaParams) ;
17754
17755 return;
17756}
17757
17758/*==========================================================================
17759 FUNCTION WDA_ProcessLLStatsGetReq
17760
17761 DESCRIPTION
17762 API to send Get Link Layer Stats request to WDI
17763
17764 PARAMETERS
17765 pWDA: Pointer to WDA context
17766 wdaRequest: Pointer to get Link Layer Stats req parameters
17767===========================================================================*/
17768VOS_STATUS WDA_ProcessLLStatsGetReq(tWDA_CbContext *pWDA,
17769 tSirLLStatsGetReq *wdaRequest)
17770{
17771 WDI_Status status = WDI_STATUS_SUCCESS;
17772 tWDA_ReqParams *pWdaParams;
17773
17774 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17775 if (NULL == pWdaParams)
17776 {
17777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17778 "%s: VOS MEM Alloc Failure", __func__);
17779 VOS_ASSERT(0);
17780 return VOS_STATUS_E_NOMEM;
17781 }
17782 pWdaParams->pWdaContext = pWDA;
17783 pWdaParams->wdaMsgParam = wdaRequest;
17784 pWdaParams->wdaWdiApiMsgParam = NULL;
17785
17786 status = WDI_LLStatsGetReq((void *) wdaRequest,
17787 (WDI_LLStatsGetRspCb)WDA_LLStatsGetRspCallback,
17788 (void *)pWdaParams);
17789 if (IS_WDI_STATUS_FAILURE(status))
17790 {
17791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17792 "Failure to request. Free all the memory " );
17793 vos_mem_free(pWdaParams->wdaMsgParam);
17794 vos_mem_free(pWdaParams);
17795 }
17796 return CONVERT_WDI2VOS_STATUS(status);
17797}
17798
17799/*==========================================================================
17800 FUNCTION WDA_LLStatsClearRspCallback
17801
17802 DESCRIPTION
17803 API to process clear link layer statistics response from FW
17804
17805 PARAMETERS
17806 pRsp: Pointer to clear link layer statistics response
17807 pUserData: Pointer to user data
17808
17809 RETURN VALUE
17810 NONE
17811
17812===========================================================================*/
17813void WDA_LLStatsClearRspCallback(void *pEventData, void* pUserData)
17814{
17815 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
17816
17817
17818 if (NULL == pWdaParams)
17819 {
17820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17821 "%s: pWdaParams received NULL", __func__);
17822 VOS_ASSERT(0) ;
17823 return ;
17824 }
17825 /* Do not need to send notification to upper layer
17826 * Just free allocated resources */
17827 if (pWdaParams->wdaWdiApiMsgParam != NULL)
17828 {
17829 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
17830 }
17831 if (pWdaParams->wdaMsgParam != NULL)
17832 {
17833 vos_mem_free(pWdaParams->wdaMsgParam);
17834 }
17835 vos_mem_free(pWdaParams) ;
17836 return;
17837}
17838
17839/*==========================================================================
17840 FUNCTION WDA_ProcessLLStatsClearReq
17841
17842 DESCRIPTION
17843 API to send Clear Link Layer Stats request to WDI
17844
17845 PARAMETERS
17846 pWDA: Pointer to WDA context
17847 wdaRequest: Pointer to earLink Layer Stats req
17848===========================================================================*/
17849VOS_STATUS WDA_ProcessLLStatsClearReq(tWDA_CbContext *pWDA,
17850 tSirLLStatsClearReq *wdaRequest)
17851{
17852 WDI_Status status = WDI_STATUS_SUCCESS;
17853 tWDA_ReqParams *pWdaParams;
17854
17855 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
17856 if (NULL == pWdaParams)
17857 {
17858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17859 "%s: VOS MEM Alloc Failure", __func__);
17860 VOS_ASSERT(0);
17861 return VOS_STATUS_E_NOMEM;
17862 }
17863 pWdaParams->pWdaContext = pWDA;
17864 pWdaParams->wdaMsgParam = wdaRequest;
17865 pWdaParams->wdaWdiApiMsgParam = NULL;
17866
17867 status = WDI_LLStatsClearReq((void *) wdaRequest,
17868 (WDI_LLStatsClearRspCb)WDA_LLStatsClearRspCallback,
17869 (void *)pWdaParams);
17870 if (IS_WDI_STATUS_FAILURE(status))
17871 {
17872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
17873 "Failure to request. Free all the memory " );
17874 vos_mem_free(pWdaParams->wdaMsgParam);
17875 vos_mem_free(pWdaParams);
17876 }
17877 return CONVERT_WDI2VOS_STATUS(status);
17878}
17879
17880#endif /* WLAN_FEATURE_LINK_LAYER_STATS */